600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > c语言程序设计贪吃蛇需求分析 c语言贪吃蛇课程设计报告.docx

c语言程序设计贪吃蛇需求分析 c语言贪吃蛇课程设计报告.docx

时间:2022-09-26 08:49:00

相关推荐

c语言程序设计贪吃蛇需求分析 c语言贪吃蛇课程设计报告.docx

C?语言课程设计报告

C语言课程设计报告

专业

学生姓名

班级

学号

完成日期

C?语言课程设计报告

一、游戏规则需求

1、?在打开程序后,出现选择界面,里面包含难度选择,其中难度选择能够使程序出现相

应的游戏难度。

2、?开始游戏后,W?A?S?D?键控制贪吃蛇的移动方向。

3、?当贪吃蛇向一个方向移动时,不能立刻向反方向移动。

4、?贪吃蛇撞到的自己的身体或者撞到墙时,游戏结束,并输出“GAME?OVER!”。

5、?贪吃蛇吃到一个食物后,出现白色闪烁一次,身体随之增加一个单位长度。

二、所需数据结构分析

1、所需函数模块

void?begin();//登陆界面

void?start();//鼠标移动事件

void?init();//?初始化游戏

void?setfoodcrd();??//?设置食物要出现的坐标

void?showfood();//?在相应的坐标画出食物

void?snakemove();//?移动蛇,实际就是改变蛇各节的坐标

void?judgeslod();//?判断蛇是否撞墙或者撞到自己

void?judgesef();//?判断蛇是否吃到食物了

void?showsnake();//?在屏幕上画出蛇

void?changeskdir();?//?接受用户输入,改变蛇的前进方向

void?gameover();//?游戏结束

2、蛇及食物数据结构

typedef?struct??//?定义一个结构体表示坐标

{

int?x;

int?y;

}COOR;

struct?FOOD//?定义结构体,来存储食物的相关信息

{COOR?crd;??//?食物出现的坐标

int?flag;//?食物的状态,1?表示食物还没被吃,0?表示食物被吃了

C?语言课程设计报告

}food;

struct?SNAKE//?定义结构体,来存储蛇的相关信息

{

COOR?crd[SIZEMAX];??//?保存蛇的每个结数的坐标,最多有?100?节

int?node;//?保存蛇当前节数

DIR?dir;//?当前蛇行进的方向

}snake;

3、?游戏流程图

开始

图形界面初始化

进入游戏难度选择界面

进入游戏界面

从键盘读入操作信息

各类消息判断并作相应的处理

蛇是否存活

关闭游戏,结束

三、所需核心算法分析

1.主函数

C?语言课程设计报告

void?main()//主函数

{

initgraph(640,?640);

loadimage(&img[0],?"denglu3.jpg");//导入图片

loadimage(&img[1],?"a1.jpg");

loadimage(&img[2],?"a2.jpg");

loadimage(&img[3],?"b1.jpg");

loadimage(&img[4],?"b2.jpg");

loadimage(&img[5],?"c1.jpg");

loadimage(&img[6],?"c2.jpg");

loadimage(&img[7],?"beijing.jpg");

begin();//登陆界面

init();//?初始化游戏

while(1)

{

while(!kbhit())

{

if?(!food.flag)

{

setfoodcrd();

}

showfood();

judgeslod();

judgesef();

snakemove();

Sleep(speed);

}

changeskdir();

}

C?语言课程设计报告

}

2.图形初始化

void?init()//?初始化游戏

{

putimage(0,?0,?&img[7]);

setbkcolor(RGB(124,107,7));

food.flag?=?0;

snake.crd[0].x?=?80+?SNAKELEN;

snake.crd[0].y?=?155;

snake.crd[1].x?=?80;

snake.crd[1].y?=?155;

snake.node?=?2;

snake.dir?=?right;

}

3.读入操作信息的处理

void?snakemove()

{

int?i;

for?(i=snake.node;?i>0;?i--)

{

snake.crd[i].x?=?snake.crd[i-1].x;

snake.crd[i].y?=?snake.crd[i-1].y;

}

switch?(snake.dir)

{

case?up:

snake.crd[0].y?-=?SNAKELEN;

break;

case?down:

snake.crd[0].y?+=?SNAKELEN;

break;

case?left:

sna

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。