1.项目介绍
完成任务3:使用姿态传感器完成体感游戏手柄,并设计完成一个游戏,例如俄罗斯方块、左右晃动手柄使方块左右移动
本项目通过UIflow对M5stickC Plus 进行图形化编程,实现简单体感游戏的制作
游戏内容:小球避障
玩家通过倾斜设备来控制小球的左右移动,躲避自下而上的障碍物,获取积分
软件流程图:
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 锂电池
-
拓展接口
-
集成无源蜂鸣器
-
可穿戴 & 可固定
-
开发平台 UIFlow, MicroPython, Arduino
规格参数
主控资源 参数 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.实现的功能及图片展示
游戏界面设计
陀螺仪控制小球移动
障碍物生成
碰撞判断和边界判断
游戏失败判定
长度记录
4.主要代码片段及说明
函数名称:GameConfig
功能:初始化游戏配置,显示历史长度和等级,以及达到的最远距离,
设计思路:配置标签显示所需内容,设置判断游戏结束的边界线,设置初始量,例如小球与障碍物的初始坐标,游戏开始时,使小球位于屏幕较下方,避免游戏结束过快,
以及长度计算定时器的启动,
函数名称:BallControl
功能:陀螺仪控制小球横向移动,实现小球和障碍物以及屏幕边界的阻挡效果
设计思路:获取x轴角度来判断左右倾斜,条件控制小球的横坐标改变,使小球可以按照需要的方向移动,条件判断小球与边界的关系,不可超出屏幕,然后判断小球与障碍物的相对关系,
若接触并处于障碍物上方则同步小球纵坐标实现阻挡效果,结束阻挡后自动更改小球纵坐标使小球自动缓慢向下移动到一定限度,加大游戏容错率,最后刷新小球的当前位置,
函数名称:BarrierSet
功能:设置障碍物
设计思路:需要一个40像素宽10像素高的区域便于小球躲避,同高度的其他位置为障碍物,具体实现为获取随机数x,使其分隔两个方块区域同时显示同时移动,
达到障碍物的效果,通过对其纵坐标的更改,可以实现障碍物的移动与刷新,结合长度计算可以达到循环流动的视觉效果
函数名称:FailJudge
功能:判断游戏是否结束
设计思路:因为上述GameConfig中存在边界线,只需判断小球最上方是否与边界线接触即可,若接触则视为游戏失败,显示游戏结束标签并把长度与最远距离比较,
若大于最远距离则使其刷新,最后将游戏进行标志位flag归零
函数名称:GameStart
功能:启动游戏,执行上述三个函数并刷新游戏结算界面
函数名称:GameStop
功能:结束游戏
设计思路:将小球与障碍物坐标重置,刷新界面显示,长度归零等待下一次游戏开始
函数名称:GameControl
功能:作为游戏主体操控程序
设计思路:首先通过GameConfig函数初始化游戏界面,通过对游戏进行标志位flag的判断,执行相应的游戏程序
功能:按键A用来开始和结束游戏,即更改游戏进行标志位flag,按键B用来调节游戏等级level,等级越高,小球和障碍物的运动速度会加快,与此同时长度的累计也会加快,加大难度
ps:2022.8.31对按键操作进行了更新,在游戏停止时关闭长度控制定时器,节省资源
功能:主体程序
5.遇到的难题和解决办法
游戏思路较为简单,没有遇到太大的困难,最开始在进行障碍物阻挡判断的时候出过问题,小球经过障碍物后会直接回到障碍物表面,后来缩小障碍物的判定区域后困难解决
6.未来的计划和建议
希望还原更多的经典小游戏,最好情况下可以做一个游戏合集,设计一个简单菜单界面实现各种游戏间的切换,实现迷你版游戏机,而且游戏界面的设计也可以更加美观,有条件可以通过联网加入手柄操控