这是教程的最后一篇了,完成之前的任务,到这里一切都应当水到渠成,没什么好讲的了。结尾可能略显仓储,未尽之处,自己看代码吧,看不懂的地方可以在下边评论。
修改BGM
之前已经实现了根据不同的按键切换不同的BGM的功能。接下来把切换BGM的代码放到加命、减命、加分、升级的函数中。
//main.c
//加命并显示
void add_life(void)
{BGM = LIFE_BGM;BGM_change_flg = 1;//修改BGMadd_life_cnt++;life++;showNumber(56,2,life,DEC,8,FONT_16_EN);
}
//难度提升并显示
void level_up(void)
{BGM = LEVEL_BGM;BGM_change_flg = 1;//修改BGMlevel_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;//修改BGMscore += level;showNumber(56,6,score,DEC,8,FONT_16_EN);
}
//减命并显示
void sub_life(void)
{BGM = BAD_BGM;BGM_change_flg = 1;//修改BGMlife--;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地址