数据结构扑克牌发牌问题_第1页
数据结构扑克牌发牌问题_第2页
数据结构扑克牌发牌问题_第3页
数据结构扑克牌发牌问题_第4页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、内容:问题重述:设计一个四个人玩的纸牌游戏的程序, 一共有五十四张牌, 要发给四个人,并且每次发出的牌都不一样。并且符合纸牌的规则(可以是桥牌、升级、红四、斗地主等,但是必须说明规则) 。并且程序能按照设定的游戏规则从小到大进行排序, 如果有底牌的话要说明底牌的情况。 最后要验证每次发牌是否合法。该程序纸牌的玩法:在一副牌中,去除大小王,然后 2 最大其次是 A ,然后按顺序从大到小一次减小。所用到的具体算法:冒泡法,线性表删除元素操作;具体做法为:先将一副扑克牌中的大小王拿掉,还会剩下 52 张牌,在进行随机的洗牌,将所有的排顺序打乱, 然后在打乱后一定的顺序情况下, 按照规则平均分发给四个

2、人,每人会得到十三张牌,最后将每人手里的牌按照 3、4、5、6、7、8、9、10、J、 Q、K 、A 、2 的顺序进行排列,在排列过程中会出现花色的前后顺序排列。再将四个人手里的拍验证, 检验是否每张牌是否都出现并且只出现一次。如果出现并且只出现一次,说明程序成功,否则程序失败,则需要重新进行程序的检验,修改。流程图大致情况 :设计的结构体变量说明:char CardColor是存储花色的变量char CardNumber2是存储扑克牌的面值变量int flag;/ 判断标志struct pukepai Card52用 char 类型存储 52 张扑克牌 int card52用 int 类型形

3、式并且,我们在一开始定义每张牌的变量每张牌现在我们给予赋值, 例如 108 代表方块 8,212 代表红桃 Q,其中三位数中第一为代表花色: 1 代表方块, 2 代表红桃, 3 代表梅花, 4 代表黑桃。 01 代表 A ,02 代表 2,依次类推, 11 代表 J,12代表 Q,13 代表 K。具体的函数说明均在程序中标注,不再重复说明。程序执行结果为:1.2.3.结论:通过以上多次程序运行, 满足了多次结果不相同, 并保证每次都会有所有的排出现且仅出现一次。遇到的问题 :对一些代码的含义不太清楚,用起来不太熟练。解决方法是,通过学习书上的知识,了解代码含义,多训练慢慢熟练。附录运行程序为:

4、#include<stdio.h>#include<stdlib.h>#include<time.h>#include<string.h>/*/这是一个模仿五十K 的发牌游戏/定义一个结构体,然后定义一个该结构体的数组Card52( 大写的),存储扑克牌(这个存储的是字符串)/定义一个int类型的card52 (小写的),来表示扑克牌,比如105, 1代表花色(方块) ,05 代表面值5/再比如 313,就是梅花K , 401 就是黑桃A桃,方块,梅花,黑桃。将他们减去2 就代表百位的数值)(ASCII表中3,4,5,6分别表示红/再说一下排序,

5、就是设置一个标志位,标识牌的面值的大小3->0 , 4->1 , 5->2 ,., J->8 ,Q->9 , K->10 , A->11 , 2->12/然后就是card52 排序,再转换一下到结构体数组Card52 就行了./*/定义结构体 ,存储扑克牌struct pukepaichar CardColor;/ 存储花色char CardNumber2;/ 存储扑克牌的面值intflag;/ 判 断 标 志 , 如 果 按 照card52 排 序 , 那 么 牌 由 小 到 大 就是:A,2,3,4,5,6,7,8,9,10,J,Q,K/而我

6、们需要由小到大排序是:3,4,5,6,7,8,9,10,J,Q,K,A,2;struct pukepai Card52;/ 用 char 类型存储52 张扑克牌int card52;/ 用 int 类型形式/*/洗牌函数:将牌打乱void xipai()int i,j,k,temp;srand(time(0);for( i=0;i<4;i+)for(j=0;j<13;j+)cardi*13+j=(i+1)*100+j+1;/printf("how many times for card:");/scanf("%d",&count);/

7、for(j=1;j<=count;j+)/洗牌for(i=0;i<52;i+)k=rand()%(51-i+1)+i;temp=cardi;cardi=cardk;cardk=temp;printf("n");/*/转换函数: card52->Card52, 将牌的存储由int 类型转换为char 类型void zhuanhuan()int i,temp;/将数字转换为牌for(i=0;i<52;i+)Cardi.CardColor=cardi/100+2;temp=cardi%100;if(temp=1)Cardi.CardNumber0='

8、;A'Cardi.CardNumber1='0'continue;if(temp=10)Cardi.CardNumber0='1'Cardi.CardNumber1='0'continue;if(temp=11)Cardi.CardNumber0='J'Cardi.CardNumber1='0'continue;if(temp=12)Cardi.CardNumber0='Q'Cardi.CardNumber1='0'continue;if(temp=13)Cardi.Card

9、Number0='K'Cardi.CardNumber1='0'continue;Cardi.CardNumber0=temp+48;Cardi.CardNumber1='0'/设置标志位,用来判断牌的面值大小for(i=0;i<52;i+)Cardi.CardColor=cardi/100+2;temp=cardi%100;/一律将面值减3 作为标志位Cardi.flag=temp-3;/如果是A 或者是2,那么标志加上13if(temp=1|temp=2)Cardi.flag+=13;/*/排序:对 void paixu() char5

10、2 进行排序(不管花色,只看牌的面值)int i,j,k;struct pukepai temp;for(i=0;i<4;i+)for(j=0;j<13;j+)for(k=0;k<12;k+)/不管花色,只看牌的面值,所以要对 if(Cardi*13+k.flag>Cardi*13+k+1.flag) 100 求余,然后再比较temp=Cardi*13+k;Cardi*13+k=Cardi*13+k+1;Cardi*13+k+1=temp;/输出函数:输出四个玩家的扑克牌void output()int i;for(i=0;i<52;i+)if(i%13=0)printf(" 第 %d 个玩家的牌为 :",i/13+1);printf("%c%c%c",Cardi.CardColor,Cardi.CardNumber0,Cardi.CardNumber1);if(i%13=12)printf("n");printf("n");/验证函数:验证是否有重复的牌void yanzheng()int flag=0;int i,j;for(i=0;i<52;i+)for(j=0;j<52;j+)if(i!=j)/如果有重复的牌,那么就让flag=1if(cardi=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论