日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于M5StickCPlus制作的兒時(shí)小游戲?彈珠迷宮

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

          作者:aramy 時(shí)間:2025-08-19 來(lái)源:EEPW 收藏


          1   硬件介紹

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

          1755574629658792.png

          2   設(shè)計(jì)思路

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

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

          image.png

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

          image.png

          image.png

          image.png

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

          image.png

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

          image.png

          image.png

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

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

          image.png

          image.png

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

          image.png

          image.png

          image.png

          image.png

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

          4   成果展示

          1755575062792949.png

          1755575071615208.png

          (本文來(lái)源于《EEPW》


          評(píng)論


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

          關(guān)閉