#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
#define CARD_SUM_NUM 54 // 54张牌
#define CARD_EXCEPT_JOKER 52 // 除王 52张牌
#define CRAD_EACH_SUIT 13 // 每种花色13张
typedef struct card
{
int Suit; // 花色
char Number; // 牌数
}Card;
Card OneCard[CARD_EXCEPT_JOKER]; // 保存每张牌的花色、点数
void showCard() // 显示扑克牌
{
int i,j;
int sign;
for (i = 0, j = 0; i < CARD_EXCEPT_JOKER; i++, j++)
{
if (!(j%CRAD_EACH_SUIT))
{
printf("\n");
}
switch (OneCard[i].Suit) // 显示花色符号
{
case 0:
sign = 3;
break;
case 1:
sign = 4;
break;
case 2:
sign = 5;
break;
case 3:
sign = 6;
break;
default :
break;
}
printf(" %c%c", sign, OneCard[i].Number); // 输出显示
}
printf("\n");
}
void shuffle() // 算法
{
int i, j, temp;
int suit = -1;
Card tempcard;
for (i = 0; i<CARD_EXCEPT_JOKER; i++) // 生成 52 张牌
{
if (i%CRAD_EACH_SUIT == 0)
{
suit++; // 改变花色
}
OneCard[i].Suit = suit; // 保存花色
temp = i%CRAD_EACH_SUIT;
switch (temp) // 特殊值处理
{
case 0:
OneCard[i].Number = 'A';
break;
case 9:
OneCard[i].Number = '0';
break;
case 10:
OneCard[i].Number = 'J';
break;
case 11:
OneCard[i].Number = 'Q';
break;
case 12:
OneCard[i].Number = 'K';
break;
default:
OneCard[i].Number = temp+'1';
break;
}
}
printf("before wash card : \n");
showCard();
srand(time(NULL)); // 随机种子
for (i = 0; i<CARD_EXCEPT_JOKER; i++)
{
j = rand()%CARD_EXCEPT_JOKER; // 随机换牌
tempcard = OneCard[j];
OneCard[j] = OneCard[i];
OneCard[i] = tempcard;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
system("color a");
shuffle();
printf("\nafter wash card : \n");
showCard();
return 0;
}
运行结果: