当前位置:文档之家› c++设计一个简单的打字游戏

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)判断游戏结束的标准并输出分数。

(二)系统设计
通过分析,选择二维数组作为存储并处理这些随机数的容器,所有主要步骤都在这个二维数组中设计并实现;在随机数的生成上选择以当前系统时间为随机
种子来生成所需要的四组随机数;
该程序包含的模块:
class GRN -(该类负责生成随机数 Generate Random Number)
void generate()-(生成随机数)
int RN()-(将生成的随机数返回n)
class Run -(该类负责实现程序的其他主要功能)
void initialize()-(对数组以及各类参数进行初始化)
void importing()-(将生成的符合要求的随机数导入到数组中)
void show()-(显示游戏运行过程)
void judge()-(判断所输入的数是否满足消去条件并进行记分)
void act(int t)-(执行,消去满足条件的数并在该列顶端生成新随机数)
系统流程图:
三、程序测试结果(OS:Windows 8 编译:VS2012)
1.游戏程序开始执行界面
2.输入数字每次移动的时间间隔(单位ms)
3.游戏开始运行
4.游戏进行中
5.游戏结束
6.经过测试,游戏能够正常运行并且所得分数正确。

四、问题及解决方案和收获与心得
(一)问题及解决方案
在设计开始时,希望能把这个游戏程序做成windows图形界面来显示,但是由于时间和能力不足,最终选择将程序实现在DOS窗口界面下。

在设计过程中,对游戏进行时的滚动速度想实现成逐渐加快的模式,但是实现过程发现有一些缺陷,于是改善成由用户自己手动输入Sleep(t)中t的数值来设置游戏中数字的滚动速度,这样用户可以有不同的体验。

(二)收获与心得
通过完成本次C++游戏程序的设计与实现,我对C++程序的设计有了更深一层的了解,锻炼了使用C+编程的熟练程度,对程序的设计步骤与相关细节的实现有了更好的认识;在完成程序的过程中,会出现一些错误,但是有些错误只要细心一点就可以避免,这样写程序的效率就会提高,另外,整洁的代码对于所写程序的质量也有很好的帮助与提升。

五、程序源代码
#include<iostream>
#include<>
#include<>
#include<>
#include<>
using namespace std;
class GRN enerate();
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) N();
n[0][1]=a[1].RN();
n[0][2]=a[2].RN();
n[0][3]=a[3].RN();
}
void Run::show()
{
for(i=0;i<25;i++)
{
for(j=0;j<4;j++)
{
if(n[i][j]!=0)
{
cout<<n[i][j]<<" ";
}
else
cout<<" ";
if(_kbhit())
{
s[k]=_getch();
k++;
}
}
cout<<endl;
}
}
void Run::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())
N()) enerate();
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()) enerate();
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()) enerate();
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()) enerate();
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';
}
}
void Run::act(int t)
{
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<<"******GAME OVER******"<<endl
<<"您最后的总得分是:"<<grade<<endl;
exit(0);
}
}
}
#include""
int main()
{
int n,t;
srand(time(NULL)); //以当前时间为随机种子
cout<<"请输入数字每次移动的时间间隔/ms(建议设置500ms上下):";
cin>>n;
t=n;
Sleep(1000);
Run r;
();
();
(t);
return 0;
}。

相关主题