游戏算法-洗扑克牌
扑克牌洗牌算法中关键点:随机值的算法及扑克牌的设计。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define CARD_NUM 52
typedef struct _card_tag
{
char m_card_num;
char m_suit; // 3:heart 4:club 5:diomand 6:spade
} card_t;
card_t arrCards[CARD_NUM];
void PrintCard(card_t arrCard[])
{
int i = 0;
for (i = 0; i < CARD_NUM; i++)
{
if ((i != 0) && (i % 13 == 0))
{
printf("\n\n");
}
printf("%d%c ", arrCard[i].m_suit, arrCard[i].m_card_num);
}
printf("\n\n");
}
void Shuffle(card_t arrCard[])
{
int i = 0;
int nTmp = 0;
char nSuit = 3;
char chCard = 0;
for (i = 0; i < CARD_NUM; i++)
{
if ((i != 0) && (i % 13 == 0))
{
nSuit++;
}
nTmp = i % 13;
switch(nTmp)
{
case 0:
arrCard[i].m_card_num = 'A';
break;
case 9:
arrCard[i].m_card_num = '0';
break;
case 10:
arrCard[i].m_card_num = 'J';
break;
case 11:
arrCard[i].m_card_num = 'Q';
break;
case 12:
arrCard[i].m_card_num = 'K';
break;
default:
arrCard[i].m_card_num = '1' + nTmp;
break;
}
arrCard[i].m_suit = nSuit;
}
PrintCard(arrCard);
srand(time(NULL));
for (i = 0; i < CARD_NUM; i++)
{
nTmp = rand() % 52;
chCard = arrCard[nTmp].m_card_num;
nSuit = arrCard[nTmp].m_suit;
arrCard[nTmp].m_card_num = arrCard[i].m_card_num;
arrCard[nTmp].m_suit = arrCard[i].m_suit;
arrCard[i].m_card_num = chCard;
arrCard[i].m_suit = nSuit;
}
PrintCard(arrCard);
}
int main()
{
int n = 0;
Shuffle(arrCards);
scanf("%d", n);
return 0;
}