4 游戏
4.1 功能介绍
4.1.1 设计思路
为了扩展开发板的应用,同时增加实验的难度和趣味性,我设计了一个类似赛车的小游戏。游戏中共有6条车道,同时有5个障碍物,用按键1和按键2控制赛车更换不同车道以避免与障碍物相撞,每通过了一个障碍物就得一分,游戏结束会显示得分和历史排名,并通过按键1和按键2重新开始游戏,按键3结束游戏返回目录。
4.1.2 成果展示
演示视频连接:游戏功能展示-CSDN直播
4.2 我的工作
4.2.1 编写游戏程序
•概述
因为在实现前面的功能时,已经配置好各项硬件设备,包括TFTLCD显示屏、MP3音乐播放等,所以这部分主要的工作结束结合前面的实验编写一个游戏程序。
•主要函数
函数原型:void LCD_Roadline(void)
描述:LCD上显示动态路线
函数原型:void block_creat(u8 block_cnt)
描述:随机产生障碍物
参数:障碍物编号
函数原型:void LCD_Block(u8 block_cnt)
描述:LCD上显示障碍物
参数:障碍物编号
函数原型:void LCD_Rider(void)
描述:LCD上显示车手
函数原型:u8 crash_check(void)
描述:检测是否有障碍物相撞,是返回0,否则返回1
函数原型:void game_init(void)
描述:游戏初始化,包括产生5个随机障碍物,并播放游戏开始音效
函数原型:void game_end()
描述:游戏结束,包括播放游戏结束音效,并显示得分和排名
函数原型:void gameplayer(void)
描述:游戏的主程序
相关变量:
u8 block_i[5] 全局变量,记录5个障碍物横坐标
u16 block_j[5]; 全局变量,记录5个障碍物纵坐标
u8 rider_cnt; 全局变量,记录车手所占车道
u8 rank[3]; 全局变量,记录排名最高3个分数
extern u8 flag1; 外部变量,按键3控制返回目录
extern u8 flag2; 外部变量,按键1和按键2控制,改变车手的车道
#define RIDER_SPEED 宏定义,车手是速度
#define BLOCK_SPEED 宏定义,障碍物移动的速度
•游戏主程序
void gameplayer()
{
game_init(); //游戏开始
while(crash_check()) //没有发生相撞
{
for(u32 i = 0; i < 1000000; i++); //每隔200ms重新显示
line_cnt += RIDER_SPEED;
LCD_Roadline();
LCD_Rider();
if(crash_check()) //车手车道改变时要检测是否相撞
{
for(u8 block_cnt = 0; block_cnt < 5; block_cnt++)
{
LCD_Fill(32+13*block_i[block_cnt],
block_j[block_cnt],43+13*block_i[block_cnt], block_j[block_cnt]+11, BLACK);
block_j[block_cnt] += BLOCK_SPEED; //障碍物移动
if(block_j[block_cnt] > 160 - BLOCK_SPEED) //障碍物移出了屏幕
{
grade++;
block_creat(block_cnt);
}
LCD_Block(block_cnt);
}
}
}
game_end(); //游戏结束
while(flag2 == 0 && flag1 == 1); //按键1和按键2重新开始游戏,按键3返回目录
}