



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+课程设计实验报告 1、 程序名称:扑克牌游戏2、 程序设计功能:创建一副扑克牌,并完成洗牌等相关操作。3、 程序设计要求:(1) 增加大小王。(2) 删去一张指定的牌后,余牌显示。(3) 创建一副扑克,显示一副扑克牌,洗牌,一次分发给四个人并显示。程序设计过程中根据设计思想添加功能:(1) 根据洗牌参数,添加入可以让玩牌者控制洗牌次数的功能。(2) 在可以完成每人删除一张牌的功能基础上,增加可以删除一轮牌(也就是同时每人删除一张牌)的功能。4、 对题目的分析与注释总体分析:根据题目的设计要求,增加满足要求所需要的函数,实现相应功能,通过合理安排调用过程,实现题目要求的功能。注释:(已在程序设计过程中指出)5、 增加功能的设计思路(1) 增加大小王 实现函数:Deck:MakeDeck() PlayingCard:CardMake()Deck:MakeDeck()将参数nLastDelt由51增加到53,生成一副扑克牌的54张牌(054),实际上是多分配了两张大小王的空间,控制参数nLastDelt的变化,再通过调用函数PlayingCard:CardMake()将参数传递给nNum,为每张牌(包括大小王)赋予正确的面值和花色,由此生成一副完整的牌。其中对大小王的赋值是添加的功能,具体实现过程如下:void PlayingCard:CardMake(int nNum)/跟据nNum生成一张扑克牌,nNum不同,生成的面值花色int i = 0;char j;if(nNum=53) /生成大王strcpy(achFace, B);chSuit=2;nValue=15;if(nNum=52) /生成小王strcpy(achFace, S);chSuit=1;nValue=14;由此段程序可知,参数nLastDelt是由大到小变化的,所以54张牌中首先生成大小王,至于其他牌的生成,是课本源程序上自带的,牌的花色由相应的ASCII码来赋值。(2)删去一张指定的牌后,余牌显示。 实现函数: Deck:DelOne()PlayingCard:ShowCard() Deck:Delete() 通过switch语句满足case的条件后,开始进行删除一张牌(调用函数Deck:DelOne()),系统会询问要删除第几个人的第几张牌,在这里考虑到用户可能会误输入大于人数或大于个人牌数的错误数字,因此设计了如果参数不符合要求就返回选择菜单这一步。之后调用Delete()函数将牌删除。Delete()函数为新增函数,具体如下:void Deck:Delete(int m,int n) /删除一张,n指删除排的位置(第几张牌 ) for(int i=n;i13;i+) cardmi=cardmi+1; cardm13=PlayingCard(); /将删除的后面的牌依次向前移,并为最后一张赋空,虽然最后一张赋空但其空间仍存在,因此运行时会显示问号。将牌删除以后,调用ShowCard()显示删除的那张牌,并显示剩余的那张牌以及未删除的人的所有牌。(2) 创建一副扑克,显示一副扑克牌,洗牌,一次分发给四个人并显示。实现函数:DeckMakeDriver() Deck:MakeDeck() PlayingCard:CardMake() Deck:ShowDeck() Deck:DeckShuff() Deck:SendDeck() PlayingCard:ShowCard()主函数中直接调用函数DeckMakeDriver()来实现,其中发牌函数SendDeck()为新增函数,具体实现过程如下:void Deck:SendDeck() /为四个玩家分牌并显示 int m=0,n=0,p=0,q=0;for(int i=0;i54;i+) switch(i%4) case 0: card0m=m_cardarrayi;m+;break; case 1: card1n=m_cardarrayi;n+;break; case 2: card2p=m_cardarrayi;p+;break; case 3: card3q=m_cardarrayi;q+;break;for(int a=0;a2;a+)coutendl;cout 第a+1个人的牌为:;for(int j=0;j14;j+)cardaj.ShowCard() ;coutendl;for(int b=2;b4;b+)coutendl;cout第b+1个人的牌为:;for(int k=0;k13;k+)cardbk.ShowCard() ;coutendl;CenterText(按enter键进行删牌部分.);此发牌方法为,第一张牌给第一个人,第二只张给第二个人第五张再给第一个人,如此循环(运用switch语句实现),而因为有五十四张牌,所以第一第二个人有十四张牌,另外两个人有十三张,因此分两种情况分牌。再者,在显示一副扑克牌时,将每行设置为显示四张牌,这样,第一竖行就是第一个人的牌,以此类推,方便查找编程错误。另外,添加了洗牌次数的功能,课本的源程序规定了只能洗250次牌,经过修改以后,将times改为一个可变参数,这样,由用户自己来决定要怎样洗牌,洗几次牌,这样的话,增加了洗牌的均匀性。可变性更高了。(3) 删除一张牌与删除一轮牌实现函数:DeckMakeDriver() Deck:DelRound() Deck:DelOne()DeckMakeDriver()函数提供了选择菜单,即删除一张牌or删除一轮牌,删除一张牌上面已经提到过,以下为删除一轮牌:void Deck:DelRound() /删除指定一轮牌并显示余牌if(checkdel() cout请分别输入要删除的四个玩家的牌:endl;for(int i=0;i4;i+) int j;cout请输入删除玩家i+1j;if(j14)cout此人不存在;break;cout将要删除的牌为:;cardij-1.ShowCard() ;Delete(i,j-1);coutendlendlendl;coutendlendlendl; for(int i=0;i2;i+) /显示余牌coutendl;cout 第i+1个人的牌为: ;for(int j=0;j13;j+)cardij.ShowCard() ;coutendl; for(int a=2;a4;a+) /显示余牌coutendl;cout 第a+1个人的牌为: ;for(int b=0;b12;b+)cardab.ShowCard() ;coutendl;同删除一张牌类似,删除一轮牌也设置了如果用户输入错误信息所采用的处理办法。及重新返回选择菜单。也同样是因为前两人与后两人的牌数不一样,分成了两个for语句来区分及实现。在完成所有功能之后,可以通过提示操作来退出扑克牌游戏。6、 设计中遇到的主要问题及解决方法(1)、大小王的花色 开始的时候,大小王的花色总是显示1和2,而其他同学则是显示相应的黑白两个笑脸。解决办法:经过询问和查阅资料,发现解决方法竟然只需要将1和2改为1和2即可,因为花色都是用ASCII来表示的,用字符形式自然不对。(2)、问题:每次分牌都是四个人全部是每人十二张解决办法:空间不足,将第一第二个人的牌数调整为十四张,即(int j=0;j14;j+),而第三四个人仍为(int j=0;j13;j+),这就就将问题解决了。(3)、 源程序中的删除一张牌的操作是任意删除一张,课程设计要求删除指定张,并输出显示剩余的牌,怎样输入并执行该操作?解决办法:首先用Check函数检查是否有玩家的牌被删除完。显示提示语 “cout输入要删除第几个人的牌: endl;”,用户输入数据;再提示“cout输入要删除第几张牌: endl;”,用户再输入数据。用ShowCard函数、Change函数处理,然后用for语句显示剩余的牌。(4)、课程设计要求,洗牌并分牌之后,删除牌和显示牌的操作都要在新生成的牌中进行,怎样进行该操作?解决办法:将洗好的牌分给玩家是用一个二维数组PlayingCard card413;装四个玩家的牌,在操作时直接对二维数组进行操作。7、 设计中尚存的不足删除牌后,最后一张的地方总是会显示一个问号。8、 程序设计过程的心得体会通过本次C+程序设计,虽然各种错误总是层出不穷,可是解决问题的过程真的就是一个不断学习、不断进步的过程。经过上学期对C+的初步学习,了解到了关于计算机编程方面的一些初步知识,一个细微的地方便会导致一大堆的错误,不管是一个英文大小写,还是一个分号没有加,又或者是中英文的标点符号,总之,C+的编程,除了掌握扎实全面的专业知识外,最最重要的就是两个字,细心了。从一开始的一步步将课本上的源程序及原始注释敲进电脑,到后来却哑然发现课本管盘中本来就有源程序,到最后慢慢发现问题,然后一个一个的解决,再到后来,能利用自己的知识为程序添加新的功能,我感觉得到自己真的学到了很多。很多程序部分自己读不懂,就一遍一遍的问同学,去图书馆查资料。好像困难越大自己就越有斗志和欲望一定将困难解决,内心就一直有一个信念,不管付出多大的精力,我一定会将问题解决。一开始的时候,走了很弯路,本来想按课本上
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绿色环保材料在农村公路养护中的应用
- 增强历史学习中的情感体验与价值观引导
- 文化新质生产力对未来社会的深远影响
- 苹果产业的科技创新与转型升级挑战
- 跨学科融合推动地方高校英语专业创新创业教育的实践模式
- 环保理念在工程项目设计中的体现与实施路径
- 现代农业智造产业园项目建议书
- 污水处理厂中水回用工程商业计划书
- 土地平整与基础施工技术
- 2025年度换热器环保技术改造项目合同
- 职业培训学校宣传课件
- 餐饮食堂食品安全法培训
- 2025建筑工程土石方挖掘与运输合同范本
- 2025年智慧农业技术考试试卷及答案
- 网约车考试题库及答案
- 慢阻肺健康宣教
- 小学一年级升二年级暑假数学作业-应用题(178题)(附答案)
- 各项记录填写培训
- 辅音音素教学课件
- 工会维权活动方案
- 2024版辅警劳动合同
评论
0/150
提交评论