C++设计一个简单的打字游戏.docx
- 文档编号:9884060
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:14
- 大小:52.16KB
C++设计一个简单的打字游戏.docx
《C++设计一个简单的打字游戏.docx》由会员分享,可在线阅读,更多相关《C++设计一个简单的打字游戏.docx(14页珍藏版)》请在冰豆网上搜索。
C++设计一个简单的打字游戏
《C++课程设计实验报告》
姓名:
XXX
学号:
XXXXXXX
班级:
XXXXXX
指导教师:
XX
完成日期:
XXXX年X月X日
一、问题简述………………………………………………………
(2)
二、需求分析及系统设计…………………………………………
(2)
(一)需求分析……………………………………………………
(2)
(二)系统设计……………………………………………………
(2)
三、程序测试结果…………………………………………………(4)
四、问题及解决方案和收获与心得………………………………(7)
(一)问题及解决方案……………………………………………(7)
(二)收获与心得…………………………………………………(7)
五、程序源代码……………………………………………………(8)
一、问题简述
本题目(参考题五)要求设计并实现一个打字游戏,游戏要求如下:
游戏开始后,屏幕上方同时有四个数字分四列下落,每个数字由三位组成(随机生成,但首位不可相同)。
玩家用键盘依次输入数字,如果输入的数字序列与某一列正在下落的数字三位全部相同,则给玩家加10分,该列数字消失,该列新产生数字并下落;如果输入的数字某一位不相同,则输入的数字序列全部作废,重新接收输入。
某一列数字到达屏幕底部则游戏结束。
对于本题目我采用C++进行设计并实现。
二、需求分析及系统设计
(一)需求分析
需要设计的这个游戏程序,其规则在上述问题简述中已经进行了详细描述。
其中有几个方面是这个程序所需要的主要模块:
(1)生成四组随机的三位数,并且所生成的四组随机数要求首位不相同;
(2)分析并选取合适的方式来存储这些随机数;
(3)所有显示出的数能够按照一定频率向下进行滚动;
(4)键盘输入一组数字,并在输入匹配的情况下消除与之匹配的数,然后产生一个不同于其他三组的新随机数;
(5)判断游戏结束的标准并输出分数。
(二)系统设计
通过分析,选择二维数组作为存储并处理这些随机数的容器,所有主要步骤都在这个二维数组中设计并实现;在随机数的生成上选择以当前系统时间为随机种子来生成所需要的四组随机数
;
该程序包含的模块:
classGRN-(该类负责生成随机数GenerateRandomNumber)
voidgenerate()-(生成随机数)
intRN()-(将生成的随机数返回n)
classRun-(该类负责实现程序的其他主要功能)
voidinitialize()-(对数组以及各类参数进行初始化)
voidimporting()-(将生成的符合要求的随机数导入到数组中)
voidshow()-(显示游戏运行过程)
voidjudge()-(判断所输入的数是否满足消去条件并进行记分)
voidact(intt)-(执行,消去满足条件的数并在该列顶端生成新随机数)
系统流程图:
三、程序测试结果(OS:
Windows8编译:
VS2012)
1.游戏程序开始执行界面
2.输入数字每次移动的时间间隔(单位ms)
3.游戏开始运行
4.游戏进行中
5.游戏结束
6.经过测试,游戏能够正常运行并且所得分数正确。
四、问题及解决方案和收获与心得
(一)问题及解决方案
在设计开始时,希望能把这个游戏程序做成windows图形界面来显示,但是由于时间和能力不足,最终选择将程序实现在DOS窗口界面下。
在设计过程中,对游戏进行时的滚动速度想实现成逐渐加快的模式,但是实现过程发现有一些缺陷,于是改善成由用户自己手动输入Sleep(t)中t的数值来设置游戏中数字的滚动速度,这样用户可以有不同的体验。
(二)收获与心得
通过完成本次C++游戏程序的设计与实现,我对C++程序的设计有了更深一层的了解,锻炼了使用C+编程的熟练程度,对程序的设计步骤与相关细节的实现有了更好的认识;在完成程序的过程中,会出现一些错误,但是有些错误只要细心一点就可以避免,这样写程序的效率就会提高,另外,整洁的代码对于所写程序的质量也有很好的帮助与提升。
五、程序源代码
Type.h
#include
#include
#include
#include
#include
usingnamespacestd;
classGRN//GenerateRandomNumber
{
public:
voidgenerate();//Generate
intRN();//RandomNumber
private:
intn;
};
classRun
{
public:
voidinitialize();//初始化
voidimporting();//导入
voidshow();//显示
voidjudge();//判断
voidact(intt);//执行
private:
GRNa[4];
inti,j,k,l,z[4];
intnum,grade;
intn[25][4];
chars[4];
};
Type.cpp
#include"type.h"
voidGRN:
:
generate()
{
n=rand()%900+100;//生成三位随机数
}
intGRN:
:
RN()
{
returnn;
}
voidRun:
:
initialize()
{
for(i=0;i<4;i++)
{
z[i]=0;
}
for(i=0;i<25;i++)
{
for(j=0;j<4;j++)
n[i][j]=0;
}
k=0;
i=0;
j=0;
grade=0;
s[0]='\0';
}
voidRun:
:
importing()
{
for(;;)
{
a[0].generate();
a[1].generate();
a[2].generate();
a[3].generate();
if(a[0].RN()/100!
=a[1].RN()/100&&a[1].RN()/100!
=a[2].RN()/100&&a[2].RN()/100!
=a[3].RN()/100
&&a[0].RN()/100!
=a[2].RN()/100&&a[0].RN()/100!
=a[3].RN()/100&&a[1].RN()/100!
=a[3].RN()/100)//保证生成的四组随机数的首位不相同
break;
}
n[0][0]=a[0].RN();
n[0][1]=a[1].RN();
n[0][2]=a[2].RN();
n[0][3]=a[3].RN();
}
voidRun:
:
show()
{
for(i=0;i<25;i++)
{
for(j=0;j<4;j++)
{
if(n[i][j]!
=0)
{
cout< } else cout<<""; if(_kbhit()) { s[k]=_getch(); k++; } } cout< } } voidRun: : judge() { if(k==3) { s[3]='\0'; num=atoi(s); if(num==a[0].RN()||num==a[1].RN()||num==a[2].RN()||num==a[3].RN())//所输入数字与任意一已显示数字相同 { grade+=10; cout<<"已得分数: "< if(num==a[0].RN())//所输入数字与第一列中显示数字相同 { for(;;) { a[0].generate(); if(a[0].RN()/100! =a[1].RN()/100&&a[0].RN()/100! = a[2].RN()/100&&a[0].RN()/100! =a[3].RN()/100) break; } n[l-1-z[0]][0]=0; z[0]=l-1; } if(num==a[1].RN())//所输入数字与第二列中显示数字相同 { for(;;) { a[1].generate(); if(a[0].RN()/100! =a[1].RN()/100&&a[1].RN()/100! = a[2].RN()/100&&a[1].RN()/100! =a[3].RN()/100) break; } n[l-1-z[1]][1]=0; z[1]=l-1; } if(num==a[2].RN())//所输入数字与第三列中显示数字相同 { for(;;) { a[2].generate(); if(a[2].RN()/100! =a[1].RN()/100&&a[0].RN()/100! = a[2].RN()/100&&a[2].RN()/100! =a[3].RN()/100) break; } n[l-1-z[2]][2]=0; z[2]=l-1; } if(num==a[3].RN())//所输入数字与第四列中显示数字相同 { for(;;) { a[3].generate(); if(a[3].RN()/100! =a[1].RN()/100&&a[3].RN()/100! = a[2].RN()/100&&a[0].RN()/100! =a[3].RN()/100) break; } n[l-1-z[3]][3]=0; z[3]=l-1; } } k=0; s[0]='\0'; } } voidRun: : act(intt) { for(l=1;;l++) { show(); judge(); n[l-z[0]-1][0]=0; n[l-z[1]-1][1]=0; n[l-z[2]-1][2]=0; n[l-z[3]-1][3]=0; n[l-z[0]][0]=a[0].RN(); n[l-z[1]][1]=a[1].RN(); n[l-z[2]][2]=a[2].RN(); n[l-z[3]][3]=a[3].RN(); Sleep(t); system("cls"); if(l-z[0]==24||l-z[1]==24||l-z[2]==24||l-z[3]==24) { cout<<"******GAMEOVER******"< <<"您最后的总得分是: "< exit(0); } } } main.cpp #include"type.h" intmain() { intn,t; srand(time(NULL));//以当前时间为随机种子 cout<<"请输入数字每次移动的时间间隔/ms(建议设置500ms上下): "; cin>>n; t=n; Sleep(1000); Runr; r.initialize(); r.importing(); r.act(t); return0; } (注: 可编辑下载,若有不当之处,请指正,谢谢! )
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 设计 一个 简单 打字 游戏