贪吃蛇总结报告Word下载.docx
- 文档编号:15755352
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:19
- 大小:25.75KB
贪吃蛇总结报告Word下载.docx
《贪吃蛇总结报告Word下载.docx》由会员分享,可在线阅读,更多相关《贪吃蛇总结报告Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
一、基本功能
1.提供一个图形模式下的界面。
2.开始游戏:
空格键或回车键;
退出游戏:
Esc键。
3.支持用键盘的方向键来控制蛇的移动,蛇可以向上、下、左、右四个方向移动。
4.当蛇头碰到食物时,食物被吃掉,蛇的身体增长一节。
5.初始场景内随即出现1个食物,当食物被吃掉时,再随机出现一个食物。
6.要有记分机制,没吃掉一个食物,增加相应的分数。
7.蛇碰到墙壁或是自己身体的一部分则游戏结束。
二、高级功能
1.暂停功能:
能随时通过按键来暂停游戏,再按一次则继续游戏。
2.速度调节功能:
当分数达到某个值后,对蛇的移动速度进行一定的提升,但会有一个速度上限。
3.奖励机制:
增加另一种的奖励食物,蛇吃到该种食物后蛇的身体减少一节(最短不能少于2节),但不增加分数。
该种食物的颜色要区别与普通食物的颜色。
奖励食物有时间限制,在一定时间内没有吃掉则会消失。
4.音效功能:
在游戏开始、吃掉食物、撞墙、撞到自己时提供不同的音效。
二程序结构
初始化图形模式
(1)程序结构说明
开始游戏
处理和实现游戏进行过程中
的各种事件和功能
结束游戏并关闭图形模式
(2)重要数据说明
基本思路:
首先设计主界面,主界面是一个密封的围墙,并在屏幕最右面留一部分用来显示分数、计时等其他信息。
围墙直接画一个矩形来表示,四面围成密闭的矩形来作为围墙。
接着是初始化蛇与食物的位置并将他们用图形表示出来。
然后进行一个循环,将蛇按当前的方向移动,并处理键盘的方向按键信息,调整蛇的移动方向。
蛇头如果碰到食物,则食物消失,蛇身增长一节,更新分数,并在另外的地方又随机出现食物;
如果碰到围墙或是自己的身体,则游戏结束,关闭图形系统。
1)游戏场景用一个二维坐标表示
移动方向利用定义16位制键值
如#defineLEFTox40b00
2)在函数中利用switch函数进行控制方向
3)利用结构体来表示蛇,定义两个二维数组分别表示蛇的身体的每一节,记录其横纵坐标
structSnake/*定义蛇的结构体*/
{
intx[N];
inty[N];
intnode;
intdirection;
/*蛇移动方向*/
intlife;
/*蛇的生命,0活着,1死亡*/
}snake;
利用两个一维数组来控制蛇本身的横纵坐标
4)食物的表示是一个结构体
structFood{
a)intx;
b)inty;
c)intdie;
/*判断是否出现食物*/
d)intbonus;
/*判断是否要出现食物的变量*/}
(3)函数清单
文件名
函数原型
函数功能
处理描述
draw.c
voidInit(void)
调用initgraph()切换到图形模式
voidDraw(void)
初始化贪吃蛇界面
调用rectangle()画围墙
voidClose(void)
关闭图形
调用closegraph()关闭图形
timer.c
voidinterrupt(*oldtimer)(void)
指向原来的时钟中断处理过程入口中的中断处理函数指针(句柄)
voidinterruptnewtimer(void)
新的时钟中断处理过程
调用(*oldtimer)()函数句柄,计时器自动加1
voidSetTimer(voidinterrupt(*IntProc)(void))
设置新的时钟中断处理过程
调用setvect()设置新的时钟中断处理过程
voidKillTimer()
恢复原有的时钟中断处理过程
调用setvect()恢复原有的时钟中断处理过程
play.c
voidGamePlay(void)
游戏实现的过程
如何画出蛇蛇如何移动蛇的身体怎样增加怎样吃食物怎样控制奖励
voidGameOver(void)
游戏结束后退出游戏
如果蛇死,则退出游戏
voidPrScore(void)
打印出游戏得分
在游戏界面的适当位置打印出游戏得分
voidIsBonus(void)
判断是否产生奖励
游戏的分数每增加100分,产生一个奖励
voidEatfood(void)
判断是否吃食物
判断蛇头的位置和食物的位置是否相同
voidEatbonus(void)
判断是否吃奖励
判断奖励的位置和蛇头的位置是否相同
voidNotbonus(void)
到时间后奖励没被吃掉则奖励消失
到达设定的时间后,若奖励没被吃则消失
(4)重要函数算法分析
整个贪吃蛇游戏由5个源文件组成,分别是snake.h、timer.c、draw.c、play.c、main.c、snake.h文件
Snake.h
该文件包括贪吃蛇程序设计中所需要的系统头文件、宏定义、外部全局变量申明和函数原型说明等组成,使构成的贪吃蛇的各个C源文件只需要引用该头文件即可。
#ifndefSNAKE_H
#defineSNAKE_H/*防止函数重定义*/
#defineN200
#include<
stdlib.h>
#include<
graphics.h>
DOS.H>
/*系统头文件*/
#defineLEFT0x4b00/*定义上下左右的键值*/
#defineRIGHT0x4d00
#defineDOWN0x5000
#defineUP0x4800
#defineESC0x011b
#defineENTER0x1c0d
#defineSPACE0x3920
#defineTIMER0x1c/*定义时钟中断号*/
unsignedintTimerCounter=0;
/*计时变量*/
inti,key;
intscore=0;
intgamespeed=50000000;
structFood/*定义食物和奖励的结构体*/
intx;
inty;
intdie;
intbonus;
/*判断是否要出现食物的变量*/
}food,good;
intnode;
voidInit(void);
/*图形驱动*/
voidClose(void);
/*图形结束*/
voidDraw(void);
/*开始画面*/
voidGameOver(void);
/*结束游戏*/
voidGamePlay(void);
/*游戏实现的过程*/
voidPrScore(void);
/*打印游戏得分*/
voidIsBonus(void);
/*判断是否产生奖励*/
voidEatfood(void);
/*判断是否吃食物*/
voidEatbonus(void);
/*判断是否吃奖励*/
voidNotbonus(void);
/*到时间后奖励没被吃掉则奖励消失*/
voidinterruptnewtimer(void);
/*指向原来的时钟中断处理过程入口中的中断处理函数指针(句柄)*/
voidinterruptnewtimer1(void);
/*新的时钟中断处理过程*/
voidSetTimer1(voidinterrupt(*IntProc)(void));
/*设置新的时钟中断处理过程*/
voidSetTimer(voidinterrupt(*IntProc)(void));
/*恢复原有的时钟中断处理过程*/
voidKillTimer();
/**/
#endif
源代码
Timer.c文件
时钟中断处理源程序文件,主要包括原先的时钟中断处理函数句柄、新的时钟中断处理函数、设置新的时钟中断处理过程、恢复原有的时钟中断处理过程的四个函数。
#include“snake.h”
UnsignedintTimerCounter=0;
/*计时变量,每秒钟增加18*/
/****************************************************/
*函数原型:
voidinterrupt(*oldtimer)(void);
*传入参数:
无
*返回值:
*函数功能:
指向原来的时钟中断处理过程入口的中断处理函数指针(句柄)
/*****************************************************************/
voidinterruptnewtimer(void);
新的时钟中断处理函数
/**********************************************************************/
(*oldtimer)();
TimerCounter++;
}
设置新的时钟中断处理函数
/********************************************************************/
oldtimer=getvect(TIMER);
disable();
setvect(TIMER,IntProc);
enable();
恢复原先的时钟中断处理函数
setvect(TIMER,oldtimer);
enabl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪吃 总结报告
![提示](https://static.bdocx.com/images/bang_tan.gif)