贪吃蛇游戏的设计文档
目录
一、需求分析 ................................................. 错误 ! 未定义书签。1.功能需求 . .............................................. 错误 ! 未定义书签。
2.非功能需求
错误 ! 未定义书签。
. ............................................
二、系统设计 ................................................. 错误 ! 未定义书签。
1. 实际思路 . ............................................... 错误 ! 未定义书签。2,结构设计 . .............................................. 错误 ! 未定义书签。
(1), main(), 主函数; . ................................ 错误 ! 未定义书签。
(2), init() , 图形化驱动函数 . ......................... 错误 ! 未定义书签。
(3), help(), 帮助信息函数 . ............................ 错误 ! 未定义书签。
(4), drawfence(), 周围墙壁函数 . ....................... 错误 ! 未定义书签。
(5), printscore(), 得分显示函数 . ...................... 错误 ! 未定义书签。
(6), playgame(), 游戏控制函数 . ........................ 错误 ! 未定义书签。
(7), gameover(), 游戏结束函数 . ........................ 错误 ! 未定义书签。
(8), closegraph(), 关闭图形驱动函数 ................... 错误 ! 未定义书签。
三、系统实现 ................................................. 错误 ! 未定义书签。
1, help() 函数流程图 . ...................................... 错误 ! 未定义书签。
2, drawfence() 函数流程图 . ................................. 错误 ! 未定义书签。
3, printscore() 函数流程图 . ................................ 错误 ! 未定义书签。
4, playgame() 函数流程图 . .................................. 错误 ! 未定义书签。
5, gameover() ,游戏结束函数 . .............................. 错误 ! 未定义书签。
四、系统测试 ................................................. 错误 ! 未定义书签。
1,功能测试. .............................................. 错误 ! 未定义书签。2,性能测试. .............................................. 错误 ! 未定义书签。3,测试结果. .............................................. 错误 ! 未定义书签。
一、需求分析
1.功能需求
贪吃蛇游戏的游戏规则是:游戏开始时,在一个密闭的空间里,贪吃蛇可以通过方向键进行方向的变化。屏幕上随机的出现食物,贪吃蛇在运动的过程中蛇头可以吃掉出现的的食物。吃掉食物后,蛇的身体会增长一节。当蛇的身体碰到四周的墙壁或者是自己的身体时,游戏会结束!并且,在屏幕的上方有一个分数牌显示,游戏开始时分数为 0,每当蛇吃掉一个食物,分数会增加 10 分。而在游戏的过程中,玩家可以按“ ESC”按键随时退出游戏。
2.非功能需求
(1)界面友好,图形界面,游戏开始前有游戏的简单使用说明,方便玩家
使用;
(2)具有较好的容错能力,玩家在游戏过程中,除了规定的按键外,其他
按键均忽略,不予处理;
(3)发布游戏时,将图形驱动加载到程序中,使系统具有良好的可扩展性
和平台适应性,可在任何PC机上运行。
二、系统设计
1.实际思路
(1),贪吃蛇游戏的设计,第一步想到的当然是画出贪吃蛇,从而可以想到
定义一个“蛇”的结构体的类型,这个结构体中包括:蛇的坐标,蛇的长度,蛇
运动的方向;蛇的生命。而蛇的运动可以通过两种结构来实现:数组和链表,我
使用了简单但不简洁的数组来实现。蛇的运动方向可以通过选择结构来实现控制蛇的运动方向。
(2),蛇已经构造出来了,第二步要构造的当然是蛇要吃的食物了。和构造蛇一样,我们同样可以通过一个结构体来构造食物。这个食物的结构体中包括:食物的坐标和食物是否生成。而食物的出现又是随机的,所以我们可以通过调用随机生成函数来实现这一功能。
(3),蛇和食物有了,就要设计蛇运动的区域了,我们可以同过调用图形
化的函数,运用循环来实现游戏墙壁的设计。
(4),而游戏最重要的部分就是:怎样驱动蛇的运动?我们首先可通过
!k bhit ()函数,来接收是否有键盘输入蛇运动的方向。在没有键盘输入
的情况下,蛇的运动就要通过将画蛇的数组不停地进行交换来实现的。蛇在吃完了食物之后身体的增加是通过增加数组的长度来实现的。
(5)最后要实现的就是在玩游戏过程中的分数的增加。这也是运用了图形
化函数来实现他的显示,同时通过一个分支结构来控制游戏的每个阶段的不同
的分数的增加。
2,结构设计
“贪吃蛇”游戏的核心的部分是游戏的控制部分,也就是我们在玩游戏时,
不断地通过改变蛇头的反向来吞噬食物的过程。并且,在游戏的过程中还要显示玩家的得分。为了实现这些功能,就需要各个小模块的功能支持。
具体的各个功能模块如下:图形驱动;显示帮助信息;画周围的墙壁;显示
分数;控制游戏;;结束游戏;关闭游戏图形驱动。
( 1), main(),主函数;
在 mian()函数之前我们已经对要用到的各个数据进行了宏定义。包括:蛇
的最大节数;方向键;循环变量;接收按键值的变量;分数;还有蛇的速度。
而在main()函数中我们只需要调用几个要使用的自定义的函数即可。包括:图形驱动函数:init ();显示帮助函数:help ();开始的画面:drawfence ();玩游戏函数 playgame();图形结束函数: closegame()。
( 2), init() ,图形化驱动函数
由于贪吃蛇游戏采用的图形化界面。在屏幕作图之前吗,必须根据显示器
适配器的种类将显示器设置成为某种图形模式,在未设置时,默认的屏幕为文本模式,此时,图形化函数均不能工作。所以要用到图形初始化函数 initgraph ()和清除图形屏幕函数 cleardevice ()。
其中, initgraph()函数的初始化是:
void far initgraph(int far *gdriver,int far *gmode,char *path);
其中第一个参数是图形驱动器;第二个参数是模式变量;第三个变量是图形
驱动程序所在的目录里路径。
(3), help(), 帮助信息函数
游戏开始之后,首先要显示玩贪吃蛇的相关帮助信息,包括:游戏名称;游
戏的控制键;退出键;以及游戏的相关的介绍,然后按任意键开始游戏。
由于已经将界面初始化为图形模式,所以输出要用到图形文本的输出,而
图形文本的显示主要涉及三个函数:
1) 作图颜色设置函数setcolor();
函数原型是: void far setcolor(int color); 参数color 是颜色的代表值。
2) 字形设置函数 settextstyle ();
函数原型是: void far settextstyle(int font,int direction,int charsize);
其中参数 font 是用来设置输出文本的字形; direction 用来设置文本的方向;charsize 是用来设置文本的大小。
3)文本显示函数 outtextxy ();
函数的原型是: void far outtextxy(int x,int y,char far *textstring);
参数 x 是文本的起始横坐标,y 是文本的起始纵坐标;参数textstring是待输出字符串的首地址。
用这三个函数就可以在help ()函数中输出有关的帮助信息。
(4), drawfence(), 周围墙壁函数
本游戏中的蛇运动的范围是一个矩形框围成的四面墙壁。画出墙面,主要用三个函数:
1),setcolor(),作图颜色设置函数;
2),setlinestyle(),线性设置函数;
函数原型: void far setlinestyle(int linestyle,unsigned pattern,int
thickenss) ;参数 linestyle 代表线型;参数 pattern 在定义线型时起作用,一般取
值为 0;thickness 的取值只有两种: 1(NORM_WIDTH)代表 1 点宽,3
(THICK_WIDTH)代表 3 点宽。
3),rectangle (),画矩形框函数;
函数原型: void far rectangle(int left,int top,int right,int bottom);
其中参数 left和top分别是矩形的左上角的横纵坐标;参数right和bottom 分别是矩形的右下角的横纵坐标。
在具体实现时,是通过循环来实现的。
(5), printscore(),得分显示函数
分数的显示是通过对一个变量的值以图形化的形式显示出来,同时采用某种颜色
为背景来衬托成绩,义突出其的显示效果。分数的显色主要涉及以下六个函数:
1),setfillstyle(),设置填充效果函数
函数原型: void far setfillstyle(int pattern,int color),其中参数pattern
为填充的模式,参数color为填充的颜色。
2),bar ()画条形窗口函数
函数原型: void far bar bar(int left,int top,int right,int bottom) ;
和函数 retangle ()函数类似。
3),setcolor();
4),stetextstyle();
5),sprintf(),格式输出函数;
函数原型: int sprint(char *str,char *format,variable-list);
函数的主要功能将按格式化规定的内容写入的str指向的字符串中,返回值等于写入的字符个数。
6),outtextxy();
(6), playgame(), 游戏控制函数
游戏控制函数是贪吃蛇游戏的核心部分,由于控制蛇的移动和食物的出现好,以及得分的计算。函数可分为一下的步骤来实现:
1)初始化蛇的相关信息;
2)初始化食物的相关信息;
3)输出初始化分数;
4)当玩家没有按“ ESC”键时,一直重复以下各步;
5)当玩家不按任何键时,一直重复6— 13 各步骤;
6)在屏幕画出食物;
7)计算出蛇的每一节在屏幕中的位置;
8)根据蛇的移动方向,计算出下一步蛇头的坐标位置;
9)判断蛇头是不是撞上了自己的身体的任何一节,如果是,游戏结束;
10)判断蛇头是不是撞到饿了任何一面的墙壁了,如果是,游戏结束;
11)若(9)(10)都未发生,说明蛇活着,判断蛇是否吃到了食物,如
果吃到了食物,则要先清除食物,并设置下一个食物的出现;同时,还
要将蛇的身体增长一节;屏幕显示的分数还要增加。
12)将蛇在屏幕显示,然后游戏延迟一会儿,给玩家一点反应时间;
13)蛇在移动的过程中,蛇头不断前进,末尾一节不断清除,这样才能保证蛇在移动的过程中的正确性;
14)当玩家按下一个键时,接收该按键,并判断是不是“ESC”;如果是,则退出游戏,如果不是则进行(15)步的判断;
15)判断当前按键的方向是否与蛇头的方向相反,如果相反,则不做处理,只要不是相反的,则就改变蛇的移动方向。
16)回到(14)步去执行,一直循环往复,直到游戏结束。
(7), gameover(), 游戏结束函数
这一模块,是在蛇头碰到了自己的身体的任何一节,或者是撞到了墙壁时,
游戏结束时,显示在屏幕上的。用到的函数与help ()中的用的文本输出函数一样。
同时,结束是,还要调用分数显示函数。
(8), closegraph(), 关闭图形驱动函数
当游戏结束界面显示完成后,要正式退出图形模式。退出图形模式的函数为closegraph ()。函数原型: void far closegraph(void)。
在关闭图形模式之前应该线让屏幕暂停一下,所以要调用getch ()函数。
三、系统实现
注:流程图的绘制使用的是:Microsoft Office Visio 2010
1, help()函数流程图
2, drawfence()函数流程图
3, printscore()函数流程图
4, playgame() 函数流程图
(1),贪吃蛇游戏的控制函数执行的流程图
(2),playgame()函数的判断并画出食物的程序片段
(3),playgame()函数的计算蛇的每一节的位置的程序片段
(4) ,playgame ()函数的计算出蛇头的位置程序片段
(5),playgame()函数的判断是否蛇头撞到自身及蛇头撞到墙壁的程序片段(6),playgame()函数的判断蛇是否吃到食物的程序片段
( 7),playgame()函数的画出蛇的每一节的程序片段
( 8),playgame()函数的清除蛇的最后一节的程序片段
5, gameover() ,游戏结束函数
四、系统测试
该部分主要编写测试计划,记录测试的过程和结果,并对测试结果进行分析总结,优化系统。
1,功能测试
测试功能测试结果
用例 1 测试开始游戏和帮助信息打开游戏主界面,画面显示游
戏名称和相关的游戏帮助
用例 2 测试蛇的运动屏幕显示贪吃蛇在屏幕运动
用例 3 测试控制蛇的方向键通过键盘上,按键的指挥,蛇
能够正确地移动
用例 4 测试食物是否显示游戏开始后,屏幕上显示
食物出现
用例 5测试蛇头吃食物功能当蛇头碰到食物后,蛇的身体
增长一节,食物消失,并在其
它地方出现新的食物
用例 6 测试分数显示功能在屏幕上方有分数的显示,并
且每当贪吃蛇吃到食物时,分
数会增加。
用例 7 测试游戏结束功能当贪吃蛇撞到自己和墙壁时,
游戏会结束,
并且显示“ game over ”,
用例 8 游戏退出功能当玩家按下“ ESC”按键时,
游戏会退出。
2,性能测试
测试性能测试结果
用例 1 进入游戏开始界面耗时5s 以内
用例 2 控制蛇运动过程蛇反应时间 1 以内
用例 3 蛇吃掉食物的过程 1 以内
用例 4 食物随机出现的时间 1 以内
用例 5 蛇的身体变长的时间 1 以内
用例 6 分数增加是反应时间1S 以内
用例 7 游戏,提示游戏结果耗时2S 以内
用例 8 玩家选择退出游戏耗时2s 以内
用例 9 玩家选择重新开始游戏耗时5s 以内
3,测试结果
经测试,“贪吃蛇”游戏的功能和性能均符合要求!