版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、猜数游戏C+课程设计报告(2012 2013年度第 二 学期)猜数游戏专 业计算机科学与技术学生姓名班 级学 号2013年7月7日指导教师王榕完成日期目 录目 录21概述11.1课程设计目的11.2课程设计内容12系统总体设计12. 1系统冃标12.2主体功能22.3系统流程32.4开发环境53系统详细设计53. 1系统主界面设计53.2提示键H、K的模块设计63. 3统计分数模块设计84测试94.1测试方案94.2测试结果105小结11参考文献13附录14附录1源程序清单14C+课程设计报告(2013)猜数游戏的设计与实现1概 述1.1课程设计目的R巩固并加深学生对C+语言程序设计知识的理解
2、;b)培养学生而向对象的程序设计思想,使学生认识而向过程和而向对象两种设 计方法的区别;c)进一步掌握和应用VC+ 6. 0集成开发环境;d)提高运用C+语言解决实际问题的能力;e)初步掌握开发小型实用软件的基本方法,能独立设计、实现具有实际功能的 小系统;f)掌握书写程序设计开发文档的能力(书写课程设计实验报告)1.2课程设计内容课程名称:猜数游戏说明:用户从键盘输入4位不重复的数,来匹配计算机给出的4位随机数,若 数字和位置均等同,表示用户贏了。每猜一次,计算机均给出提示信息(x, y), x 表示数字、位置都匹配的个数,y表示数字匹配但位置不匹配的个数。要求:a)设计友好的中文用户交互界
3、面。b)按H键,可得到更详细的帮助信息。c)按K键后,可以査看计算机所给的4位数,但査看前需要输入密码,密码 自定。d)猜的结果以分值的形式给出,每猜错1次扣100分,若猜对1个数,奖励 20分。e)每次游戏结束后将分值存盘,文件名自定。2系统总体设计2.1系统目标该题目是一个通过自己的推断猜数字小游戏。编写该程序要完成实现系统自定 义四位不同数字、输入四位不同数字、判断输入的四位不同数字的对错悄况的功能 以及玩游戏旳的提示功能、管理功能和与退出功能。这次课设是要求用C+编写程序,实现数字之间的相互比较,让玩家找出电脑 猜数游戏写的四位数字,而玩家在找出四位数字中,电脑需要给出玩家一些提示信息
4、,用以 帮助玩家找出答案。对于猜位数不等的四位数,电脑需要在程序刚运行时,确定一 个随机的四位数,且各个位数不相等。而在玩家输入数字时,也需要检验玩家输入 的数字是否满足条件,即一个各个位数不重复的四位数。只有玩家输入正确的数字 后,电脑才能进行比较数字的运算,如果玩家输入的数字和电脑的不相等,输出提 示信息,并应从新读取玩家的数字进行判断,直到玩家放弃猜数字或数字猜对为止。当玩家在玩游戏时每输入一次四位不同数字电脑都会给出位置数字对错的的 信息,并对此算出所得分数(每猜错1次扣100分,若猜对1个数,奖励20分。)。但玩家经过多次猜测还没猜出答案可以使用提示的功能即比较详细的叙述玩家 所猜的
5、数字的数字和位置的对错情况。当玩家想知道电脑给出的数字时可以使用管 理功能输入正确的密码可以知道电脑所给的正确答案。当玩家不想玩此游戏可是使 用退岀键并且在退出时电脑会给玩家正确的答案。2.2主体功能该游戏的主体功能主要有以下几个重要的模块:电脑实现自定义模块、电脑对 玩家所猜数字进行处理的模块、电脑处理玩家游戏排名模块以及电脑处理玩家退出 游戏的模块。其屮电脑自定义模块在玩家开始玩游戏时电脑事先确定好四位不同数字作为 正确数字供玩家猜测;对玩家数字所猜测的数字处理模块主要就是把玩家所猜测的 数字与正确答案做个比较然后反馈给玩家;玩家排名模块就是把各个玩家玩的游戏 统计所得分数并且做出比较排列
6、出前三名;退出模块主要是玩家想放弃游戏时做游 戏作出处理并与此同时告诉玩家答案。该游戏的各个模块功能如下图所示:#C+课程设计报告(2013)猜数游戏退出游戏显示玩家前三名排行玩家猜测的四位不同数字电脑自定义一组四位不同数游戏的提示游戏对错程度判断3图2-1系统功能模块图2.3系统流程如下图所示我画的总体流程图想要展现的是,开始玩家进入游戏电脑自定义一 组四位不同数字供玩家猜测,接着开始游戏玩家输入四位不同数字电脑会对这组数 字与正确答案做出比较并告知玩家,接着玩家可有两种选择一是是否继续猜数,二 是是否需要提示。其中如果需要提示通过使用快捷键电脑会给玩家详细的错误提 醒。如果继续游戏那么回到
7、开始输入四位不同数字阶段,但是如果玩家想退出游戏 可以使用快捷键退出游戏。在玩游戏的过程玩家每猜一次电脑都会给玩家所得分数C+课程设计报告(2013)11图22系统流程图2.4开发环境该程序是在windows系统下的C+语言开发和应用VC+ 6. 0集成开发环境。3系统详细设计3.1系统主界面设计该界面淸晰易懂,主要包括游戏的前三名、游戏的汉字提醒以及键盘输入提醒。 游戏名次排序可以展现玩家玩此游戏的熟练程度以及玩此游戏能力,说已设立了游 戏的名次排序可以激发游戏者竞争意识。游戏界面的提醒部分可以使游戏者熟练的 玩此游戏,以及游戏的功能。主要代码有:coutvv”输入您所猜测的4位不同的数字(
8、输入9999退出,输入H帮助,输入K 管理):"«endl;coulvv”* *游戏金榜*”vvendl;cout«"* 第 1 名"«mark 1 «endl«" * * 第 2 名"vv mark2vvendlvv"* 第 3 名 n«mark3«endl;其主要界面如下:cf *C:Progra> FilesMicrosoft Visual StudioMyProjectsvxhDebugvxh. exe* *药名960"第2名960X第3名9
9、2P惰入您所猜测的4位不同的数字输入9999退岀,输入H帮助,输入K管理:图3-1主界而设计图3.2提示键H、K的模块设计玩家在玩游戏时通过Ik K键完成游戏的帮助和管理。当玩家想放弃玩游戏想 知道正确答案时可以使用K键,但是因为屈于管理者的捷径所以要输入密码。当密 码输入错误时界而会提示输入错误玩家会再次进入游戏状态。但玩家玩游戏时觉得 比较难不好猜测可以使用H键,电脑会给出详细的提示(例如:玩家要猜测的数字 4369可是玩家猜测是3568这时使用H键电脑会给出提示“您的第一位数字猜对, 但位置不对;您的第三位数字猜对,位置猜对”)其详细的流程图如下:3. 3统计分数模块设计玩家在玩游戏输入
10、四位不同数字之后电脑系统会为玩家做一次分数统计。游戏 开始时电脑给玩家自定义分数为1000分,当玩家开始猜数的游戏时没猜错一次扣 100分,若猜对一个数,奖励20分。(例如:玩家要猜数9852,但玩家输入1234 时玩家得分为960分当玩家再次输入数字1235时玩家得分为920分)其流程图如下所示:图3-3统计流程图4测试4.1测试方案测试方案一:测试执行时岀现重复的情况c: *C:Prograw FilesMicrosoft Visual StudioMyProjectsvxhDebucvxh. exe* ”肾棉x x*棉戏金 养棉棉帕忖卜更1名960卄車2玄960* 第 3920輸入您所猜
11、测的4位不同的数字输入9999退岀,输入H帮助.输入K管理:1234您有0位数字位置匹配.2位数字数字匹配.2位数字不对您的待分是ybu騎入迦侨猜测的4位不同的数字输入9999退岀,输入H帮助.输入X管理头1122斤猜测的4位鵜的駅罩备几;9;昙捫爲M帮助.输入K管理:臍煤的换入,莆重範鹼入需要输入4位不同的数字】图4-1错误输入数字执行图 测试方案二:测试在需要帮助时键盘输h及II的情况cf *C:Progra> FilesMicrosoft Visual StudioMyProjectsvxhDebucvxh. exe*名 960*$2960卄第3名92B输入您所猜测的4位不同的数字
12、输入9999退岀.输入H帮助,输入K管理: 1234您頁日位数字位置匹配.2位数字数字匹配.2位数字不对您斷得分是960输入遞所猜测的4位不同的数字输入9999退岀,输入H帮助,输入X管理: 1122厭專幕络譎聚霜癇睪聆鶴龍駕九帮助,输入K管理:1245您有葩数字位置匹配.2位数字数字匹配.2位数字不对您的彳旱分是920输入恳所貓测的4位不同的数字输入9999退出,输入H帮助,输入X管理” 您頁葩数字位置匹配.2位数字数字匹配.2位数字不对您的得分是880喩入尿听刚弊14位不同的数字車入9999退岀.输入H帮助,输入X管理庆 工蓬2蟻宇猜对,但位囂不对您的竟4位数丰猜菇,但位曹不才输入您所猜测
13、的4位不同的薮字输入9999退岀.输入H帮助,输入X管理:图4-2在键盘输入小写字母错误时执行情况4. 2测试结果测试结果一:但玩家想知道游戏答案时可以输入大写字母K并输入密码得以实 现MC:ProgrFilesMicrosoftVisual StudioMyProject svxhDebucvxh. exe*名 960*第2名960*第3名960输入您所猜测的4位不同的数字输入9999退岀,输入H帮助,输入K管理:1234鬲叫割字位置匹配”位数字数字匹配,3位数字不对歆11隸貓4位不同的数字输入9999退岀,输入H帮助,输入X管理:H您的笫1位数千猜对但位囂不強输入您所猜测的4位不同的薮字捡
14、入9999退岀,输入H帮助,输入K管理决K请输入密码:1234正确的数字为961?输吴您所猜测的4位不同的数字输入999V退岀,输入H帮助,输入K管理:图4-3玩家进行悖理状态执行情况测试结果二:玩家如果想结束游戏输入9999来实现图4-4玩家终止游戏的情况测试结果三:玩家想知道游戏答案是密码输入密码错误。图4-5玩家执行公布游戏答案密码错误的情况5小结这周的课程设计就要结束了。从最开始的做题到现在的报告总结我完成一个 过程。在这个过程里我领悟了很多。在最开始的做实验报告时感觉挺难的之前根本就没有写过关于游戏的实验报 告,不过还好我以前没事的时候玩过这游戏,所以比较了解这个游戏各个部分。 虽然
15、在中间写的过程中还有很多不会的东四,但是通过査看书本和资料还有问同 学和老师,基本上都解决了。其中有一部分的程序无法满足题目的要求 在老师的 帮助下最后得到了解决,通过这件事我感觉自己还有还有很多不足,仍然有一些 有待提高的地方。我觉得课程设计的作用一方面是最基本的就是要完成这一科目,差不多也是 对自己的一个阶段性的总结:还有就是在整个设计的过程屮,让我们认真的独立 思考,在和同学交流的过程中也增强了我们的语言组织能力和彼此之间的友谊。 通过课程设计让我们不断的发现自己的不足从而去改善,这是一种学习的态度, 不仅仅是在这次的课程设计中,在以后的无论生活还是学习方面都应该注意和努 力改善。通过这
16、次比较完整的一个程序的设计,我摆脱了单纯的理论知识学习状 态,和实际设计的结合锻炼了我的综合运用所学的基础知识,解决实际问题的能 力,同时也提高我査阅文献资料、对程序整体的把握等其他能力水平,而且通过 对整体的掌控,对局部的取舍,以及对细节的斟阐处理,都使我的能力得到了锻 炼,经验得到了丰富。这是我们都希望看到的也正是我们进行课程设计的目的所 在。虽然设计内容繁多,过程繁琐但我的收获却更加丰富。各种组件的运用,各 种算法的应用,各种控件的利用我都是随着设计的不断深入而不断熟悉并逐步掌 握的。和老师以及同学的沟通交流更使我对程序整体的规划与设计有了新的认识 也对自己提出了新的要求。提高是有限的但
17、提高也是全面的,正是这一次设计让 我积累了许多实际经验,也必然会让我在未来的工作学习屮表现出更高的应变能 力和理解力。C+课程设计报吿(2013)参考文献1 谭浩强.C+程序设计(第二版)M北京:清华大学出版社,2012.2 谭浩强C卄程序设计题解与上机指导(第二版)M.北京:清华大学出版社,2012.13C+课程设计报告(2013)附录1源程序清单include <iostream>#include <cstdlib>#include <ctime>#include <fstream>#include <cstdlib>using
18、namespace std;int xl,x2,x3,x4;int yl,y2,y3,y4;定义全局变倉来记录玩家猜数的悄况void FetchHisGuess(int&,int&,int&,int&);void CompNumbeint&Jnt&Jn圾nt&);bool EndCintJntjntJnt);bool HelpCintjntJntjntJnt&Jn圾nt&nt&,int&n圾肿bool Manage(int/nlinlint/nlinlinlint);void TextX(intjntJnt
19、JntJntJntJnt/int/int&zint&/int&/int&);void TextY(int/intrint,int,int,intfint,int/int&,int&,int&rint&);bool Begin(intntnt);void rank();void ReadMark();输出保存得分的前三名int nCount=1000;static int markl=0/mark2=0/mark3=0;int main()ReadMark();int IHisAJHisBJHisCJHisD;用户输入值int iC
20、omAjComBJComCJComD;bool bDone二false;bool bEnd=false;int iGuessCounter=l;while (bEnd=false)iHisA=O/iHisB=O/iHisC=O/iHisD=O;iComA=0/iComB=0/iComC=0/iComD=0;xl=0/x2=0/x3=0/x4=0;yl=0"2=0,y3=0"4=0;bDon e 二 false;in t iGuessC oun t=l;CompNumberCiComAJComBJComCJComD);while(bDone=false)nCount-=40;
21、FetchHisGuess(iHisAJHisBJHisCJHisD);nCount+=(xl+x2+x3+x4)*20;毎猜对 1 个数的位置加 20bEnd=End(iHisA/iHisB/iHisC/iHisD);if(Help(iHisA,iHisB,iHisC,iHisD,xbx2,x3,x4,yl"2"3,y4)=true)contin ue;if(Manage(iHisA/iHisB/iHisC/iHisD/iComA/iComB/iComC/iComD)=true)contin ue;xl=0zx2=0zx3=0zx4=0;yl=0,y2=0"3=
22、0,y4=0;fextY(iHisAHisBHisCHisDComACornB,iComC,iComD“l“2“3"4);TextXQHisA/HisB/HisQiHisD/ComA/ComB/ComCiComdxlppxA);if(bEnd=true)cout<<"止确的结果,<<iComA<<iComB<<iComC<<iComD<<endl;cout«M您的最终得分:n«nCount«n欢迎下次再玩vvendl;bDon e=true;rank();elseif(xl
23、+x2+x3+x4)=4)coutvv”正确"vvendlvV1 您一共YM<<iGuessCounter<<n次”vvendl;n Count+=100;bDone=true;elsecout«n您冇n< <xl+x2+x3+x4«"位数字位置匹配;f< <yl+y2+y3+y4«n位数7数字匹 配/vv4«(xl+x2+x3+x4)(yl+y2+y3+y4)vv"位数 7 不对 M«endl;cout«M 您的得分是 n<<nCount<
24、;<endl;rank();iGuessCounter+;return 0;void FetchHisGuess(int&iHisGuesslnt&iHisGuess2,int&iHisGuess3n圾iHisGuess4)while(true)cout«M输入您所猜测的4位不同的数字(输入9999退出,输入H帮助,输入K管理):"«endl;scan f("%C&iHisGuessl);10代农换行,去除上一次输入之后的换行符if(iHisGuessl=10)scan f(”c:&iHisGuessl);i
25、f(iHisGuessl=10)scan f(”c:&iHisGuessl);if(iHisGuessl=,K,)iHisGuessl=iHisGuess2=iHisGuess3=iHisGuess4=7;return;if(iHisGuessl='H,)iHisGuessl=iHisGuess2=iHisGuess3=iHisGuess4=8;return;iHisGuessl=iHisGuessl-0x30;scan f(,%ld%ld%ld,&iHisGuess2/&iHisGuess3/&iHisGuess4);15C+箔王苗斗芸吩(2013)i
26、r(iHjsGuesslHH908dHisGuess2HH908dHisGuess3HH98l8dHisGuess4HH9)-(iHisGuesslHH8&8dHisGuess2HH808dHisGuess3HH8Q8dHisGuess4HH8)-(iHisGuesslH=78l8dHisGuess2HH78l8dHisGuess3HH72o8dHisGuess4X7)宀raumjif(iHisGuesslHl!.HisGuess2- -iHisGuesslHuiHisGuesss- -iHisGuesslHl!.HisGuess4- -iHisGuess2=».HisGue
27、ss3-iHisGuess2=».HisGuess4-xisGues53H».HisGuess4)宀COUXA至沛3郵说滋藍都>sm邮>4应今回目選吉&人号呈continue"rekuravoid compNumber(inr8la5-r&b5-r8lc5-t&d)srand(time(o)j boo- bISHfa_sej wh=e(bISHHfa-se) 宀a=l+(rand()9)j bul+snd()9)j CHl+(rand()9)j dHl+3nd()9)j if(a 一 M bsanc&Q 巴 UC&
28、; 炉 bnd08lc 一 Hd) 宀 blsutrueje-se 宀 blsufa_seboo- Enc(inr a5-r b5-r c、inr d)宀nniCTnnnn =9炉宜=U9)C+课程设计报告(2013)猜数游戏return true;elsereturn false;bool Help(int a,int bzint c,int d,int &xl,int &x2,int &x3,int &x4zint &ylzint &y2,int &y3,int &y4)if(a=8&&b=8&&
29、;c=8&&d=8)if(xl) cout«H您的第1位数7和位置均不对"«endl;if(x2) cout«M您的第2位数7和位賈均不对M«endl;if(x3) cout«M您的第3位数字和位置均不对"vvendl;if(x4) cout«M您的第4位数字和位置均不对n«endl;if(yl) coutv<”您的第1位数字猜对,但位置不对"«endl;if(y2) cout<<"您的第2位数字猜对,但位置不对"«end
30、l;if(y3) cout«"您的第3位数7猜对,但位置不对"«endl;if(y4) cout«H您的第4位数7猜对,但位置不对"«endl;if(!(xl|x2|x3|x4|yl|y2|y3|y4)coutvv”您输入的位置与数?均未猜对” vvendl;return true;elsereturn false;bool Manage(int 可int bnt cint d,int iComAJnt iComBJnt iComCJnt iComD)int iPasswd;if(a=7&&b=7&&
31、amp;c=7&&d=7)8Utvv”请输入密码:"vvendl;scanf(,%d,/&iPasswd);if(iPasswd=1234)cout<<"iE 确的数 V 为"< <iComA< <iComB< <iComC< <iComD< <endl;elsecoutvv 密码错误 M<<endl;19return true;else return false;void ReadMark()ifstream infile;in file.ope nCGame.datiosin);if(infile) infile>&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专利申请处理专项服务合同
- 二零二五年度国际货运保险合同2篇
- 二零二五年度商业地产租赁买卖合同3篇
- 临时工聘用合同书2024学校专用版一
- 个人工作服务费用协议2024年版版B版
- 二零二五版木工工程监理与验收合同4篇
- 2025年大批量金属加工承揽合同
- 2025版大型酒店集中式水处理系统托管服务合同3篇
- 二零二五年度金融产品广告投放与风险管理合同4篇
- 二零二五年度打破地域限制的公务员借调服务合同4篇
- 湖北省石首楚源“源网荷储”一体化项目可研报告
- 医疗健康大数据平台使用手册
- 碳排放管理员 (碳排放核查员) 理论知识考核要素细目表四级
- 撂荒地整改协议书范本
- 诊所负责人免责合同范本
- 2024患者十大安全目标
- 会阴切开伤口裂开的护理查房
- 实验报告·测定鸡蛋壳中碳酸钙的质量分数
- 部编版小学语文五年级下册集体备课教材分析主讲
- 电气设备建筑安装施工图集
- 《工程结构抗震设计》课件 第10章-地下建筑抗震设计
评论
0/150
提交评论