c语言洗牌发牌结构体,C语言实现洗牌发牌小程序

a3ca1169dc0ad090dc9f445546313ce1.png

本文实例为大家分享了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",color[col]);

}

else

{

if(num==10)

{

printf("%s:",color[col]);

printf("10");

}

else

{

printf("%s:",color[col]);

printf("%c",number[num]);

}

}

}

printf("

");

}

//洗牌

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("数量不足

");

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("

");

}

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("

");

printf("手牌B: ");

print_hand_card(hand2,17);

printf("

");

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值