文档库 最新最全的文档下载
当前位置:文档库 › 贪吃蛇设计文档.doc

贪吃蛇设计文档.doc

贪吃蛇设计文档.doc
贪吃蛇设计文档.doc

贪吃蛇游戏的设计文档

目录

一、需求分析 ................................................. 错误 ! 未定义书签。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,测试结果

经测试,“贪吃蛇”游戏的功能和性能均符合要求!

相关文档