ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:207.70KB ,
资源ID:12176624      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12176624.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++程序课程设计报告21点游戏.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C++程序课程设计报告21点游戏.docx

1、C+程序课程设计报告21点游戏随机数,枚举类型?C+面向对象程序设计课程设计报告设计题目: 21点游戏 学生学号: 学生姓名: 专业班级: 学生成绩: 指导教师: 医药信息工程学院图像处理与多媒体教研室2011-一、 设计任务分析1、21点游戏介绍21点游戏是一个古老的扑克游戏,游戏的规则是:各个 参与者设法使自己的牌达到总分21而不超过这个数值。扑克牌的分值取它们的面值,A充当1或者11分,J,Q和K人头牌都是10分。庄家VS17个玩家。在开局时,包括庄家在内的所有参与者都有两张牌。玩家可以看到他们的所有牌以及总分,而庄家有一张牌暂时是隐藏的。接下来,只要愿意,各个玩家都有机会依次再拿一张牌

2、。如果是玩家的总分超过了21(称为引爆),那么这个玩家就输了。在所有玩家都拿了额外的牌后,庄家将显示隐藏的牌。只要庄家的总分等于或小于16,那么他就必须再拿牌。如果庄家引爆了,那么还没有引爆的所有玩家都将获胜,引爆的玩家打成平局。否则,将余下的各玩家的总分与庄家的总分做比较,如果玩家的总分大于庄家的总分,则玩家获胜。如果二者的总分相同,则玩家与庄家打成平局中。2、实现以下功能: 1) 洗牌; 2) 发牌; 3) 隐藏或显示牌; 4) 计算总分; 5) 判断胜负。 二、 21点游戏流程三、 主要数据结构扑克版结构体:typedef enum /扑克牌面值:ACE(A),TWO(2)TEN(10)

3、,JACK(J),QUEEN(Q),KING(K) ACE=1,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KINGRankType;typedef enum /扑克牌花色:CLUBS(梅花),DIAMONDS(方块),HEARTS(红桃)和SPADES(黑桃) CLUBS,DIAMONDS,HEARTS,SPADESSuitType;struct Card/扑克牌结构体 RankType rank; /扑克牌面值 SuitType suit; /扑克牌花色;四、 21点游戏类设计GameOf21Point类属性成员变量名数据

4、类型意 义DeckCard一副扑克牌dealPoseint发牌位置Namechar玩家改姓名方法成员函数名属 性函数功能Shuffle()private洗牌GetTotalScore()private返回总分值ShowStatus()private显示当前状态DealOneCard()private发牌Game()public运行游戏五、 源代码#ifndef _CARD_H_#define _CARD_H_#include/#includeusing namespace std;typedef enum /扑克牌面值:ACE(A),TWO(2)TEN(10),JACK(J),QUEEN(Q)

5、,KING(K) ACE=1,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KINGRankType;typedef enum /扑克牌花色:CLUBS(梅花),DIAMONDS(方块),HEARTS(红桃)和SPADES(黑桃) CLUBS,DIAMONDS,HEARTS,SPADESSuitType;struct Card/扑克牌结构体 RankType rank; /扑克牌面值 SuitType suit; /扑克牌花色;ostream &operator(ostream &outStream,const Card &ca

6、rd)/操作结果:重载运算符 /输出花色 if(card.suit=CLUBS) outStream梅花; /CLUBS表示梅花 else if(card.suit=DIAMONDS) outStream方块; /DIAMONDS表示方块 else if(card.suit=HEARTS) outStream 红桃; /HEARTS表示红桃 else if(card.suit=SPADES) outStream黑桃; /SPADES表示黑桃 /输出面值 if (card.rank=ACE) outStreamA; /ACE表示A else if(card.rank=JACK) outStrea

7、mJ; /JACK表示J else if(card.rank=QUEEN) outStreamQ; /JACK表示Q else if(card.rank=KING) outStreamK; /JACK表示K else cout(int)card.rank; return outStream;#endif#ifndef _GAME_OF_21_POINT_H_ #define _GAME_OF_21_POINT_H_#includecard.h /扑克牌#include#define LEN_OF_MAX_NAME 21 /最大姓名长度using namespace std;/21点游戏类Gam

8、eOf21Point声明class GameOf21Point private: Card deck52; /一副扑克牌 int dealPos; /发牌位置 Card hands821; /hand0保存庄家的牌,hand17保存各玩家的牌 int numOfCard8; /庄家(numOfCard0)及玩家numOfCard17的牌数 char name8LEN_OF_MAX_NAME; /庄家及玩家姓名 int numOfPlayer; void Shuffle(); /洗牌 int GetTotalScore(Card hand21,int n); /返回一手牌的总分值 void Sh

9、owStatus(int num,bool hideFirstCardAndTotalScore=false); /显示庄家(对应num=0)或玩家(对应num0)的当前状态 Card DealOneCard()return deckdealPos+; /发一张扑克牌 public: /方法声明 GameOf21Point(); /无参构造函数 virtual GameOf21Point(); void Game(); ;/初始化扑克牌,发牌位置,庄家与各玩家手中的扑克牌数GameOf21Point:GameOf21Point() int curPos=0; /当前扑克牌位置 for(int

10、suitPos=0;suitPos4;suitPos+) /花色 for(int rankPos=1;rankPos=13;rankPos+) /面值 deckcurPos.suit=(SuitType)suitPos; /花色 deckcurPos.rank=(RankType)rankPos; /面值 curPos+; coutnumOfPlayer; while (numOfPlayer7) /限制人数在17之间 coutnumOfPlayer; dealPos=0; /发牌位置 int i=0; /临时变量 /庄家numOfCard0及玩家numOfCard17手中的扑克牌张数 for

11、(i=0;i=numOfPlayer;i+) numOfCardi=0; strcpy(name0,庄家); /玩家姓名 for(i=1;i=numOfPlayer;i+) cout输入第inamei; cout游戏开始0;curPos-) int pos=rand()%(curPos+1); /产生0curPos之间的随机数 Card temp; /定义一个临时变量用于交换牌 temp=deckpos; deckpos=deckcurPos; deckcurPos=temp; int GameOf21Point:GetTotalScore(Card hand21,int n) int pos

12、; int totalScore=0; for(pos=0;posTEN)totalScore+=10; /J,Q,K的分值为10 else totalScore+=(int)handpos.rank; /TWOTEN分值为210 /分值大于21时,将A的分值改为1 for(pos=0;totalScore21&pos0,显示第num个玩家的当前状态,当/hideFirstCardAndTotalScore为真时,将隐藏首张扑克牌与总分,否则将显示首/张牌与总分 /*coutnamenum:; /显示庄家或玩家姓名 /隐藏庄家首张牌 if(hideFirstCardAndTotalScore)

13、cout; else couthandsnum0; /显示庄家的首张牌 for(int i=1;inumOfCardnum;i+) couthandsnumi; if(!hideFirstCardAndTotalScore) cout总分值GetTotalScore(handsnum,numOfCardnum); cout21) coutnamenum引爆!endl; /*不使用输出符重载时的代码*/ coutnamenum:; /显示庄家或玩家姓名 /根据庄家的状态隐藏或显示庄家首张牌的花色 if(hideFirstCardAndTotalScore)cout;/隐藏首张牌 else if(

14、handsnum0.suit=CLUBS) cout梅花; /CLUBS表示梅花 else if(handsnum0.suit=DIAMONDS) cout方块; /DIAMONDS表示方块 else if(handsnum0.suit=HEARTS) cout 红桃; /HEARTS表示红桃 else if(handsnum0.suit=SPADES) cout黑桃; /SPADES表示黑桃 /输出庄家首张牌的面值 if(hideFirstCardAndTotalScore)cout; else if(handsnum0.rank=ACE) coutA; /ACE表示A else if(ha

15、ndsnum0.rank=JACK) coutJ; /JACK表示J else if(handsnum0.rank=QUEEN) coutQ; /JACK表示Q else if(handsnum0.rank=KING) coutK; /JACK表示K else cout(int)handsnum0.rank; for(int i=1;inumOfCardnum;i+) if(handsnumi.suit=CLUBS) cout梅花; /CLUBS表示梅花 else if(handsnumi.suit=DIAMONDS) cout方块; /DIAMONDS表示方块 else if(handsnu

16、mi.suit=HEARTS) cout 红桃; /HEARTS表示红桃 else if(handsnumi.suit=SPADES) cout黑桃; /SPADES表示黑桃 /输出面值 if (handsnumi.rank=ACE) coutA; /ACE表示A else if(handsnumi.rank=JACK) coutJ; /JACK表示J else if(handsnumi.rank=QUEEN) coutQ; /JACK表示Q else if(handsnumi.rank=KING) coutK; /JACK表示K else cout(int)handsnumi.rank; i

17、f(!hideFirstCardAndTotalScore) cout总分值GetTotalScore(handsnum,numOfCardnum); cout21) coutnamenum引爆!endl; void GameOf21Point:Game() Shuffle(); /洗牌 int i,j; /为庄家发两张牌 for(i=0;i2;i+) hands0numOfCard0+=DealOneCard(); ShowStatus(0,true); /显示庄家状态,隐藏首张牌与总分 /向各玩家发牌并显示 for(i=1;i=numOfPlayer;i+) for(j=0;j2;j+)

18、handsinumOfCardi+=DealOneCard(); ShowStatus(i); coutendl; /依次向各玩家发额外的牌 for(i=1;i=numOfPlayer;i+) char Ans; coutnameiAns; /玩家选择再要一张牌,如果玩家没有引爆则继续发牌 /switch(Ans) / while(Ans!=y & Ans!=n) cout你的输入不正确,请重新输入。endl; coutnameiAns; while (GetTotalScore(handsi,numOfCardi)21) break; coutnameiAns; / ShowStatus(0

19、); /显示庄家 /庄家总分小于等于16,必须再拿牌 while(GetTotalScore(hands0,numOfCard0)=16) hands0numOfCard0+=DealOneCard(); /为庄家发1张牌 ShowStatus(0); /显示庄家 cout21) for(i=1;i=numOfPlayer;i+) /依次查看每位玩家 if(GetTotalScore(handsi,numOfCardi)=21) coutnamei,恭喜你,你赢了!endl;/玩家没有引爆 else coutnamei,唉,你打平局了!endl;/玩家引爆 else /庄家没有引爆,依次查看每

20、位玩家 for(i=1;i=numOfPlayer;i+) /总分比庄家大 if(GetTotalScore(handsi,numOfCardi)GetTotalScore(hands0,numOfCard0) /玩家未引爆,且总分比庄家大,玩家赢 coutnamei,恭喜你,你赢了!endl; else if(GetTotalScore(handsi,numOfCardi)=GetTotalScore(hands0,numOfCard0) /玩家总分与庄家相等,平局 coutnamei,唉,你打平局了!endl; else /玩家引爆或总分比庄家小,玩家输 coutnamei,对不起,你输了

21、!endl; #endif#includegame_of_21_point.hint main() char AgainGame; do GameOf21Point objGame; /生成21点游戏对象 objGame.Game(); coutendlAgainGame; while(AgainGame=y); return 0;六、 测试情况七、 八、 小结课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说

22、掌握程序开发技术是十分重要的,而C+语言又是最常见,功能最强大的一种高级语言,因此做好C+语言课程设计是十分必要的。通过几天的课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次真真的做程序设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。我做的

23、课程设计,虽然是很简单的一个小的程序,但对我来说却是一个很大的困难。更加是第一次做课程设计,所以在机房做了一个下午却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经过几天的努力,终于把程序完成了,尽管程序还是有很多功能上的欠缺和漏洞,可我还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C+语言的一次实践作业,自己进步的证明。在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!九、 参考文献C程序设计教程 谭浩强 著 清华大学出版社C+面向对象程序设计 陈维兴 林小茶 编著 中国铁道出版社

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1