#include
#include
#include
#include
/******************Begin********************/
/*********在此定义结构体类型CARD************/
typedef struct card{
char card[52];
}CARD;
/*******************End*********************/
void FillCard(CARD card[]); //生成牌
void Deal(CARD card[], int result[]); //发牌的应用
void Wash(int result[]);
int main()
{
int result[52];
//模拟洗发牌
CARD card[52];
FillCard(card);
Wash(result);
Deal(card,result);
return 0;
}
//生成无规则的乱序的洗牌数组
void Wash(int result[])
{
//srand((unsigned)time(NULL));
int seed;
scanf("%d",&seed);
srand(seed);
int randnum = 0 ,temp = 0;
//对所有的数组元素进行初始化
for(int i = 0;i < 52; i++)
{
result[i] = i;
}
//生成随机的数列
for(int i = 0; i< 52;i ++)
{
randnum = rand() % 52;
temp = result[randnum];
result[randnum] = result[i];
result[i] = temp;
}
return ;
}
//发牌,传入对应的结构体的数组和随机打乱的数组序列
//输出4行代表发给4位不同玩家的扑克牌
void Deal(CARD card[],int result[])
{
for(int i = 0;i < 52;i ++)
{
/******************Begin********************/
/*****把card按照result的乱序结果重新排列****/
/*******************End*********************/
}
}
//构成扑克牌
void FillCard(CARD card[])
{
char *face[] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
char *suit[] = {"S","H","C","D"};
int i = 0;
for(;i < 52;i ++)
{
strcpy(card[i].face,face[i % 13]);
strcpy(card[i].suit,suit[i / 13]);
}
}
ChatGPT尝试为您解答,仅供参考
在Deal函数中,可以使用临时变量temp来保存card[i]的值,然后将card[i]的值赋为card[result[i]],最后将temp赋值给card[result[i]]。具体实现如下:
void Deal(CARD card[],int result[])
{
for(int i = 0;i < 52;i ++)
{
CARD temp = card[i];
card[i] = card[result[i]];
card[result[i]] = temp;
}
}
发牌时,可以使用循环来分别输出4位玩家的牌。具体实现如下:
void Deal(CARD card[],int result[])
{
for(int i = 0;i < 52;i ++)
{
CARD temp = card[i];
card[i] = card[result[i]];
card[result[i]] = temp;
}
for (int i = 0; i < 52; i++)
{
printf("%s%s ", card[i].face, card[i].suit);
if ((i + 1) % 13 == 0)
{
printf("\n");
}
}
}
最后,在main函数中调用Deal函数即可完成发牌的模拟。
在main函数中,您可以添加一个循环来模拟多局游戏。每次循环,您可以输入一个随机数种子,然后调用Wash函数洗牌,最后调用Deal函数发牌。具体实现如下:
int main()
{
int result[52];
CARD card[52];
FillCard(card);
int game_rounds;
scanf("%d", &game_rounds);
for (int i = 0; i < game_rounds; i++)
{
int seed;
scanf("%d", &seed);
srand(seed);
Wash(result);
Deal(card, result);
}
return 0;
}
您还可以在Deal函数中输出玩家的编号,方便您区分不同玩家的手牌。具体实现如下:
void Deal(CARD card[],int result[])
{
for(int i = 0;i < 52;i ++)
{
CARD temp = card[i];
card[i] = card[result[i]];
card[result[i]] = temp;
}
for (int i = 0; i < 52; i++)
{
printf("player %d: %s%s ", (i % 4) + 1, card[i].face, card[i].suit);
if ((i + 1) % 13 == 0)
{
printf("\n");
}
}
}
这啥破代码,card本来就已经是个结构体了,里面有个长度52的数组,然后又定义成结构体数组,长度也是52
你这成了52x52的二维数组了