贪吃蛇游戏的设计文档目录一、需求分析 ................................................. 错误 ! 未定义书签。
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,intthickenss) ;参数 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 ()函数类似。