新聞中心

EEPW首頁 > 業(yè)界動態(tài) > 基于M5StickCPlus制作的兒時小游戲?彈珠迷宮

基于M5StickCPlus制作的兒時小游戲?彈珠迷宮

作者:aramy 時間:2025-08-19 來源:EEPW 收藏


1   硬件介紹

M5StickC PLUS是M5StickC的大屏幕版本。由電子森林“2022 暑期在家一起練”活動推出的一個開發(fā)板。主控采用ESP32-PICO-D4 模組,具備藍(lán)牙4.2 與WIFI功能,小巧的機身內(nèi)部集成了豐富的硬件資源,如紅外、RTC、麥克風(fēng)、LED、IMU、按鍵、蜂鳴器、PMU等,在保留原有M5StickC 功能的基礎(chǔ)上加入了無源蜂鳴器,同時屏幕尺寸升級到1.14 寸、135*240 分辨率的TFT 屏幕,相較之前的0.96 寸屏幕增加18.7% 的顯示面積,電池容量達(dá)到120 mAh,接口同樣支持HAT 與Unit 系列產(chǎn)品。開發(fā)平臺支持UIFlow,MicroPython,Arduino。

1755574629658792.png

2   設(shè)計思路

思路來源于一個彈珠迷宮的游戲。小時候上學(xué),同桌拿來的尺子上帶著這樣的游戲。就是一個小鐵彈珠,尺子中間是鏤空的,通過控制尺子的角度移動彈珠通過迷宮。到現(xiàn)在當(dāng)時老師課上講的什么,全忘了,這個游戲還歷歷在目。M5StickC PLUS 中集成了IMU,正好可以用了檢測水平角度,通過重力控制小球通過迷宮。編程環(huán)境就選用Arduino。

image.png

3   設(shè)計實現(xiàn)

既然是個迷宮游戲,就要先有個迷宮。大概了解了一下,生成迷宮的算法主要有三種思路,其中最小生成樹算法又可以分為選點法(prim)和選邊法(kruskal):隨機深度優(yōu)先算法。遞歸分割算法(TODO)。隨機prim 最小生成樹算法。*kruskal 最小生成樹算法(使用并查集實現(xiàn))。生成的迷宮需要在屏幕上顯示,M5StickC PLUS 屏幕135*240 像素的。我這里使用15*15 的矩形塊作為迷宮的通道和障礙物。則迷宮的規(guī)模就是15*27。使用隨機深度優(yōu)先算法來生成迷宮。深度優(yōu)先算法過程核心是隨機選擇遍歷上下左右四個方向的順序,然后開始搜索。將整個迷宮看做一個【15*27】的矩陣,每個節(jié)點使用一位來存儲,每一行就使用兩個byte 來存儲。迷宮就使用一個無符號整型的數(shù)組來表示,長度為27。先使用python 來生成一個迷宮。

image.png

image.png

image.png

初始化各個組件:這里需要用到屏幕——用了展示、IMU ——用來感知開發(fā)板與地面的夾角、串口——用來調(diào)試程序。M5StickC Plus 提供了詳細(xì)的說明文檔,還提供了Arduino 相關(guān)的例程。參考著例程對系統(tǒng)進(jìn)行初始化。

image.png

初始化后,立即繪制迷宮圖案,整個迷宮僅僅需要繪制障礙物部分,在游戲過程中,障礙物時不會被覆蓋,所以只需要繪制一次即可。小球要求能夠在通道中順滑地滾動,這里使用一個4 像素的圓的圖案作為移動的小球。

這個游戲的輸入為重力。通過手控制M5StickC Plus開發(fā)板的水平角度,來控制小球移動。小球可以在水平方向上移動,移動方向就有2 個x、y。所以只需要讀取IMU 的accX 和accY 的值即可。

image.png

image.png

M5StickC Plus 中IMU 使用的是MPU6886。accX和accY 讀取到的值就是重力在水平面上的分量。通過三角函數(shù)可以計算出開發(fā)板當(dāng)前的傾斜角度。這里為了簡化模型,直接使用讀取到的accX 和accY 放大到整數(shù),作為控制小球移動的力量。將移動小球的速度控制在一個合理的區(qū)間內(nèi),對x、y 方向的力的大小由accX和accY 的值做范圍限制,限制在【?3 ,3】之間。當(dāng)偏轉(zhuǎn)角度較小時(為0 時),循環(huán)讀取IMU 的數(shù)據(jù),對屏幕不做處理。

image.png

image.png

當(dāng)感知到M5StickC Plus 水平面有偏轉(zhuǎn)了,即需要小球移動時,首先檢查是否在終點,在終點則游戲結(jié)束。不在終點就分別檢查X,Y 兩個方向上是否可以移動。優(yōu)先X 方向。若兩個方向均可移動,先在X 方向移動1 格,再在Y 方向移動一格。若只是單方向可以移動,則僅僅處理單方向的移動。小球每次移動1 個格子,在屏幕上的新位置繪制小球,然后在原來的位置使用背景色繪制一遍小球,就實現(xiàn)了小球移動動畫的繪制。這樣每次就只需要重新繪制小球所在新舊位置的圓即可,大大提升了繪制的速度,使得界面流暢。不同的移動力量對應(yīng)著小球最大能移動的步數(shù)。最大力量對應(yīng)著最多能移動3 格。

image.png

image.png

image.png

image.png

游戲開局,小球在左上方的入口,通過控制M5StickCPlus的水平角度,慢慢滴讓小球移動到右下角的出口。實現(xiàn)了小時游戲的感覺。

4   成果展示

1755575062792949.png

1755575071615208.png

(本文來源于《EEPW》


關(guān)鍵詞: 202508

評論


技術(shù)專區(qū)

關(guān)閉