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