设计报告书
一、设计题目:贪吃蛇游戏
二、设计要求:
联通华盛营销管理系统
在LCD屏幕上模拟贪吃蛇游戏。
1. 基本要求
(1)起初贪吃蛇蛇身为1节,贪吃蛇按照原来的方向行进直到通过按键改变贪吃蛇的行进方向。
(2)在教学实验箱上的LCD六个为什么
上绘制贪吃蛇,在他们的四周绘制四面墙,蛇身在行进的过程中不能碰到墙壁,碰到则游戏结束,提示是否重新开始,按确认键重新开始。若能保持不碰墙超过1分钟则完成游戏,提示游戏是否重新开始,按确认键则重新开始。 2. 扩展内容
(1)实现贪吃蛇吃食物,食物跟1节蛇身一样大小,其位置随机产生。在行进的过程中遇到产生的食物会将食物吃掉,蛇身便长一节继续行进。当蛇身长到6节便提示游戏完成,屏幕显示祝贺,同时整个过程中8段数码管会显示蛇身的长度。 (2)可用键盘按键选择游戏难度,难度通过设定蛇身的行进速度和游戏完成时蛇身的长度确定。 三、设计思路:
(1)验所需硬件:Embest仿真器,Embest S3CEV40实验箱,PC机。
(2)本次实验所需用到的硬件模块:①LCD(用来显示蛇的移动以及吃食物、撞墙等过程);②键盘(用来控制贪吃蛇的上下左右移动以及游戏中的难度,蛇游动的快慢和蛇身体长度的设定);③LED七段数码管(用于显示现阶段蛇身体的节数,初始为一节)。
(3)因为本次实验要使LCD显示,并通过键盘产生中断控制贪吃蛇的运动状态和速度,所以本次实验主要同到的.c文件主要是keyboard.c、lcd.c、8led.c和main.c,主要在这几个文件上进行编程。本次实验的关键是如何在LCD中显示蛇并且需要实现蛇的移动,以及蛇吃
到食物之后如何实现蛇身增长一段以及如何用键盘产生中断控制蛇的移动方向、速度以及蛇身节数的上限值。
四、软件实现:
本次设计主要是考察我们对于LCD模块以及键盘中断的认识程度,刚开始的设想是本次贪吃蛇的设计需要创建两个流程任务,一个是键盘按下控制蛇的移动另一个是键盘没有按下贪吃蛇按照初始状态移动。任务流程和任务状态切换如下图。具体的任务流程和任务所要完成的功能如下: 在系统启动后,同时创建两个任务,任务一和任务二。任务一主要功能是等待键盘消息,有键盘消息的时候判断是什么键盘,并对相应的变量重新赋值。任务二主要功能是控制并
在屏幕上显示蛇的移动,并完成对游戏等级和其他相关参数的记录和显示。任务一为主任务,在创建任务的时候,赋给它的优先级别比任务二高,所以任务一优先运行,任务二处于就绪状态,因为任务一主要是等待键盘消息,在无键盘消息的时候,任务一被挂起,这时候任务二进入运行状态。这就是本次设计的主要框架。
程序主流程图:
主任务流程图:
——主要功能是等待键盘消息,有键盘消息的时候判断是那个键按下来控制方向、难度、重启并对相应的变量重新赋值。
任务二流程图:
——主要功能是控制并在屏幕上显示蛇的移动,并完判定蛇是否撞墙或者撞到自身和其他相关参数的记录和显示。
五、模块功能:
(1)主函数以及初始化:
void Main(void)
{
聂鲁达 sys_init(); /* Initial 44B0X's Interrupt,Port and UART */
_Link(); /* Print Misc info */
Test_Keyboard(); /*初始化*/
Lcd_Test();
mysnake.life=0; /*活着*/
mysnake.direction=1; /*方向往右*/
mysnake.x[0]=100;mysnake.y[0]=100; /*蛇头坐标*/
mysnake.x[1]=110;mysnake.y[1]=100;
de=2; /*蛇身初始为两节*/
myfood.x=50; /*食物初始坐标*/
myfood.y=150;
DrawK(); /*开始画面画围墙生成小蛇*/
GamePlay(); /*玩游戏具体过程*/
}
(2)子程序画围墙:
void DrawK(void)
{
Lcd_Draw_Box(10,10,310,230,GREEN); /*画围墙*/
福建省公务员应急管理网络培训平台
}
蚂蚁文苑(3)游戏过程:
void GamePlay(void)
{
while(1)
{
if(reset==1) /*设定重启按键*/
{
Lcd_Test();
mysnake.life=0; /*活着*/
mysnake.direction=1; /*方向往右*/
mysnake.x[0]=100;mysnake.y[0]=100; /*蛇头*/
mysnake.x[1]=110;mysnake.y[1]=100;
de=2;
myfood.x=50;
myfood.y=150;
reset=0;
flag=0;
DrawK(); /*开始画面画围墙生成小蛇*/
}
while(!flag) /*在没有按键的情况下,蛇自己移动身体*/