用 c 语言实现自动发牌

来源:互联网 发布:服务器开放端口查询 编辑:程序博客网 时间:2024/05/16 01:52

一副扑克有52张牌,打牌时将牌发给4个人,现设计一个程序完成自动发牌的工作。
要求:黑桃用 S 表示;红桃用 H 表示;方块用 D 表示;梅花用 C 表示。

程序如下

#include <stdio.h>#include <stdlib.h>#include <time.h>void p(int *, char *);int comp(const void *j, const void *i);int main(){    static char n[] = {'2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A'};    int a[53], b1[13], b2[13], b3[13], b4[13];    int b11 = 0, b22 = 0, b33 = 0, b44 = 0, t = 1, m, flag, i;    srand((unsigned)time(NULL));    while (t <= 52)                               /*控制发52张牌*/    {        m = rand() % 52;                   /*产生0~51之间的随机数*/        for (flag = 1, i = 1; i <= t && flag; i++)        {                           /*查找新产生的随机数是否已经存在*/            if (m == a[i])            {                flag = 0;            }        }        if (flag)        {            a[t++] = m;            if (0 == t % 4)            /*根据t的模值,判断当前的牌*/            {                                  /*应存入哪个数组中*/                b1[b11++] = a[t - 1];            }            else            {                if (1 == t % 4)                {                    b2[b22++] = a[t - 1];                }                else                {                    if (2 == t % 4)                    {                        b3[b33++] = a[t - 1];                    }                    else                    {                        if (3 == t % 4)                        {                            b4[b44++] = a[t - 1];                        }                    }                }            }        }    }    qsort(b1, 13, sizeof(b1[0]), comp);     /*将每个人的牌进行排序*/    qsort(b2, 13, sizeof(b2[0]), comp);    qsort(b3, 13, sizeof(b3[0]), comp);    qsort(b4, 13, sizeof(b4[0]), comp);    printf("No.1");                          /*分别打印每个人的牌*/    p(b1, n);    printf("\nNo.2");    p(b2, n);    printf("\nNo.3");    p(b3, n);    printf("\nNo.4");    p(b4, n);    printf("\n");    return 0;}void p(int *b, char *n){    int i;    printf("\n%c ", 'S');    for (i = 0; i < 13; i++)    {        if (0 == b[i] / 13)        {            printf("%c", n[b[i] % 13]);        }    }    printf("\n%c ", 'H');    for (i = 0; i < 13; i++)    {        if (1 == b[i] / 13)        {            printf("%c", n[b[i] % 13]);        }    }    printf("\n%c ", 'D');    for (i = 0; i < 13; i++)    {        if (2 == b[i] / 13)        {            printf("%c", n[b[i] % 13]);        }    }    printf("\n%c ", 'C');    for (i = 0; i < 13; i++)    {        if (3 == b[i] / 13 || 4 == b[i] / 13)        {            printf("%c", n[b[i] % 13]);        }    }}int comp(const void *j, const void *i){    return(*(char *)i - *(char *)j);}

第一次发牌
这里写图片描述

第二次发牌
这里写图片描述