游宇凡 @ouuan · 王博文 @abmfy · 2023.6.6
游宇凡 @ouuan · 王博文 @abmfy · 2023.6.6
整体设计分为三大部分:传感器、游戏逻辑、画面输出。
游宇凡负责传感器和画面输出两部分,王博文负责游戏逻辑。
我们之间的接口非常简单,只有起跳、下蹲的信号,画面上每个元素的坐标信息,控制昼夜转换的信号,以及画面刷新信号、时钟信号等,大大降低了沟通成本。
output sprite_t sprite [RENDER_SLOTS],
output pos_t pos [RENDER_SLOTS],
output night_rate_t night_rate
传感器焊接后固定在面包板上,放在为健身环设计的绑腿里,由充电宝供电,通过无线模块连接到实验板,采用 UART 协议通信,得到加速度、角度等原始数据。
下蹲:很简单,和水平方向夹角够小就认为蹲下了。(抬腿太高会被误判,但正常玩的时候不误判即可。)
起跳:竖直方向上含 g 的加速度(向上为正)大于 −0.25g 就认为是在跳,这实际上是在检测玩家处于腾空状态(回忆一些初中物理)。尝试了各种花里胡哨的检测方法,效果都不如简单的阈值检测。由于灵敏度、延迟之类的问题,使用传感器时游戏难度较高,需要提供多条生命作为补偿。
画面输出采用双显存 + ring buffer,元素绘制基于原版游戏使用的 sprite 图(略有修改),压缩至只有 8 种颜色并裁剪掉不需要的部分从而能放进片内 RAM 而不损失分辨率。将画面背景和元素逐个写入显存,每个元素就是 sprite 中的一个区域。
难点:时序设计