1.游戏名称
生死时速(Speed)
2.需求分析
(1)生死时速分为四个级别,级别根据活得的分数划分,分数越高难度越大,最大难度为4。开始页面最高分可以查看历史最高分。
(2)到达相应等级,障碍车辆数量增多,速度加快,右侧状态栏记录己方车辆生命、等级和分数。
(3)状态栏下方是道具说明栏,共有三个道具,红心是加生命,翅膀是无敌,炸弹是把障碍车辆清屏,无敌状态持续一定时间。
(4)三种道具按一定几率在车道上随机出现,己方车辆遇上道具,道具效果立即生效。
(5)当己方车辆撞上障碍车辆,立即进入无敌状态。当生命值耗光,游戏结束,显示本次游戏成绩,破纪录则记录到最高分。
(6)游戏开始后按回车键暂停游戏并返回游戏菜单,可选择开始新游戏或继续游戏。
(7)应用图形界面,加入一些小图片更有趣味性。
3.开发平台及工具介绍
软件环境
操作系统: Windows 10
系统类型: 64位操作系统
应用软件:Visual Studio、EasyX 图形界面库
语言:C++
4.系统介绍
4.1总体介绍
游戏设置了一个speed.cpp源程序,一个data.txt文件储存游戏数据,以及一个包含游戏图像及音频的picture文件夹。
4.2文件介绍
(1)speed.cpp:主程序代码,其中包含基于EaxyX图形库的头文件graphics.h,C++系统提供的头文件time.h等,以及main函数、play函数等游戏运行相关的函数。
(2)data.txt :用于存储游戏数据。第一行存储player状态,包括player坐标、得分、生命值、无敌时间等。2~8行存储环境状态,包括其他车辆及道具的位置等。
(3)picture文件夹:其中包含游戏运行所需的各种图片及音频文件,游戏运行时载入这些文件。
采用的数据结构
主要数据结构为队列,用链表实现。以队列模拟环境状态的其他车辆及道具等的进入与退出,用随机函数实现随机车辆位置及道具位置。
5.测试:
游戏开始时界面
游戏菜单界面
单击新的游戏,过度动画,开始游戏,右侧状态栏和道具说明栏
道具效果,依次为无敌,加生命,清屏
生命值耗光,游戏结束,显示本次得分与历史最高分
6.代码片段
void displaycars()
{
PLAYER newcar;
for (int i = 0;i < 7;i++)
{
for (int j = 0;j < 9;j++)
{
newcar.x = 20 + i * 60;
newcar.y = 660 - j * 80;
if (queueAt(carqueue[i], j) == 1)
{
makeCar(newcar);
}
else if (queueAt(carqueue[i], j) == 2)
makeDaoju(newcar, 2);
else if (queueAt(carqueue[i], j) == 3)
makeDaoju(newcar, 3);
else if (queueAt(carqueue[i], j) == 4)
makeDaoju(newcar, 4);
}
}
}
void playgame()
{
cleardevice();
DWORD oldtime = 0;
//_getch();
while (1)
{
FlushBatchDraw();
DWORD newtime = GetTickCount();
if (player.wdtime != 0)
{
setbkcolor(BLACK);
isWhite = 0;
}
else
{
setbkcolor(WHITE);
isWhite = 1;
}
if (newtime - oldtime >= (unsigned int)(600 - 80 * g_grade))
{
score += 100;
if(player.wdtime!=0)
player.wdtime--;
if (score == 5000 || score == 10000 || score == 20000)
g_grade++;
oldtime = newtime;
updateQueue();
cleardevice();
DrawGameGUI();
displaycars();
makePlayer();
}
if (_kbhit())//如果有输入的话,改变方向.没有就方向不变
{
g_direction = _getch();
if (g_direction == 13)
{
storetext();
//_getch();
loadAndBegin();
}
else
moveOrder();//改变玩家的坐标
cleardevice();//清屏
DrawGameGUI();
displaycars();
makePlayer();
}
}
}