【新UFUN试用体验】制作ufun开源小游戏机(二):移植u8g2图形库驱动OLED屏
在前两节,我们顺利完成了ufun开源小游戏机的LED指示灯与OLED图形驱动的制作,在本节里,我们移植小游戏与按键驱动,游戏机就可以顺利运行了。
首先介绍本次移植的小游戏--SpaceTrash,一个轻量飞行射击小游戏。
在此感谢提供游戏源代码的github用户“wuhanstudio”,他为RT-Thread移植了u8g2图形库,我在examples里面发现了这个小游戏源码。地址如下:
https://github.com/wuhanstudio/rt-u8g2/tree/master/examples/games
我们将SpaceTrash.cpp文件保存下来,重命名为SpaceTrash.c。
移植的主要步骤为
1、将原文件中的C++版u8g2接口替换为C接口;
2、将原文件中创建RT-Thread线程相关代码去掉;
3、为角色控制提供按键驱动;
4、添加自定义功能。
接口替换部分,只要遵循相似的函数命名即可很方便的将C++接口替换为C接口。
接下来我们主要讲解按键驱动的创建。
ufun开发板中的四个触摸按键电路使用触摸按键芯片控制,直接使用四路数字输出按键的状态,极大地简化了我们的编程难度。
查看原理图,可知PC4、PC5、PB3、PB4分别对应四个触摸按键的状态。
打开STM32CubeMX,将四个IO口配置为浮空输入模式。
最后,重新生成代码。
四个按键,我们分别配置为上、下、发射、暂停游戏,并添加相应的逻辑代码:
- if(!pause_flag)
- st_Step(y, /* is_auto_fire */ 0, /* is_fire */ HAL_GPIO_ReadPin(KEY_1_GPIO_Port, KEY_1_Pin));
- u8g2_FirstPage(&u8g2);
- do
- {
- st_Draw(0);
- } while( u8g2_NextPage(&u8g2) );
- if ( HAL_GPIO_ReadPin(KEY_0_GPIO_Port, KEY_0_Pin) ) {
- y++;
- }
- else if ( HAL_GPIO_ReadPin(KEY_2_GPIO_Port, KEY_2_Pin) ) {
- y--;
- }
使用RGB-LED的蓝色通道指示游戏的暂停状态。逻辑代码如下:
- if ( HAL_GPIO_ReadPin(KEY_3_GPIO_Port, KEY_3_Pin) ) {
- HAL_Delay(25);
- if ( HAL_GPIO_ReadPin(KEY_3_GPIO_Port, KEY_3_Pin) ) {
- pause_flag = !pause_flag;
- HAL_GPIO_WritePin(LED_0_GPIO_Port, LED_0_Pin, pause_flag);
- while(HAL_GPIO_ReadPin(KEY_3_GPIO_Port, KEY_3_Pin))
- {
- u8g2_FirstPage(&u8g2);
- do
- {
- st_Draw(0);
- } while( u8g2_NextPage(&u8g2) );
- };
- }
- }
在主函数中,调用小游戏程序的入口函数u8g2_game_space_trash_entry(),即可进入游戏。
编译并烧写程序,使用ufun开发板制作的一台小游戏机制作完成,开玩!
游戏效果:
工程源码(附件):
继续阅读本篇相关更多标签
全部回复 4