《面向对象程序设计(课程设计)》报告解析_第1页
《面向对象程序设计(课程设计)》报告解析_第2页
《面向对象程序设计(课程设计)》报告解析_第3页
《面向对象程序设计(课程设计)》报告解析_第4页
《面向对象程序设计(课程设计)》报告解析_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上福建农林大学计算机与信息学院计算机类课程设计报告课程名称:面向对象程序设计(课程设计)课题名称: 猜数字游戏 姓 名:学 号:专 业:计算机科学与技术年 级:2012级指导教师:职 称:讲师2013年11月专心-专注-专业面向对象程序设计(课程设计)成绩评定表评分项目分值得分程序(系统)原创性15程序功能25代码质量(健壮性和可扩展性)20核心代码和功能模块注释10设计报告课题来源&任务描述5系统设计10代码编写与实现结果说明10团队合作能力分工协作&联合研发5成绩总计 指导老师签字:目 录1. 课题来源该作品为原创。课题灵感是能否做一个小游戏,寻找了

2、很多小游戏比如俄罗斯方块等,发现其太复杂以目前的水平无法完成,于是就选择了一个比较简单的猜数字游戏,编写益智类的游戏可以让我们日常生活中自己使用来达到增加乐趣的作用。猜数字游戏的原游戏规则:通常由两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的4位数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数字,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。如正确答案为 5234,而猜的人猜 5346,则是 1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为 2B,合起来就是

3、 1A2B。接着猜的人再根据出题者的几A几B继续猜,直到猜中(即 4A0B)为止。原游戏规则是两个人玩,于是我们想到了将规则改为人机对战,电脑出题玩家来猜。2. 任务描述猜数字游戏:产生随机数,统计完全猜中的数字的个数以及统计猜中但位置错误数字的个数,并给出提示。最后计算积分。此程序体现了面向对象程序设计的继承性和封装性。2.1. 课题的总体结构contrast-A:int-B:int-n1:int-n2:int-n3:int-n4:int+setNum():void+count():void+getA():int+getB():int+setA(int a):voidscore-s1:int

4、-s2:int-s3:int+score():+getS1():int+getS2():int+getS3():int+setS1(int b1):void+setS2(int b2):void+setS3(int b3):void类层次结构图:randNumber-num2:int-num3:int-num4:int-ran():int+randNum():void+getnum1():int+getnum2():int+getnum3():int+getnum4():int程序有三个类,其中randNumber类用来产生随机数,contrast类用来做对比并得出猜数字的结果,score类用

5、来读取文件内容并统计分数,主函数进行循环输入猜数字,并将结果输入文件。读取文件信息程序的功能结构图:猜数字随机数的产生输入所猜测的数据判断正误,给出提示计算积分更新文件信息2.2. 核心功能模块与类设计采用表格的形式,按照类在课题中的作用,列出核心类的功能定义和主要函数接口。randNumber类实现答案所需的随机数的产生randNum():void/制造随机数getnum1():int/获取随机数的第一位getnum2():int/获取随机数的第二位getnum3():int/获取随机数的第三位getnum4():int/获取随机数的第四位contrast类核心类,实现猜数字游戏主要玩法的设

6、计setNum():void/用于设置用户输入的数据count():void/统计几A几BgetA():int/获取A的值getB():int/获取B的值setA(int a):void/设置A的值score类用于显示和统计分数score():/从文件获取排行榜数据并显示getS1():intgetS2():intgetS3():int/获取排行榜积分setS1(int b1):voidsetS2(int b2):voidsetS3(int b3):void/更改排行榜2.3. 任务分工与工作量说明成员名字任务分工工作量(%)韩泽宇(1) 程序的初期设计制作(2) 对积分统计显示错误的BUG进

7、行修复,对循环的条件进行改变。(3) 增加了文件保存功能,记录最高分并保存至文件(4) 程序BUG测试及调试40%陈智杰(1)增加了变量对猜数字的次数进行限制,使得游戏更有挑战性(2)增加了在猜对数字时的(Y/N)退出功能,并能在退出时统计分数(3)程序BUG测试及调试30%钟扬(1)程序的外观界面设计(2)增加了对输入数字的限制,限定输入的数字每位必须各不相同,加强了程序健壮性(3)增加了积分统计(4)程序BUG测试及调试30%3. 程序(系统)详细设计按照程序(系统)的总体结构,详细介绍程序中各个类和函数的设计思想和实现方法,并以图的方式说明程序的流程图。randNumber类实现答案所需

8、的随机数的产生contrast类为核心类,继承至randNumber类,实现猜数字游戏主要玩法的设计开始读取并显示排行榜记录产生随机数字输入所猜的数字与生成的随机数完全相同?输出猜数字的提示(?A?B)NY猜数字的机会减少一次输出“你猜对了”次数耗尽?N计算并打印积分YY是否继续?N游戏结束统计总分,判断是否上榜更新排行榜4. 程序(系统)实现与测试(1) 给出典型的程序(系统)执行结果图。开始界面:猜数字界面:猜对时的显示界面:破纪录时的显示界面:更新后的排行榜:(2) 程序(系统)实现的功能随机数字的产生:产生四个随机数字分别代表四位数的四个位数字正误判断:给出既猜对位置也猜对的数字的个数

9、以及猜对但是位置不对的数字的位置。积分计算:猜错按0分算,一次就猜对100分,两次猜对90分,三次80分以此类推,最后一次猜对得20分。记录成绩的功能:给出排行榜记录前三名的成绩,保存在score.txt文件中。(3) 根据课题的特性,列出带有详细注释的核心功能模块或类代码;源程序代码:随机数:class randNumberint num1;int num2;int num3;int num4;int ran()srand( (unsigned)time( NULL ) );for(int i=0;i<10;i+)return (rand()%10);/返回0-9的一个随机数publi

10、c:void randNum()cout<<"正在产生随机数."<<endl;/大概因为算法的问题产生随机数这个过程比较慢所以做个提示num1=-1;num2=-1;num3=-1;num4=-1;/清除上次的随机数记录,使得下次产生随机数与上次不冲突num1=ran();donum2=ran();while(num2=num1);donum3=ran();while(num3=num1|num3=num2);donum4=ran();while(num4=num1|num4=num2|num4=num3);/产生四个不同的随机数int getnum

11、1()return num1;int getnum2()return num2;int getnum3()return num3;int getnum4()return num4;/获取随机数的方法用于比较:class contrast:public randNumberint A;int B;/用于记录结果(几A几B)int n1;int n2;int n3;int n4;/(用于记录输入的数字)public:void setNum(int a1,int a2,int a3,int a4)n1=a1;n2=a2;n3=a3;n4=a4;void count()A=0;B=0;/每一次都重置A

12、、Bif(n1=getnum1()A+;if(n2=getnum2()A+;if(n3=getnum3()A+;if(n4=getnum4()A+;/统计完全猜中的数字的个数(A)if(n1=getnum2()|n1=getnum3()|n1=getnum4()B+;if(n2=getnum1()|n2=getnum3()|n2=getnum4()B+;if(n3=getnum2()|n3=getnum1()|n3=getnum4()B+;if(n4=getnum2()|n4=getnum3()|n4=getnum1()B+;/统计猜中但位置错误数字的个数(B)int getA()return

13、 A;int getB()return B;void setA(int a)A=a;class scoreint s1;int s2;int s3;/用于记录前三名积分public:int getS1()return s1;int getS2()return s2;int getS3()return s3;/用于获取积分的方法void setS1(int b1)s1=b1;void setS2(int b2)s2=b2;void setS3(int b3)s3=b3;/用于最后修改积分排名score()s1=0;s2=0;s3=0;FILE *fp;fp=fopen("score.t

14、xt","r");/打开文件if(!fp)cout<<"当前暂无积分排名"<<endl;elsecout<<"积分排行榜:"<<endl;fscanf(fp,"%d",&s1);cout<<" 第一名:"<<s1<<endl;/读取第一个数字存入变量s1fscanf(fp,"%d",&s2);cout<<" 第二名:"<<s

15、2<<endl;/读取第二个数字存入变量s2fscanf(fp,"%d",&s3);cout<<" 第三名:"<<s3<<endl;/读取第三个数字存入变量s3cout<<endl;fclose(fp);主函数:void main()score score;/从文件读取并输出上次成绩contrast number;int s=0;/用于统计总分donumber.randNum();int n1,n2,n3,n4;int k=9;/用于统计剩余次数docout<<"请

16、输入您所猜的四位数字"<<endl;scanf("%1d%1d%1d%1d",&n1,&n2,&n3,&n4);/输入数字while(n1=n2|n1=n3|n1=n4|n2=n3|n2=n4|n3=n4)/当输入的数字中含有相同的数字cout<<"请重新输入正确格式的数字"<<endl;scanf("%1d%1d%1d%1d",&n1,&n2,&n3,&n4);/若输入格式错误重新输入number.setNum(n1,n2,

17、n3,n4);number.count();cout<<endl;cout<<number.getA()<<"A"<<number.getB()<<"B"<<endl;/输出结果(几A几B)k-;/剩余次数减1if(number.getA()=4)cout<<"你猜对了"<<endl;cout<<"你的本轮得分为"<<(20+10*k)<<"分"<<en

18、dl;/统计本轮得分s+=(20+10*k);/统计总分cout<<"你的总分为"<<s<<"分n"<<endl;/统计总分char yn;cout<<"请输入Y(继续)或N(退出)"<<endl;docin>>yn;if(yn='N'|yn='n')number.setA(-1);while(yn!='Y'&&yn!='y'&&yn!='N'

19、;&&yn!='n');/当输入格式正确时退出循环if(number.getA()!=4&&number.getA()!=-1)cout<<"你还有"<<k<<"次机会"<<endl;cout<<endl;while(number.getA()!=4&&k!=0&&number.getA()!=-1);/次数用完或者猜对时选择N退出循环if(number.getA()!=4&&number.getA(

20、)!=-1)cout<<"机会用完了,游戏结束"<<endl;cout<<"正确的数字为"<<number.getnum1()<<number.getnum2()<<number.getnum3()<<number.getnum4()<<endl;cout<<"你的本轮得分为0分"<<endl;while(number.getA()=4);/当猜对时循环结束cout<<endl;cout<<"你的最终得分为"<<s<<"分"<<endl;if(s>score.getS3()&&s<score.getS2()score.setS3(s);/当成绩介于第二名和第三名时替换第三名成绩if(s>score.getS2()&&s<score.getS1()score.setS3(score.getS2();score.setS2(s);/当成绩介于第一名和第二名时修改二、三名成绩if(s>

温馨提示

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

评论

0/150

提交评论