2025年4月28日 星期一 乙巳(蛇)年 正月廿九 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言自动发牌程序

时间:12-29来源:作者:点击数:102

问题描述

一副扑克有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<stdlib.h>
  • #include<stdio.h>
  • int comp(const void *j, const void *i);
  • void p(int b[], char n[]);
  • int main(void)
  • {
  • 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;
  • while( t<=52 ) /*控制发52张牌*/
  • {
  • m=rand()%52; /*产生0到51之间的随机数*/
  • for(flag=1,i=1; i<=t&&flag; i++) /*查找新产生的随机数是否已经存在*/
  • if(m==a[i])
  • flag=0; /*flag=1表示产生的是新的随机数,flag=0表示新产
  • 生的随机数已经存在*/
  • if(flag)
  • {
  • a[t++]=m; /*如果产生了新的随机数,则存入数组*/
  • /*根据t的模值,判断当前的牌应存入哪个数组中*/
  • if(t%4==0)
  • b1[b11++]=a[t-1];
  • else
  • if(t%4==1)
  • b2[b22++]=a[t-1];
  • else
  • if(t%4==2)
  • b3[b33++]=a[t-1];
  • else
  • if(t%4==3)
  • b4[b44++]=a[t-1];
  • }
  • }
  • qsort(b1, 13, sizeof(int), comp); /*将每个人的牌进行排序*/
  • qsort(b2, 13, sizeof(int), comp);
  • qsort(b3, 13, sizeof(int), comp);
  • qsort(b4, 13, sizeof(int), comp);
  • p(b1, n); /*分别打印每个人的牌*/
  • p(b2, n);
  • p(b3, n);
  • p(b4, n);
  • return 0;
  • }
  • void p(int b[], char n[])
  • {
  • int i;
  • printf("\n\006 "); /*打印黑桃标记*/
  • for(i=0; i<13; i++) /*将数组中的值转换为相应的花色*/
  • if(b[i]/13==0) /*找到该花色对应的牌*/
  • printf("%c ", n[b[i]%13]);
  • printf("\n\003 "); /*打印红桃标记*/
  • for(i=0; i<13; i++)
  • if((b[i]/13)==1)
  • printf("%c ", n[b[i]%13]);
  • printf("\n\004 "); /*打印方块标记*/
  • for(i=0; i<13; i++)
  • if(b[i]/13==2)
  • printf("%c ", n[b[i]%13]);
  • printf("\n\005 "); /*打印梅花标记*/
  • for(i=0; i<13; i++)
  • if(b[i]/13==3 || b[i]/13==4)
  • printf("%c ", n[b[i]%13]);
  • printf("\n");
  • }
  • int comp(const void *j, const void *i) /*qsort调用的排序函数*/
  • {
  • return(*(int*)i-*(int*)j);
  • }

运行结果:

 

 K 8 7
 Q T 5
 A K Q
 A T 5 2

 A J 5 3 2
 7 2
 T 8 6
 K 7 3

 4
 A 8 6 4
 9 7 3 2
 J 9 6 4

 Q T 9 6
 K J 9 3
 J 5 4
 Q 8

 

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门