【新UFUN试用体验】制作ufun开源小游戏机(一):LED指示灯
【新UFUN试用体验】制作ufun开源小游戏机(二):移植u8g2图形库驱动OLED屏
在前两节,我们顺利完成了ufun开源小游戏机的LED指示灯与OLED图形驱动的制作,在本节里,我们移植小游戏与按键驱动,游戏机就可以顺利运行了。
首先介绍本次移植的小游戏--SpaceTrash,一个轻量飞行射击小游戏。
space_trash.gif
在此感谢提供游戏源代码的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开发板中的四个触摸按键电路使用触摸按键芯片控制,直接使用四路数字输出按键的状态,极大地简化了我们的编程难度。
原理图.jpg
查看原理图,可知PC4PC5PB3PB4分别对应四个触摸按键的状态。
打开STM32CubeMX将四个IO口配置为浮空输入模式。
TIM截图20191016150740.jpg
最后,重新生成代码。
四个按键,我们分别配置为上、下、发射、暂停游戏,并添加相应的逻辑代码:
  1.   if(!pause_flag)
  2.                         st_Step(y, /* is_auto_fire */ 0, /* is_fire */ HAL_GPIO_ReadPin(KEY_1_GPIO_Port, KEY_1_Pin));
  3.     u8g2_FirstPage(&u8g2);
  4.     do
  5.     {
  6.       st_Draw(0);
  7.     } while( u8g2_NextPage(&u8g2) );
  8.                
  9.     if ( HAL_GPIO_ReadPin(KEY_0_GPIO_Port, KEY_0_Pin) ) {
  10.       y++;
  11.     }
  12.     else if ( HAL_GPIO_ReadPin(KEY_2_GPIO_Port, KEY_2_Pin) ) {
  13.       y--;
  14.     }
使用RGB-LED的蓝色通道指示游戏的暂停状态。逻辑代码如下:
  1.   if ( HAL_GPIO_ReadPin(KEY_3_GPIO_Port, KEY_3_Pin) ) {
  2.                         HAL_Delay(25);
  3.                         if ( HAL_GPIO_ReadPin(KEY_3_GPIO_Port, KEY_3_Pin) ) {
  4.                                 pause_flag = !pause_flag;
  5.                                 HAL_GPIO_WritePin(LED_0_GPIO_Port, LED_0_Pin, pause_flag);
  6.                                 while(HAL_GPIO_ReadPin(KEY_3_GPIO_Port, KEY_3_Pin))
  7.                                 {
  8.                                         u8g2_FirstPage(&u8g2);
  9.                                         do
  10.                                         {
  11.                                                 st_Draw(0);
  12.                                         } while( u8g2_NextPage(&u8g2) );
  13.                                 };
  14.                         }
  15.                 }
在主函数中,调用小游戏程序的入口函数u8g2_game_space_trash_entry(),即可进入游戏。
编译并烧写程序,使用ufun开发板制作的一台小游戏机制作完成,开玩!
游戏效果:
11.jpg 22.jpg
33.jpg 44.jpg
工程源码(附件):
ufun_Game_Machine.rar (1.62 MB, 下载次数: 58)
继续阅读本篇相关更多标签
举报
您需要登录后才可以评论 登录 立即注册
全部回复 4
  • 25 主题
  • 72 帖子
  • 1180 积分
身份:LV4 高级技术员
E币:792
  • 17 主题
  • 561 帖子
  • 3015 积分
身份:LV5 资深技术员
E币:2248
很有 骇客范 呀! 可惜游戏太少,谁能移植一些 主流游戏 的简化版呀? 绝对炫酷呀!
  • 7 主题
  • 80 帖子
  • 646 积分
身份:LV3 中级技术员
E币:433
  • 2 主题
  • 25 帖子
  • 2614 积分
身份:LV5 资深技术员
E币:994
回复楼主
您需要登录后才可以评论 登录 立即注册