C语言自动发牌程序代码介绍
发布时间:2021-11-12 14:57:18 所属栏目:教程 来源:互联网
导读:问题描述 一副扑克有52张牌,打桥牌时应将牌分给4个人。请设计一个程序完成自动发牌的工作。要求:黑桃用S (Spaces)表示,红桃用H (Hearts)表示,方块用D (Diamonds)表示,梅花用C (Clubs)表示。 问题分析 按照打桥牌的规定,每人应当有13张牌。在人工发牌时
问题描述 一副扑克有52张牌,打桥牌时应将牌分给4个人。请设计一个程序完成自动发牌的工作。要求:黑桃用S (Spaces)表示,红桃用H (Hearts)表示,方块用D (Diamonds)表示,梅花用C (Clubs)表示。 问题分析 按照打桥牌的规定,每人应当有13张牌。在人工发牌时,先进行洗牌,然后将洗好的牌按一定的顺序发给每一个人。为了便于计算机模拟,可将人工方式的发牌过程加以修改:先确定好发牌顺序:1、2、3、4;将52张牌顺序编号:黑桃2对应数字0,红桃2对应数字1,方块2对应数字2,梅花2对应数字3,黑桃3对应数字4,红桃3对应数字5,……; 然后从52张牌中随机为每个人抽牌。 下面是完整的代码: #include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int a[60]; int b[60]; int w = 0; int wi,wj,wii; int i,j,index,x=0,m; for(i=0;i<54;i++) a[i]=i+1; srand((unsigned)time(0)); for(i=0;i<54;) { index=rand()%54; if(a[index]!=0) { b[i]=a[index]; //printf("%d ",b[i]); a[index]=0; ++i; } } printf("n说明:n"); printf("*******************n"); printf("** 红桃 %c ",3); printf("**n"); printf("** 方块 %c ",4); printf("**n"); printf("** 梅花 %c ",5); printf("**n"); printf("** 黑桃 %c ",6); printf("**n"); printf("** 大王 A **n** 小王 a **n"); printf("*******************n"); printf("n请输入打牌人数:n"); scanf("%d",&w); wi = 54/w; wj = 54%w; //printf("%d,%d",wi,wj); for (j = 0;j < w;j++) { m = 0; printf("nn第%d个人的牌n",j+1); wj --; if (wj>=0) wii = wi + 1; else wii = wi; //红桃 printf("红桃 %c ",3); printf(":"); for(i = j*wii;i<(j+1)*wii;i++) { if (b[i]<=13&&b[i]>0) { m++; if (b[i]==11) printf("J "); else if (b[i]==12) printf("Q "); else if (b[i]==13) printf("K "); else printf("%d ",b[i]); } } //方块 printf("n方块 %c ",4); printf(":"); for(i = j*wii;i<(j+1)*wii;i++) { if (b[i]<=26&&b[i]>13) { m++; b[i] = b[i]-13; if (b[i]==11) printf("J "); else if (b[i]==12) printf("Q "); else if (b[i]==13) printf("K "); else printf("%d ",b[i]); } } //梅花 printf("n梅花 %c ",5); printf(":"); for(i = j*wii;i<(j+1)*wii;i++) { if (b[i]<=39&&b[i]>26) { m++; b[i] = b[i]-26; if (b[i]==11) printf("J "); else if (b[i]==12) printf("Q "); else if (b[i]==13) printf("K "); else printf("%d ",b[i]); } } //黑桃 printf("n黑桃 %c ",6); printf(":"); for(i = j*wii;i<(j+1)*wii;i++) { if (b[i]<=52&&b[i]>39) { m++; b[i] = b[i]-39; if (b[i]==11) printf("J "); else if (b[i]==12) printf("Q "); else if (b[i]==13) printf("K "); else printf("%d ",b[i]); } } //大小王 printf("n大小王 A or a :"); for(i = j*wii;i<=(j+1)*wii;i++) { if (b[i]==53) { m++; printf("A "); } if (b[i]==54) { m++; printf("a "); } } printf("n总共:%d张牌!!!n",m); } } 2个人分牌的测试结果 [linuxidc@localhost linuxidc.com]$ ./linuxidc 说明: ******************* ** 红桃 ** ** 方块 ** ** 梅花 ** ** 黑桃 ** ** 大王 A ** ** 小王 a ** ******************* 请输入打牌人数: 2 第1个人的牌 红桃 :3 7 5 4 Q 10 方块 :Q K 2 10 8 J 1 梅花 :Q 8 7 6 1 K 5 黑桃 :6 4 Q 10 1 大小王 A or a :A a 总共:27张牌!!! 第2个人的牌 红桃 :8 2 K J 6 1 9 方块 :5 4 3 6 7 9 梅花 :4 2 3 10 J 9 黑桃 :J 2 5 9 7 K 3 8 大小王 A or a : 总共:27张牌!!! ![]() (编辑:南通站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |