【新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
最后,重新生成代码。
四个按键,我们分别配置为上、下、发射、暂停游戏,并添加相应的逻辑代码:
  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开发板制作的一台小游戏机制作完成,开玩!
    游戏效果:
    11.jpg 22.jpg
    33.jpg 44.jpg
    工程源码(附件):
    ufun_Game_Machine.rar (1.62 MB, 下载次数: 59)
    继续阅读本篇相关更多标签
    举报
    您需要登录后才可以评论 登录 立即注册
    全部回复 4
    • 25 主题
    • 72 帖子
    • 1180 积分
    身份:LV4 高级技术员
    E币:792
    • 20 主题
    • 574 帖子
    • 3135 积分
    身份:LV5 资深技术员
    E币:2272
    很有 骇客范 呀! 可惜游戏太少,谁能移植一些 主流游戏 的简化版呀? 绝对炫酷呀!
    • 7 主题
    • 80 帖子
    • 646 积分
    身份:LV3 中级技术员
    E币:433
    • 2 主题
    • 25 帖子
    • 2614 积分
    身份:LV5 资深技术员
    E币:994
    回复楼主
    您需要登录后才可以评论 登录 立即注册