#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;
}