版权声明:希望能帮助你,也希望你帮助别人,哪怕一点点 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地址