贪吃蛇小游戏需求分析
————————————————————————————————作者:————————————————————————————————日期:
“贪吃蛇”游戏需求分析
一、需求分析:
贪吃蛇游戏是一个小型益智游戏,它可以锻炼人们的反应能力,尤其是在开发人的智力方面,很受人们的欢迎。
本组该次小游戏程序设计包含二维数组、鼠标操作及图形化函数等方面知识。
具体需求概要如下:
1.初始化游戏界面为600*600大小,并于坐标为(250,250)
处显示游戏名称“贪吃蛇”,等待鼠标响应以开始游戏;
2.在程序中用格子初始蛇长及蛇的位置,用W、S、A、D
控制方向为上下左右进行游戏。
游戏过程中,每吃到一次
食物用For循环使蛇移动的speed增加,分数加10,蛇长
加一格;
3.蛇头咬到蛇尾or蛇头接触活动区域外围则Game over,
显示累计分数,游戏结束。
二、运行环境:
该课程设计在设计与实验过程中需要在windows XP系统/windows 2000以上系统中进行,程序设计要求在visual C++6.0平台中进行,完成代码的编写、编译、调试、测试等工作。
本游戏对计算机硬件和操作系统要求极低,所以在这里只是把自己的电脑硬件参数和系统参数列下:操作系统:windows xp 软件环境:安装VC++6。
三、设计概要:
1.初始化模块:屏幕初始化,屏幕初始化用于显示游戏信息“贪吃蛇”;
2.游戏界面模块:设计绿色的边框,边框内用黑色无框格子填充作为游戏活动区域;
3.游戏运行模块:运用函数控制蛇长及食物的关系,并使用键盘控制方向;
4.判断模块:头咬到尾或头接触活动区域外围,则游戏结束,显示累计分数。
四、详细设计及实现:
1.流程图(函数调用关系图)
Main 函数
Init 函数
初始化绘图环境
Food 函数
随机产生初始食物的位置
Draw 函数
画出蛇体状态及食物位置
Snakes 函数
蛇体及速度变化 运动方向的选择
Draw 函数
画出蛇体状态及食物位置
Gameover 函数
游戏终止,显示分数
Food 函数 判断有无进食
Food1函数
判断是否进食
Wall 函数
画出活动区域及边框
第一次调用,画初始状态
Food1函数
从此处Draw 以后开始至结尾,函数均在一个For 循环中调用。
判断
游戏
判断
进入下一次循
环
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h> #include<dos.h>
#include<conio.h>
#include<time.h>
3.数据结构
IMAGE wal; MOUSEMSG m;
typedef struct
{
int x[40];
int y[40];
int derection;
int food; int foodx; int foody; int size; } snake; 赋值0,1作为s.food的标志,以在for循环中判断上一个食物是否已被吃到;foodx和foody作为食物格子的横纵坐标。
作为蛇身体和头部格子的坐标
用于判断蛇身体格子的移动方向
蛇身体格子的个数,即蛇
4.全局变量
为分数赋初值0,为速度赋初值300 int score=0,speed=300;
5.函数声明
void init(void);
void wall(void);
void food(void);
void gameover(void);
int food1(void);
void snakes(void);
void draw(void);
6.算法设计
main函数:
具体实现程序功能。
调用的函数函数功能
init 初始化绘图环境
food 随机产生食物位置,判断是否进食,增加蛇长
draw 画出蛇体状态及食物位置
snakes 蛇体及速度变化,运动方向的选择
gameover 判断游戏是否终止,显示分数
●init函数:
给结构体snake 赋初值:
s.x[0]=25; 蛇体第一格初始位置的横坐标
s.y[0]=20; 蛇体第一格初始位置的纵坐标
s.x[1]=24; 蛇体第二格初始位置的横坐标
s.y[1]=20; 蛇体第二格初始位置的纵坐标
s.x[2]=23; 蛇体第三格初始位置的横坐标
s.y[2]=20; 蛇体第三格初始位置的纵坐标
s.derection=1; 蛇运动的初始方向定义为1
s.food=0; 未吃食前食物的数量为0
s.size=3; 蛇的初始长度为3个格子
初始化绘图环境为600*600像素的区域;在(250.250)处显示游戏标题“贪吃蛇”;等待操作者提供鼠标信息以开始游戏;开始游戏后,用绿色边框显示活动区域。
调用的函数函数功能
initgraph 初始化绘图环境
outtextxy 在当前位置输出字符串“贪吃蛇”GetMouseMsg 获取一个鼠标信息;若无,则一直等待
cleardevice 清屏
wall 画出活动区域及边框
●food函数、food1函数:
调用函数rand 使计算机产生随机数,以获得食物的随机位置。
● draw 函数:
绘出蛇体及食物,蛇体边框绘制为亮蓝色,食物边框为红色;并在(0.0)处显示“score :__”(当前得分)。
● snakes 函数:
用s.food (进食判断标志)判断蛇是否吃到食物,吃到则蛇长(限制蛇长<40格)加一个格子,分数累加10,速度加快,并将s.food 重置为0;s,direction 判断蛇头格子移动的方向。
调用的函数 函数功能 rand 获得一个随机数
food1
判断蛇是否吃到食物,若吃到则return 1, 回到food 函数中的do-while 循环,再次随机生成食物位置;否则return 0,food 调用结束。
调用的函数 函数功能
setcolor 设置蛇体为蓝色&设置食物为红色 rectangle
根据数组s.x[40]、s.y[40]及s.size 画出蛇体; 根据s.foodx 、s.foody[及s.size 画出食物位置
outtextxy
在当前位置输出字符串“score :”显示得分
使用的结构体
Typedef struct ()snake ;snake s 。
gameover 函数
显示gameover 提示信息,并输出玩家所得分数,结束游戏进程。
五、测试及运行结果
snakes 函数 的功能
If 语句:判断蛇是否吃到食物(蛇长<40格),吃到则蛇长加一格,分数累加10,速度加快,
并将s.food (进食判断标志)重置为0 Switch 语句:根据case1、case 2、case3、case4
判断s.direction (WSAD=上下左右)
调用的函数 函数功能
setcolor
设置字符串“score :_”为白色
outtextxy
在当前位置输出字符串“score :_”“gameover ”显示得分
cleardevice
清屏 GetMouseMsg 获取一个鼠标信息:
若无,则一直等待;若有,则exit ,退出游戏。
六、成员分组:
程序构思及模块化、Main函数:宋佳文
图形函数、Init函数、wall函数、gameover函数、:马一菲张宏旭需求分析、Draw函数、Food函数、food1函数、snakes函数:阮梦宇、张莉。