1、数据结构课程设计报告陕西科技大学电信学院数据结构课程设计报告名 称: C版扎金花 班 级: 姓 名: 学 号: 指导教师: 学年学期: 2011 2012 学年 第 一 学期 2011 年 12 月 29 日摘 要课程设计的题目是扎金花,扎金花是中国广泛流传的一种民间游戏,是一种既比胆略又比智慧的游戏,现实中不同心理因素之间的较量成为了该游戏的一大特色。这次C语言版的扎金花运用了数据结构中的线性链表、数组等算法思想,实现了用扑克牌休闲娱乐的方式。该程序模拟人的发牌过程,把牌发给三个玩家,同时依照规则比较出其大小,规则是:单对顺花同花顺豹子;同一类型则按大小比较 12next=NULL; for
2、(i=0;idata=data; s-color=col; s-next=p1-next;p1-next=s;s=p1; /生成新的结点,把新生成的元素存入到其中,同时把该结点链入到链表中 delete_(m,j,k);k-; return p;3.我所承担的发牌设计的函数实现过程 我和赵某某共同担任了这次设计中的发牌过程。我不会玩扎金花,不过,这并不会影响什么。 发牌设计: 1)每次游戏,必定是一副牌,去掉大小王,一共是52张牌。每张牌有两个必要元素,花色和数据。其中花色是四种:pade-黑桃 Club 梅花Diamond-方块Heart-红桃。数据分为十三种,并且2为最小,A为最大。从大到
3、小依次为:K、Q、J、10、9、8、7、6、5、4、3、2。为了表示方便,用数字代替处理并在需要时进行还原,其规则是这样的A-1,J-11,Q-12,K-13,其他的数字对应其本身。由于牌的两要素都不可少,所以我们决定采用结构体进行,其具体程序如下:(记为函数一)typedef struct pokery int data; int color; struct pokery *next; pokery,*poker; 2) 在发牌过程中,为了保证正游戏的公平性,必须要引用随机数 random,并且放入数组,其中,随机种子为当前时间,在头函数中表示为#include 。具体程序如下:(记为函数二
4、)void random(int results) int candilength; int i, n =length, r; srand(unsigned)time(0); for(i=0; ilength; +i) candii = i; for (i=0; inext=NULL; for(i=0;idata=data; s-color=col; s-next=p1-next;p1-next=s;s=p1; /生成新的结点,把新生成的元素存入到其中,同时把该结点链入到链表中 delete_(m,j,k);k-; /删除 return p; 4) 由于同一副牌中不可能有相同的出现,那么每派出
5、一张牌,数组里就会必须少这个元素,及删除该数,将数组放入单链表中,则链表的长度减少。具体程序如下:(记为函数四)void delete_(int a,int x,int n) /n为数组长度,x为元素下标 int j; for(j=x;jnext; while(pt) printf(%c ,pt-color); switch(pt-data) /A-14,J-11,Q-12,K-13,其他的数字对其本身 case 1 : printf(%c ,A);break; case 11: printf(%c ,J);break; case 12: printf(%c ,Q);break; case 1
6、3: printf(%c ,K);break; default: printf(%d ,pt-data); count+; if(count=3) printf(n); pt=pt-next; 至此,我们的子函数部分已经完成,并且多次程序检验是可操作的。 4 调试分析我们最初选择的是分4次进行,每一次在13个数中进行,可是后来发现第二次以后的过程可能选到与前面完全的元素。而且取到的元素会进入链表,这样后面的发牌过程就会出现完全相同的牌,从而酿成错误。因此想到假如每次取出该元素后,可以删除该元素,第二次以后就不会再选到。但是由于是13个元素分4次进行,想要达到这种效果会很困难。于是又想到有52张
7、牌,可以考虑随机选择1-52的随机数,是全部选出,但是由于随机过程中第二次以后的随机还是可能取到,就运用了两个数组,其中一个为空数组,另外一个数组存着1-52的数,随机取下标然后存入,同时把满数字的数组中取到的数字删去。循环完成随机取数的过程,最后把随机取到的数存到单链表中去。 其实这样的一个个程序看起来似乎把简单的问题复杂化了,或许我们可以假象为已经有了那么特定的五十二张牌,而发牌就是随机抓取,为此我试写一下函数:产生一副牌void makecard()int i;for(i=0;i52;i+)pokeri.color=3+i/13;pokeri.number=i%13+1;pokeri.u
8、se=0;抓取牌,从以上定义产生的一副牌中int getcard()int i,k=0; while(k=0)i=rand();i=i%52; if(pokeri.use=0)pokeri.use=1;k=1;return i;检验的这段程序是可以用的,不过我们和其他部分的已经商量好了写为数组和链表形式,我们随意代替一定会导致三个部分难以连接,因此最后决定用原计划较复杂的程序。5 测试结果说明输入的数据,看到的结果。(结果用截图展示!)6 课设总结 这是我第一次相信自己,因为在学C语言时,李老师说学完C语言就可以变出类似扫雷的小游戏,我一直很怀疑,觉得无从下手。可是,现在,扎金花游戏真在我的手
9、底下诞生,尽管我不能完成所有,但是却大大的树立了我的信心,让我觉得每天看着一堆字母并不是那么无聊,我们也可以乐在其中。 这次的程序设计是以小组的形式完成的,大家都很认真,分工明确,但也不能完全独立,否则编出的程序会无法连接,其实这并不只是一场知识的考验,更是一种团结的考验。每个人的能力都是不一样的,性格也不是一样的,这样的层次不齐突然聚在一起完成一个任务,需要的不仅仅是每个人贡献出自己的才智,还有互相帮助,互相尊重的品德。一个再有能力的人也永远比不上一队结的人。在此,我不得不谢谢赵伟娟和王世信在这次设计中给予的帮助和指导。 也是通过这次课程设计,我知道了自己与他人的差距,不得不否认,我学得还不
10、够好,思维还不够严谨,但是,我会在将来的学习中好好的磨练自己,我想人与人之间的差距比不过不是永恒的,但是想要缩小它,必须付出比平时更多的时间和精力。其实课程设计并不只是教会我们一些编程吧,我们需要学习的是一种思维,一种简化问题的方法,课程设计正是在教我们如何通过机器语言表达我们的思想,只有这样,我们才能解决尽在眼前的问题。7 参考文献1 严蔚敏 数据结构(C语言版) 北京:清华大学出版社 197.4.12 谭浩强 C语言程序设计(第四版)北京:清华大学出版社 2010年6月第四版3 Nicholas A.Scolter ,Scott J.Kleper C+高级编程 机械工业出版社 2006年1月第一版中文印刷4 杨晓光 数据结构实例教程 北京:清华大学出版社 北京交通大学出版社 2008年12月5陈锐等 零基础学数据结构 北京:机械工业出版社 2010年1月
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1