日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于RT-Thread实现的小游戏(贪吃蛇、俄罗斯方块)

發布時間:2024/10/14 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于RT-Thread实现的小游戏(贪吃蛇、俄罗斯方块) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:本實現基于stm32芯片,移植RT_Thread Nano系統源碼,實現兩個小游戲(貪吃蛇/俄羅斯方塊)。本實驗提供完整的IAR工程源碼并且有很多注釋,是一個不錯的參考例程。關鍵知識點:OLED驅動,ADC采樣,游戲邏輯設計,RT_Thread移植


《點擊下載源碼》

1.硬件設計

0.96寸OLED

搖桿

stm32f103c8t6 (64k-ROM 20k-RAM)

以上材料,照著圖片搜索都能在TB買到。

2.設計思路:

運用RT-Thread系統需要結合自己的項目需求,將RT-Thread的優點發揮出來,不僅要實現需求,還要讓代碼具有可擴展性、移植性。

我們利用一個定時器進行周期地檢測搖桿的狀態,我們要保證任務能夠快速響應搖桿。

作為游戲機而言,其中包含了很多種小游戲,如果一種游戲當作一個線程,那么某一個時刻只會運行一個游戲,也就是一個游戲線程;創建那么多個線程不就沒有意義了嗎?確實最好的方式是使用前后臺的形式實現,但這里為了讓代碼能夠層次分明,可擴展性,一個小游戲就是一個線程,系統只需要運行當前用戶打開的小游戲的線程,其他的線程掛起,不參與調度。

回到剛才搖桿的問題,我們要保證每個線程都能快速地獲取搖桿狀態,當搖桿的狀態變化時產生出一個搖桿事件,線程等待該事件,當事件到來時,調用搖桿驅動的接口,主動獲取搖桿信息。

按鍵也是同樣的道理,利用一個定時器周期地檢測按鍵的狀態,當有按鍵發生變化時產出事件,線程等待事件發生時,主動獲取按鍵信息。

接下來說一下關于顯示的問題,通常的做法就是利用定時器,周期地將顯存的數據同步到屏幕了,但是這樣做有缺陷,但用戶沒有操作界面變化時,這時候的刷新時沒有必要的,會大大增加系統的負擔。

我們用一個線程實現周期地刷新屏幕,其他的線程會調用屏幕驅動函數,把數據寫入顯存時,在該函數里發送一個屏幕刷新事件,屏幕服務線程等待到這個事件就進行屏幕顯示刷新,將顯存的數據通過i2c發送的屏幕。

我們需要利用一個線程也就是main函數進行游戲管理和設置,當用戶選擇某種游戲時,創建該游戲的線程,當退出時,把該線程刪除。

線程的優先級:main函數 > 游戲進程 > 屏幕刷新線程。要注意的是在屏幕刷新時,進行i2c數據傳送過程中不能被其他線程打斷,所以先把中斷關閉,數據傳輸完成后再打開中斷。

3.代碼設計:

我之前單獨做過貪吃蛇和俄羅斯方塊的小游戲,再結合STM32移植rt_thread源碼的例程。可參考以下博客:

基于stm32、0.96寸OLED實現的貪吃蛇小游戲(詳細源碼注釋)
基于stm32、0.96寸OLED實現的俄羅斯方塊小游戲(詳細源碼注釋)
基于IAR-stm32裸板工程,完美移植RT-Thread Nano系統(附源碼)

將上面的代碼結合到一個工程里就是本篇所要做的項目:

使用說明:

接線如下:

如果要在電腦上看串口打印信息,需要將PA9引腳通過串口小板接到電腦。

  • 下載編譯代碼,將工程燒錄到開發板上,點擊運行,出現以下界面,如果屏幕花屏,那么將OLED的RES引腳接地進行復位,再復位單片機。

  • 上下控制搖桿可以選中不同的游戲,按下搖桿中鍵進入選中的游戲,例如運行Snake游戲,首先出現以下界面:

  • 再按下搖桿中鍵開始游戲,操控搖桿進行游戲,界面如下:

  • 在游戲進行時中或游戲失敗(彈出”GAME OBER”),這時候按下中鍵可以重新開始游戲:

  • 在游戲過程中,長按中鍵2s以上再松開回到首頁。

如果在這個代碼架構下添加新游戲,在main函數里的gamestr結構體數組加入元素,一個元素包括游戲名、游戲啟動接口、游戲停止接口,游戲內容的實現方法可參考現有的游戲例程。


時間倉促,如有錯誤之處,還望指出。

?

《博觀而約取,厚積而薄發。————蘇軾》

總結

以上是生活随笔為你收集整理的基于RT-Thread实现的小游戏(贪吃蛇、俄罗斯方块)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。