最近见网友们对跑酷类小游戏的兴趣正浓,便不免也想来凑个热闹,以前它是在单色OLED屏上实现的,于是便用手头的单色屏看来了一下效果,见图1和图2所示。 图1 跳跃障碍中
图2 游戏结束
可能是屏幕的分辨率相对较小吧,游戏的界面显示的不太完整,于是将显示屏换成了手头分辨率相对高一点的双色OLED屏。 更换后,其显示效果如图3和图4所示,是不是效果明显提高了许多? 图3 跳跃障碍中
图4 游戏结束
为了游戏在整体上更完整,又使用汉字显示函数为游戏添加了封面效果。 提取字模所用的工具软件为PCtoLCD2002,见图5所示,完成后的界面如图6所示。 图5 提取字模
图6 游戏封面
兴之所至,不免觉得在哪些地方还是尚有不足的地方,在哪里? 有了色彩,有了游戏情节,还缺啥? 背景音乐呗! 要添加背景音乐这不难,咱有MP3播放模块呀! 只是缺少,合适的游戏类背景音乐,那就只好用歌曲来临时将就吧。 要添加背景音乐,完全不影响游戏的流畅性,因为MP3播放模块是靠串行通讯的指令来控制,MP3音乐的播放与游戏的运行完全是并行的,可谓是井水、河水各不相犯。 CH32V103有3个串口可供使用,选哪个来用呢? 从方便性来讲,还是使用串口1比较方便,因为串口1原本就是来供调试之用,既能轻松地输出字符串,也能方便地发送字节数据。 MP3播放模块的引脚排列如图7所示,其实除了电源引脚之外,真正要用的引脚是在有限。 SPK_1和SPK_2是连接喇叭的,RX是用来接收串口指令的,BUSY是指示MP3模块是否处于播放状态,而IO_2是触发播放下一首歌曲。 图7 模块引脚排列
其实,但从配置背景音乐的角度讲,只需1个I/O口即可,也就是在游戏开始后触发音乐播放。 而之所以选用串口控制是因为,它比按键控制模式在功能上更丰富,有利于游戏功能的进一步扩展。 例如,在串口控制模式下,当游戏结束时可以通过指令关闭背景音乐;当游戏通关后,可以通过指令更好背景音乐等,这是键控模式所不能企及的。 实现游戏功能的主程序为: - int main(void)
- {
- uint8_t i;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
- Delay_Init();
- //USART1 A.9 A.10
- USART_Printf_Init(9600);
- TIM3_Int_Init(359, 199);
- TIM_Cmd(TIM3, DISABLE); //TIM3
- Touch_Key_Init();
- OLED_Init(); //初始化OLED
- OLED_Clear();
- //显示游戏名称
- OLED_ShowCHinese(5,1,1);
- OLED_ShowCHinese(21,1,0);
- OLED_ShowCHinese(37,1,2);
- OLED_ShowCHinese(53,1,3);
- OLED_ShowCHinese(69,1,4);
- OLED_ShowCHinese(85,1,5);
- //音量设置
- setVolume(26);
- for(i=0;i<10;i++)
- {
- while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
- USART_SendData(USART1, cmd6[i]);
- }
- Delay_Ms(200);
- //歌曲设置
- playn(2);
- for(i=0;i<10;i++)
- {
- while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
- USART_SendData(USART1, cmd3[i]);
- }
- Delay_Ms(1000);
- while(1)
- {
- KeyScan();
- if(start_flag == 1)
- {
- OLED_ShowLine(0, 3, 128, data_ob);
- OLED_ShowPeople(30, start_jump, 3, start_jump_flag);
- show_num();
- game_over();
- }
- else if(start_flag == 2)
- {
- OLED_ShowString(24,1,"GAME OVER",9);
- start_flag = 0;
- for(i=0;i<10;i++)
- {
- while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
- USART_SendData(USART1, cmd5[i]);
- }
- }
- }
- }
复制代码 完成游戏功能的整体构成如图8所示,所使用的存储卡则是512MB的T卡。 图8 游戏封面
既然双色OLED屏能提升游戏的效果,那换做彩色屏呢,是不是又能产生出新的契机呢?有时间的话,不妨一试。
|