STM32掌机教程9,完成掌机

版权声明:希望能帮助你,也希望你帮助别人,哪怕一点点 https://blog.csdn.net/geek_monkey/article/details/87283747

  这是教程的最后一篇了,完成之前的任务,到这里一切都应当水到渠成,没什么好讲的了。结尾可能略显仓储,未尽之处,自己看代码吧,看不懂的地方可以在下边评论。

修改BGM

  之前已经实现了根据不同的按键切换不同的BGM的功能。接下来把切换BGM的代码放到加命、减命、加分、升级的函数中。

//main.c
//加命并显示
void add_life(void)
{
	BGM = LIFE_BGM;
	BGM_change_flg = 1;//修改BGM
	add_life_cnt++;
	life++;
	showNumber(56,2,life,DEC,8,FONT_16_EN);
}
//难度提升并显示
void level_up(void)
{
	BGM = LEVEL_BGM;
	BGM_change_flg = 1;//修改BGM
	level_cnt = 0;
	level++;
	if(level>14)//默认14关
		level = 14;
	TIM_SetAutoreload(TIM2,level1_time_arr[level]);
	showNumber(56,4,level,DEC,8,FONT_16_EN);
}
//按照level加分并显示
void add_score(void)
{
	BGM = GOOD_BGM;
	BGM_change_flg = 1;//修改BGM
	score += level;
	showNumber(56,6,score,DEC,8,FONT_16_EN);
}
//减命并显示
void sub_life(void)
{
	BGM = BAD_BGM;
	BGM_change_flg = 1;//修改BGM
	life--;
	showNumber(56,2,life,DEC,8,FONT_16_EN);			
}

  把主函数恢复到没加音乐,但是已经实现了打地鼠全部功能的状态

初始化修改

  把原先去掉的初始化代码拿回来,并且写两个新的函数永夜设置默认参数。

void set_default(void)
{
	life = LIFE_NUM;
	mouse = 0;
	score = 0;
	level = 1;
	next_flg = 1;
	timeout_flg = 0;
	level_cnt = 0;         
	add_life_cnt = 1;     
}
//设置音量与背景
void set_BGM(u8 volum,u8 bgm_temp)
{
	BGM_volum = volum;
	BGM = bgm_temp;
}

主函数中的初始化代码如下

	set_BGM(6,BEGIN_BGM);  //上电音乐与BGM 音量 1最大,10听不到
	TIM5_Int_Init(9,7199);   //上电先播放背景音乐
	TIM3_PWM_Init(0xfffe,8); //蜂鸣器频率定时器初始化
	LED_Init();
	KEY_Init();
	delay_init();
	initIIC();
	initOLED();
	set_default();
	TIM4_Seed_Init();
	FirstScreen();      //显示完屏幕内容以后,再开启打地鼠计时用的定时器
	show_opt();
	
	TIM2_Int_Init(level1_time_arr[level_cnt],7199);

复活操作

  等到没命以后,我想让按下PAUSE_PRES按键复活,参数都恢复初始化状态。

if(life)//还有命
		{
...
		}
		else//没命了
		{
			AllLED_OFF();   //关掉所有的灯
			BGM = BEGIN_BGM;
			if(PAUSE_PRES == KEY_Scan(0))//重生
			{
				BGM = LIFE_BGM;
				set_default();
				show_opt();
				TIM_SetAutoreload(TIM2,level1_time_arr[level]);
				TIM_SetCounter(TIM2, 0);//定时器清零
			}		
		}	

  然后检查代码,添加一些注释,去掉一些没用的代码,算是大功告成了。

其它想法

到目前为止,我只是实现了最基本的打地鼠的功能。一开始设想的功能,就作为课后作业吧:
1、带提示功能的电子琴
2、点唱机,增加一些自己喜欢的歌曲
3、优化打地鼠,改成计时模式,允许多个地鼠出现,比单位时间内谁打的地鼠多
4、历史最高分功能
5、太鼓达人
6、追赶时光
7、QQ炫舞(这个是不是太膨胀了,哈哈哈)
8、其它可以用屏幕打的小游戏,比如坦克车,弹球,贪吃蛇,俄罗斯方块
9、借助USB库,把手柄与电脑相连接。
至此,STM32打地鼠掌机的系列教程都写完了。这是最终代码
最终的代码与PCB源文件都放在git了。后续如果有更新,看git吧git地址

猜你喜欢

转载自blog.csdn.net/geek_monkey/article/details/87283747