定义结构体数组,利用srand和rand随机发牌
代码如下
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//定义poker结构体
typedef struct card {
char* color;
char* rank;
int jokerflag;
}Card;
void InitCard(Card* poker, char* color[], char* rank[], char* joker[]);//初始化
void Shakeout(Card* poker);//洗牌
void PrintPoker(Card* poker);//发牌
int main()
{
Card poker[54];
char* color[] = {"方片","梅花","红桃","黑桃"};//指针数组,每个指针指向一个字符串
char* rank[] = {"2","3","4","5","6","7","8","9","10","Jack","Queen","King","Ace"};
char* joker[] = {"BigJoker","SmallJoker"};
//初始化
InitCard(poker, color, rank, joker);
// 洗牌
Shakeout(poker);
// 分发给三位玩家
PrintPoker(poker);
return 0;
}
void InitCard(Card*poker, char* color[], char* rank[], char* joker[])
{
// 初始化扑克牌
int flag = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 13; j++) {
poker[flag].color = color[i];
poker[flag].rank = rank[j];
poker[flag].jokerflag = 0;
flag++;
}
}
poker[52].color = NULL;
poker[52].rank = joker[0];
poker[52].jokerflag = 1;
poker[53].color = NULL;
poker[53].rank = joker[1];
poker[53].jokerflag = 1;
}
void Shakeout(Card*poker)//洗牌
{
// 洗牌
srand((unsigned)time(NULL));
for (int i = 0; i < 54; i++) {
int j = rand() % 54;
Card temp = poker[i];//临时变量
poker[i] = poker[j];
poker[j] = temp;
}
}
void PrintPoker(Card* poker)//发牌
{
printf("\n\nPlayer 1: ");
for (int i = 0; i < 17; i++) {//0_16
if (poker[i].jokerflag != 0) {
printf("%s ", poker[i].rank);
}
else {
printf("%s%s ", poker[i].color, poker[i].rank);
}
}
printf("\nPlayer 2: ");
for (int i = 17; i < 34; i++) {//17-33
if (poker[i].jokerflag != 0) {
printf("%s ", poker[i].rank);
}
else {
printf("%s%s ", poker[i].color, poker[i].rank);
}
}
printf("\nPlayer 3: ");
for (int i = 34; i < 51; i++) {
if (poker[i].jokerflag != 0) {
printf("%s ", poker[i].rank);
}
else {
printf("%s%s ", poker[i].color, poker[i].rank);
}
}
printf("\n底牌为: ");
for (int i = 51; i < 54; i++) {
if (poker[i].jokerflag != 0) {
printf("%s ", poker[i].rank);
}
else {
printf("%s%s ", poker[i].color, poker[i].rank);
}
}
}
运行结果如下