C语言的洗牌发牌小程序

构建一副扑克牌,并实现洗牌发牌。


代码

#include 
#include 
#include 

#define NUM 10000 //洗牌混乱度

char color[7][7] = {"空白","红桃","黑桃","草花","方片","小王","大王"};  // 1:红桃 2:黑桃 3:草花 4:方片 5:小王 6:大王
char number[]={"0A234567890JQK"};  // 0:不存内容 1:A  2:2  3:3  4:4  5:5  6:6  7:7  8:8  9:9  10:10  11:J  12:Q  13:K

//构建扑克
struct card{
    unsigned int number;
    unsigned int color;
};

unsigned int NUM_card=53; //剩余未发的牌数(发牌时用的变量)

struct card card[54]; //创建保存一副牌的结构体


//构建一副牌(有序)
void creat_pair_card()
{
    int num=1;
    int col=1;
    int i=0;
    for(num=1;num<=15;num++)
    {
        //生成大小王
        if(num>=14)
        {
            card[i].number=num;
            card[i].color=col++;
            i++;
        }
        else
        {
            //生成普通牌
            for(col=1;col<=4;col++)
            {
                card[i].number=num;
                card[i].color=col;
                i++;
            }
        }
    }
}

//显示一副牌
void print_card()
{
    int i;   
    int num,col;  //点数与花色对应数组下标
    for(i=0;i<54;i++)
    {
        col=card[i].color;
        num=card[i].number;
        if(col>=5)
        {
            printf("%s\t",color[col]);
        }
        else
        {
            if(num==10)
            {
                printf("%s:",color[col]);
                printf("10\t");
            }
            else
            {
                printf("%s:",color[col]);
                printf("%c\t",number[num]);
            }
        } 
    }
    printf("\n");
}


//洗牌
void wash_card()
{
    int i;
    int ch1,ch2;
    srand((unsigned)time(NULL));
    for(i=0;i53)
        {
            ch1=100-ch1; //随机数大于53则减小
        }

        if(ch2>53)
        {
            ch2=100-ch2;
        }

        if(ch1 == ch2)
        {
            continue;
        }
        //两个随机牌交换
        struct card tmp=card[ch1];
        card[ch1]=card[ch2];
        card[ch2]=tmp;
    }
}

//发牌
void send_card(struct card hand[],int num)
{
    if(NUM_card=5)
        {
            printf("%s ",color[col]);
        }
        else
        {
            if(point==10)
            {
                printf("%s:",color[col]);
                printf("10 ");
            }
            else
            {
                printf("%s:",color[col]);
                printf("%c ",number[point]);
            }
        } 
    }
    printf("\n");
}


int main(void)
{

    creat_pair_card();  //创建一副牌 有序
    wash_card();//洗牌
    print_card();//打印

    struct card hand1[17]; //创建两个结构体保存手牌17张
    struct card hand2[17];
    send_card(hand1,17); //发牌
    send_card(hand2,17);
    printf("手牌A: ");
    print_hand_card(hand1,17);
    printf("\n");
    printf("手牌B: ");
    print_hand_card(hand2,17);
    printf("\n");
}

你可能感兴趣的:(Linux,C学习)