猜数字游戏C++课程设计报告.docx

上传人:b****7 文档编号:8591087 上传时间:2023-02-01 格式:DOCX 页数:17 大小:150.73KB
下载 相关 举报
猜数字游戏C++课程设计报告.docx_第1页
第1页 / 共17页
猜数字游戏C++课程设计报告.docx_第2页
第2页 / 共17页
猜数字游戏C++课程设计报告.docx_第3页
第3页 / 共17页
猜数字游戏C++课程设计报告.docx_第4页
第4页 / 共17页
猜数字游戏C++课程设计报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

猜数字游戏C++课程设计报告.docx

《猜数字游戏C++课程设计报告.docx》由会员分享,可在线阅读,更多相关《猜数字游戏C++课程设计报告.docx(17页珍藏版)》请在冰豆网上搜索。

猜数字游戏C++课程设计报告.docx

猜数字游戏C++课程设计报告

猜数字游戏—C++课程设计报告

河南工业大学信息学院

 

《C++面向对象程序设计》课程设计报告

 

猜数字游戏

 

姓名王永森专业班级、学号软件130420131692****

同组人姓名张**专业班级、学号20131692****

完成时间:

2015-1-16

指导老师:

王献荣

 

 

一、需求分析

猜数字游戏,就是先由电脑随机产生四个数字,然后让用户输入四个数字,与之比对,并给出比对结果,反馈给用户正确的有几个和不正确的但是数字正确的有几个,再由用户经过这些信息可以选择重新输入或者重新开始,同时对用户每次输入的数字比对结果进行给分,还有个功能是用户可以获取帮助,查看上次输入的正确是哪一位,也可以输入权限密码进行查看谜底。

从上面这些分析来看,这个程序需要用到的有随机数的产生,数字去重功能,比对功能,计分功能,读写文件功能等。

还有一些其他的如输入优化,防止用户错误输入,密码不回显等。

分析之后,我负责代码的编写,同组张松晚同学负责界面设计,程序测试,报告撰写等。

二、程序的主要功能

1、新游戏

开始新的游戏

2、判断功能

对用户输入的数字进行判断

3、随机数功能

产生不重复的随机数

4、去重功能

去掉用户输入及电脑产生的随机数中重复的数字,重新输入或产生

5、密码不回显功能

用户输入密码时在屏幕上显示*号

6、文件读写功能

运行游戏时对上次分数读取,对每次分数进行存储

7、容错提醒功能

当用户输入错误时进行提醒

8、密码校验功能

对用户输入的密码进行校验

9、查询得分功能

查询用户所得分数

三、程序运行平台

Dev-C++

四、模块分析

1、产生随机数

随机数的产生非常容易,关键是要给产生的随机数控制在0~9之间,然后不能重复,这个我就想了大量的方法进行去重,因为就四个数字,我就把这四个数存放在一个数组里面,先给他们赋值为-1,然后再循环着产生随机数,分别与这个数组里面的数字进行比较,若存在相等的就重新产生,不存在就将这个随机数赋值到数组中去,这样大的循环四次,中间可能有很多循环,最后就产生了不重复的四个随机数。

2、用户输入

这个模块和产生随机数的类此,这不过四个数字直接由用户输入,要求也是不能重复,所以方法和产生随机数的是一样的。

可以参考上面随机数的方法。

输入之后存在另外一个数组中去就行了。

3、比对结果

这个比对的模块,先一看是比较简单,但是仔细一看还不是那么简单,比对是好比,就是比对之后需要记录用户输入正确的有几个,然后还要记录不正确但是数字正确的个数,所以需要另外想办法,想了很多之后决定用矩阵进行比较,用二位数组存放比对后的结果,相等的就赋值为1,不相等就赋值为0。

然后需要查看结果时就访问二维数组,结果就出来了。

4、密码不回显

这个要用到getch,它的功能是直接从键盘获取字符但不显示在屏幕上,但是有个缺点是无法判断输入是否结束,所以又是一个难题,想来想去,最后想到用回车键判断是否输入结束,但是直接用反斜扛零后却不行,因为那是个回车键的输出符,但是不能放弃,最后在网上XX了下,找到了办法,就是让最后输入的回车符与回车符的ASCLL码进行比较,就是与13进行比较,结果完美解决。

哈哈。

发现字符的处理是最难的。

5、输入限制

输入限制,可以限制用户输入单个自然数,或者多位自然数,这个主要思想是全字符输入,然后分别判断每个字符是否符合要求,最后将符合要求的字符串转化为整型即可。

详情可以见下面代码示例。

其实最关键的是要掌握好字符的运用。

五、总框架图

图1总框架图

六、类UML图

表1UML

GuessNumber

-a[4]:

int

-b[4]:

int

-c[4][4]:

int

-x:

int

-y:

int

-score:

int

-mima[10]:

char

+GuessNumber()

+welcome()

-makenumber()

-inputnumber()

-displaynumber()

-getx()

-gety()

-panduan()

-menu1()

-menu2()

-menu3()

-deal1()

-deal2()

-deal3()

-readscore()

-writescore()

-help()

-displayscore()

-yanmi()

-natural1():

int

-natural2():

int

七、比较有特色的函数(分析详见模块分析)

//makenumber()开始新游戏产生随机数

voidGuessNumber:

:

makenumber()

{

x=0;

y=0;

score=0;

intm;//暂时存放随机数

for(intk=0;k<4;k++)

{

a[k]=-1;

}

srand(time(0));

for(intn=0;n<4;n++)

{

do

{

m=rand()%10;

}while(a[0]==m||a[1]==m||a[2]==m||a[3]==m);

a[n]=m;

}

inputnumber();

}

 

//natural1()检验输入一位的数字是否合格

intGuessNumber:

:

natural1()

{

intk=0;

intn=0;

intm=0;

charu[50];

do

{

if(m==1)

{

cout<<"输入有误,请重新输入:

";

}

fflush(stdin);//从键盘输入前清除缓冲区

cin.getline(u,50);

n=strlen(u);

if(n==1&&u[0]<='9'&&u[0]>='0')

{

k=1;

}

m=1;

}while(k!

=1);

returnatoi(u);

}

 

//natural2()检验输入(可以多位)是否合格

intGuessNumber:

:

natural2()

{

intn;//存储字符长度

inti;

charu[50];

do

{

fflush(stdin);//从键盘输入前清除缓冲区

cin.getline(u,50);

n=strlen(u);

for(i=0;i

{

if(u[i]<'0'||u[i]>'9')

{

cout<<"输入有误,请重新输入:

";

break;

}

}

}while(i

returnatoi(u);

}

 

//panduan()判断用户输入数据及结果

voidGuessNumber:

:

panduan()

{

x=0;

y=0;

for(intq=0;q<4;q++)

{

for(intp=0;p<4;p++)

{

if(a[q]==b[p])

{

c[q][p]=1;

}

else

{

c[q][p]=0;

}

}

}

for(intq=0;q<4;q++)

{

for(intp=0;p<4;p++)

{

if(q==p&&c[q][p]==1)

{

x+=1;

}

if(c[q][p]==1)

{

y+=1;

}

}

}

y=(y-x);

cout<<"您输入的四个数字是:

";

for(intp=0;p<4;p++)//输出用户输入的数据

{

cout<

}

cout<

if(x==4)

{

cout<<"你赢了!

"<

score+=80;

writescore();

cout<<"最终得分是:

"<

cout<<"\n回车键返回菜单……";

cin.get();

}

elseif(x==0)

{

cout<<"\n正确的位数有"<

"<

cout<<"其他有"<

"<

cout<<"\n一个都没对哦!

加油呀!

"<

score-=40;

writescore();

cout<<"\n回车键返回菜单……";

cin.get();

}

else

{

cout<<"\n正确的位数有"<

"<

cout<<"其他有"<

"<

score+=20*getx();

writescore();

cout<<"\n回车键返回菜单……";

cin.get();

}

}

 

//yanmi()验证密码(且不回显)是否正确是否显示谜底

voidGuessNumber:

:

yanmi()

{

inti=0;

intj;

charmm[50];//用于接收密码

cout<<"请输入密码:

";

fflush(stdin);//从键盘输入前清除缓冲区

do

{

mm[i]=getch();

if(mm[i]!

=13)

{

cout<<'*';

}

j=i++;

}while(mm[j]!

=13);

mm[j]='\0';

if(string(mm)==string(mima))

{

system("cls");

displaynumber();

}

else

{

system("cls");

cout<<"密码错误!

"<

cout<<"\n回车键返回菜单……";

cin.get();

}

}

八、运行结果图

图2进入前

图3欢迎界面

图4一级菜单

图5输入数字

图6显示结果

图7二级菜单

图8三级菜单

图9结果提示

图10输入密码

图11查看谜底

 

图12获胜界面

九、存在的不足与对策

由于第一次用C++语言编写大的程序,肯定会有些不足,在程序的编写过程中,遇到了很多问题,就字符的问题是最多的,而且字符的问题是最难的,特别是在输入限制问题上,由于以前C语言的课程设计上用过,所以还按照我以前的方法写的,还算好解决,但在密码不回显的问题上还是需要好好考虑的,虽然用简单的直接输入很简单但是不能控制输入结束,不能按回车键结束,这个问题很不人性化,所以,我要把它改成人性化的,就是想办法通过敲击回车键判断结束,虽然遇到很多问题,但还是完美解决了,通过这次的课程设计,很大程度的提高了我的编程经验,对于这个程序以后还能多多改善,变得更加完美。

十、程序源代码

详见附件。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 其它

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

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