一、需求分析 1.功能需求
“贪吃蛇”游戏的总体需求就是能够正常玩游戏并能够观察到自己的得分。具体的功能性需求如下:
(1)玩家只能在屏幕上固定的区域内玩游戏,区域周围用墙壁状的图形来标识; (2)蛇的身体由一个个小方块来构成,蛇头由两个小方块构成; (3)食物由一个方块构成,食物要随机出现在游戏区域
(4)玩家可用键盘上的上、下、左、右四个方向键来控制蛇的运行方向;
(5)当蛇向前移动过程中,碰上了食物,则蛇身增长一节,当前食物消失,并且在令一处游戏区内随机出现一个食物;
(6)蛇每增长一节,则得分相应增加;
(7)得分实时显示在屏幕顶部(游戏区域边框处的某个位置);
(8)蛇在移动的过程中,蛇头不能撞上蛇身,蛇头也不能撞上周围墙壁,若这两种情形发生,则认为蛇已死,在游戏区域内显示“GAME OVER”信息,并在顶部显示所得分数,游戏结束;
(9)在游戏过程中,玩家可随时按“ESC”键结束游戏;
2.非功能需求
(1)界面友好,图形界面,游戏开始前有游戏的简单使用说明,方便玩家使用; (2)具有较好的容错能力,玩家在游戏过程中,除了规定的按键外,其他按键均忽略,不予处理;
(3)发布游戏时,将图形驱动加载到程序中,使系统具有良好的可扩展性和平台适应性,可在任何PC机上运行。
二、系统设计 1.设计思路
程序关键在于表示蛇的图形及蛇的移动。用一个小矩形块表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体
虽蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这是,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇
2.结构设计
(1)main()主函数:
按照语法规则,首先定义使用到的常熟、全局变量、函数原型说明。函数的实体比较简单,因为要输出图形,所以应初始化图形系统,图形工作方式正确确定后,画出墙壁,调用playgame()开始游戏,一旦游戏结束后,关闭图形系统,程序结束。
(2)drawfence()画出墙壁函数: 背景颜色设为黑色。
上部墙壁宽度为10点,左上角坐标为(50,40),右下角坐标为(610,49)。 下部墙壁宽度为10点,左上角坐标为(50,451),右下角坐标为(610,460)。 上部墙壁宽度为10点,左上角坐标为(50,40),右下角坐标为(59,460)。 上部墙壁宽度为10点,左上角坐标为(601,40),右下角坐标为(610,460)。 每面墙壁均有多个长、宽均为10点的矩形框组合而成。 (3)printscore()显示分数
分数的显示是对一个变量的值以图形的形式显示出来,同时,采用某种颜色为背景来承托成绩,以突出显示效果。
(4)playgame()游戏控制模块
1. 初始化蛇的相关数据(如蛇的起始位置、蛇的长度、蛇的起始移动方向、蛇是否活
着等);
2. 初始化食物的相关数据(如是否需要出现食物) 3. 输出初始分数
4. 当玩家不按任何键时,一直重复一下(6)~(13)个步骤 5. 当玩家没有按“ESC”键时,一直重复以下各步; 6. 在屏幕上画出食物;
7. 计算出蛇的每一节在屏幕上的位置;
8. 根据蛇的移动方向,计算下一步蛇头的坐标位置;
9. 判断蛇头是不是撞上了自己的身体任何一节了,如果是,结束游戏; 10. 判断蛇头是不是撞上任何一面墙壁了,如果是,结束游戏;
11. 若(9)和(10)都未发生,则说明蛇还活着。判断蛇是否能够吃到食物(蛇头与
食物重合表示吃到了食物)。若吃到了食物,则要先清除当前食物,并设置需要出现下一个食物。同时,还要增长蛇身,增加相应相应分值,并设置需要出现下一个食物。同时,还要增长蛇身,增加相应分值,并输出得分;
12. 将蛇在屏幕上画出来。然后游戏需要延迟一小会,给玩家一个反应的时间; 13. 蛇在移动的过程中,蛇头不断前进,末尾的一节要不断地清除,这样才能保证蛇在
移动过程中是正确的;
14. 当玩家按下一个键时,接收该按键,并判断是否是“ESC”键,如果是,则退出游
戏,如果不是,则继续进行第(15)步的判断;
15. 判断当前按键是否与蛇头的前一刻移动方向相反(要是相反的话就等于蛇头要从反
方向原来走回去,这是不可能的,因此,这种按键不予处理),只要不是反向的,就修改蛇的新移动方向。具体判断过程如下:若按下了“向上”键且原移动方向不是向下的,则修改蛇的移动方向为3(向上),若按下了“向左”键且原移动方向不是向右的,则修改蛇的移动方向为1(向右); 设置填充效果函数(setfillstyle) 画条形窗口函数(bar) 作图颜色设置函数(setcolor) 文本字型设置函数(settextstyle) 格式输出函数(sprintf) 文本输出函数(outtextxy) (5)gameover()游戏结束; (6)closegame()关闭图形驱动模块
三、系统实现
1.系统功能与分析流程图
在游戏程序中,主任务0主要完成一些初始化的工作,开机画面的显示。
在任务2种一开始将屏幕清屏,然后绘制贪食蛇游戏的边界和计分状态,最后进入一个无限循环,在循环体中根据游戏者的按键进行相应的处理,详细流程图如下图所示:
绘制游蛇的边界图案 显示游戏界面右边的静态图片和计分清零 初始化蛇的位置以及蛇的游动方向 等待键盘扫描任务发来的消息 Reset键 判断按键 暂停键 的值
方向键
重新创建任务改变蛇游动的方向
2,重新开始游戏
延时
图3.3 贪食蛇吃豆的任务流程图 蛇的动态显示建立在任务
把任务2挂起,使游戏暂停 2,主要是不停的更新蛇的位置,另外
每更新一次还需要判断蛇是否碰到边界,是否碰到自己身子,是否吃到豆子等。其流程图如下图所示:
是 游戏 结束否 否 更新蛇的位置,将蛇头原来坐标赋给蛇身,蛇身原来坐标赋给蛇尾。 是 是否碰到边界 或自己的身游戏结束 是否吃到豆子 否 是 增加蛇身的长度 更新豆子 蛇身各坐标赋值 延时
功能:进行贪食蛇游戏
分析:定义键盘方向键操作,随机数发生器产生食物,并分别利用函数
判断贪食蛇的长度及游戏是否成功等. 并能够输入游戏成绩.
四、系统测试
该部分主要编写测试计划,记录测试的过程和结果,并对测试结果进行分析总结,优化系统。
1.功能测试
用例1 用例2 用例3 用例4 用例5 用例6 测试功能 测试开始游戏 测试改变蛇头, 测试蛇头撞自己 测试蛇头撞墙壁 测试游戏分数提示 测试游戏的帮组提示 测试结果 打开游戏主界面 正确转弯 游戏结束 游戏结束 都给出正确的游戏分数 按下帮组键后能看到帮组信息 2.性能测试
用例1 用例2 用例3 用例4 用例5 用例6 用例7 测试性能 进入游戏开始界面耗时 蛇头转弯 蛇头撞自己结束游戏 测试蛇头撞墙壁结束游戏 测试游戏分数提示 测试游戏的帮组提示 蛇吃食物增长 测试结果 3S以内。 1S以内 2S以内 2S以内 平均1S以内 1S以内 1S以内 3.测试结果
经过测试本项目的功能和性能符合要求。
因篇幅问题不能全部显示,请点此查看更多更全内容