基于M5stickC Plus实现体感游戏——小球避障
基于M5stickC Plus平台通过UIFlow实现体感游戏——小球避障
标签
游戏制作
2022暑假在家练
M5StickC Plus
zhenghy
更新2022-09-07
哈尔滨工程大学
1260

1.项目介绍

完成任务3:使用姿态传感器完成体感游戏手柄,并设计完成一个游戏,例如俄罗斯方块、左右晃动手柄使方块左右移动

本项目通过UIflow对M5stickC Plus 进行图形化编程,实现简单体感游戏的制作

游戏内容:小球避障

玩家通过倾斜设备来控制小球的左右移动,躲避自下而上的障碍物,获取积分

软件流程图:
FoAM76ygvDQ5g3p4C4S0IuLFty0r

2.简单的硬件介绍

平台:M5stickC Plus

uiFlow快速上手:

1.安装驱动https://ftdichip.com/drivers/vcp-drivers/

2.下载M5buner https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/software/M5Burner.zip

3.解压后打开M5Buner.exe,选择合适的版本下载烧录UIflow固件

4.点击configuration设为usb模式

5.下载离线版UIflow    https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/software/UIFlow-Desktop-IDE.zip

   web版需要API KEY进行配对(注意联网)

6.解压后打开,选择合适的端口进行连接

7.配置完成

ps:也可采用vscode的m5插件使用microPython进行编程,具体可参考m5的官方资料

产品特性:

  • 基于 ESP32开发,支持WiFi、蓝牙

  • 内置3轴加速计与3轴陀螺仪

  • 内置Red LED

  • 集成红外发射管

  • 内置RTC

  • 集成麦克风

  • 用户按键, LCD(1.14 寸), 电源/复位按键

  • 120 mAh 锂电池

  • 拓展接口

  • 集成无源蜂鸣器

  • 可穿戴 & 可固定

  • 开发平台 UIFlowMicroPythonArduino

    规格参数

    主控资源 参数
    ESP32 240MHz dual core, 600 DMIPS, 520KB SRAM, Wi-Fi, dual mode Bluetooth
    Flash闪存 4MB Flash
    输入电压 5V @ 500mA
    接口 TypeC x 1, GROVE(I2C+I/0+UART) x 1
    LCD屏幕 1.14 inch, 135*240 Colorful TFT LCD, ST7789v2
    麦克风 SPM1423
    按键 自定义按键 x 2
    LED 红色 LED x 1
    RTC BM8563
    PMU AXP192
    蜂鸣器 板载蜂鸣器
    IR Infrared transmission
    MEMS MPU6886
    天线 2.4G 3D天线
    外接引脚 G0, G25/G26, G36, G32, G33
    电池 120 mAh @ 3.7V, inside vb
    工作温度 32°F to 104°F ( 0°C to 40°C )
    净重 16g
    毛重 21g
    产品尺寸 48.2*25.5*13.7mm
    包装尺寸 65*25*15mm
    外壳材质

    Plastic ( PC )

     

3.实现的功能及图片展示

游戏界面设计

陀螺仪控制小球移动

障碍物生成

碰撞判断和边界判断

游戏失败判定

长度记录

FhfARH5gG7I1DO-ASFvxWp6M6O8OFipwktjW1WIIABsXcJQINSVLLPiX

4.主要代码片段及说明

FqRdr-rnq8QroCOCM54k8Yi145-0

函数名称:GameConfig

功能:初始化游戏配置,显示历史长度和等级,以及达到的最远距离,

设计思路:配置标签显示所需内容,设置判断游戏结束的边界线,设置初始量,例如小球与障碍物的初始坐标,游戏开始时,使小球位于屏幕较下方,避免游戏结束过快,

                  以及长度计算定时器的启动,

FoU-XnOvkQsNvMwdlfUuP-GvVRw5

函数名称:BallControl

功能:陀螺仪控制小球横向移动,实现小球和障碍物以及屏幕边界的阻挡效果

设计思路:获取x轴角度来判断左右倾斜,条件控制小球的横坐标改变,使小球可以按照需要的方向移动,条件判断小球与边界的关系,不可超出屏幕,然后判断小球与障碍物的相对关系,

                  若接触并处于障碍物上方则同步小球纵坐标实现阻挡效果,结束阻挡后自动更改小球纵坐标使小球自动缓慢向下移动到一定限度,加大游戏容错率,最后刷新小球的当前位置,

FuLwJJkeLYu7GPl2veOgwNs2XiDu

函数名称:BarrierSet

功能:设置障碍物

设计思路:需要一个40像素宽10像素高的区域便于小球躲避,同高度的其他位置为障碍物,具体实现为获取随机数x,使其分隔两个方块区域同时显示同时移动,

                  达到障碍物的效果,通过对其纵坐标的更改,可以实现障碍物的移动与刷新,结合长度计算可以达到循环流动的视觉效果

Fk1bJRXoDY3asCCU4hK9xc7V3PTx

函数名称:FailJudge

功能:判断游戏是否结束

设计思路:因为上述GameConfig中存在边界线,只需判断小球最上方是否与边界线接触即可,若接触则视为游戏失败,显示游戏结束标签并把长度与最远距离比较,

                  若大于最远距离则使其刷新,最后将游戏进行标志位flag归零

Fp4Po8WU4zWBUpxuS4sxbiwHqGJc

函数名称:GameStart

功能:启动游戏,执行上述三个函数并刷新游戏结算界面

FjukHltt5ugP3bao4zjofGHWIem6

函数名称:GameStop

功能:结束游戏

设计思路:将小球与障碍物坐标重置,刷新界面显示,长度归零等待下一次游戏开始

Fo0j2mjrrWrRTkv0NtoJTlkfq-sU

函数名称:GameControl

功能:作为游戏主体操控程序

设计思路:首先通过GameConfig函数初始化游戏界面,通过对游戏进行标志位flag的判断,执行相应的游戏程序

Fn_cGv5JvbMHdptCACdff6fDmmb_

功能:按键A用来开始和结束游戏,即更改游戏进行标志位flag,按键B用来调节游戏等级level,等级越高,小球和障碍物的运动速度会加快,与此同时长度的累计也会加快,加大难度

ps:2022.8.31对按键操作进行了更新,在游戏停止时关闭长度控制定时器,节省资源

Frs_urBB3b89yEthpDVQfznJD_b4

功能:主体程序

5.遇到的难题和解决办法

游戏思路较为简单,没有遇到太大的困难,最开始在进行障碍物阻挡判断的时候出过问题,小球经过障碍物后会直接回到障碍物表面,后来缩小障碍物的判定区域后困难解决

6.未来的计划和建议

希望还原更多的经典小游戏,最好情况下可以做一个游戏合集,设计一个简单菜单界面实现各种游戏间的切换,实现迷你版游戏机,而且游戏界面的设计也可以更加美观,有条件可以通过联网加入手柄操控

附件下载
ball.py
躲避障碍.m5f
团队介绍
哈尔滨工程大学
团队成员
zhenghy
哈尔滨工程大学2021级本科生
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号