本文实例为大家分享了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;i

{

ch1=rand()%100; //2147483647 取最后两位0-99

ch2=rand()%100;

if(ch1>53)

{

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

{

printf("数量不足\n");

return;

}

int i;

for(i=0;i

{

hand[i]=card[NUM_card-i];

}

NUM_card=NUM_card-num;

}

//显示手牌

void print_hand_card(struct card hand[],int num)

{

int i;

int point,col;

for(i=0;i

{

col=hand[i].color;

point=hand[i].number;

if(col>=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");

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐