#include <stdio.h> //standard input output
#include <stdlib.h>
#include <Windows.h>
#include <math.h>
#include <time.h>
struct card
{
int id;
int number;
char name[5];
int style;
int owner;
};
void card_init()
{
for (int i = 1; i < 55; i++)
{
cards[i].id = i;
cards[i].owner = 0;
cards[i].number = (int)ceil(i / 4.0) + 2;
cards[i].style = i % 4;
if (i < 33)
{
sprintf(cards[i].name, "%d", cards[i].number);
}
else if (i < 37)
{
strcpy(cards[i].name, "J");
}
else if (i < 41)
{
strcpy(cards[i].name, "Q");
}
else if (i < 45)
{
strcpy(cards[i].name, "K");
}
else if (i < 49)
{
strcpy(cards[i].name, "A");
}
else if (i < 53)
{
strcpy(cards[i].name, "2");
}
else
{
strcpy(cards[i].name, "King");
}
}
}
void card_show(struct card arr[],int len) //arr
{
char *styleArr[] = {"黑桃", "红桃", "红方块", "黑梅花"};
for (int i = 0; i < len; i++)
{
printf("id:%d ;", arr[i].id);
printf("num:%d ; ", arr[i].number);
printf("style:%s ; ", styleArr[arr[i].style]);
printf("name:%s ; ", arr[i].name);
printf("ownerId:%d ; \n ", arr[i].owner);
}
}
// 发牌,参数为玩家人数
void card_deal(int playNum)
{
//数组长度
int arrLen =(int) ceil(54.0/playNum);
// struct card playerCardArr[playNum][arrLen];
static struct card playerCardArr[3][18];
int total = 0;
int round=0;
while (total < 54)
{
for (int i = 1; i <= playNum; i++)
{
int r;
srand(time(NULL));
do
{
r= rand() % 54 + 1;
} while (cards[r].owner!=0);
cards[r].owner = i;
memcpy((void*)&playerCardArr[i][round], (void *)&cards[r],sizeof(struct card));
total++;
}
round++;
}
}
//排序
int main()
{
SetConsoleOutputCP(65001);
struct card cards[54];
int playNum;
int cardNum;
card_init();
printf("请输入玩家数量:\n");
scanf("%d",&playNum);
cardNum = ceil(54.0/playNum);
static struct card playerCardArr[playNum][cardNum];
card_deal(playNum);
// card_show(p[2],18);
return 0;
}