硬件课程设计:基于STM32的多功能播放器之小游戏

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返回目录
}

工程源码: 硬件课程设计:基于STM32的多功能播放器-单片机文档类资源-CSDN下载

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

观察者555

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值