【STM32學習 自制STM32遊戲機】

2020年科協招新須要出訓練題,讓新生了解一下單片機,因此我這邊打算出一道遊戲機的題,讓新生用單片機實現一個遊戲機,共3個遊戲可選,分別爲:貪吃蛇,打地鼠和推箱子,因爲是針對於0基礎新生,因此在指標上不作過多要求,只要實現出效果就行。
我負責的是貪吃蛇和推箱子
編程

參考博客
(單片機原理與應用)大液晶屏的遊戲設計(推箱子)
基於stm3二、0.96寸OLED實現的貪吃蛇小遊戲(詳細源碼註釋)

ide

推箱子

推箱子顧名思義就是控制遊戲裏的人將全部箱子所有推到指定位置就算通關,這個遊戲在之前的手機上都挺常見的。本次題目主要是要求新生本身找到一些推箱子的地圖,並將地圖裏的要素顯示在選擇的屏幕上,而後經過按鍵/搖桿來控制遊戲裏的人移動,並完成關卡,關卡數作的越多,給分越高,5個封頂。性能

基本設計思路

OLED屏幕

用單片機制做遊戲機最大的難點就在於屏幕,你要經過單片機來控制題目顯示地圖中的種種要素,好比推箱子的箱子,牆壁,人物等,所以根據本身想要實現遊戲先對屏幕進行選型,而後熟悉本身的屏幕是很是重要的
在我本身實現方案的時候,我選擇的是經常使用的OLED屏幕,OLED屏幕對於顯示一些簡單信息是很是方便的,建議必定要學會如何使用,不少時候一些設計用OLED屏幕就足夠了。
學習

OLED控制

在某寶上買到的OLED通常是SSD1306,通訊方式通常是SPI或IIC,哪種均可以,我用IO口模擬IIC和SPI的時候,SPI的速度會更快些,還有並口的控制方式,這個就是通訊相對方便,但佔用的IO口較少。若是想玩更高級的話,能夠去買正點原子的OLED屏幕,那個雖然貴了點,可是性能更好,還有多種控制方式。
關於單片機如何控制OLED,在這裏不作詳述,網上的資料很是齊全,講的也很清楚,主要的流程以下,跟着這個思路去一步步實現就行:
單片機控制OLED流程

spa

地圖尺寸設計

常見的OLED屏幕的分辨率是128*64,分辨率就能夠理解爲一個個點,每一個點都是一個小LED,對這個小LED寫1,他就點亮了,寫0就熄滅了,對這些一個個點進行設計就能夠實現顯示字符,漢字等經常使用的信息。熟悉OLED控制的人就會知道OLED是一次寫8個點(一列),因此地圖的要素設計爲8的倍數會比較方便操做,所以屏幕顯示的設計以下:
屏幕設計
下面是實際在OLED上顯示的畫面(以第一關爲例):

.net

其中地圖中的要素能夠本身去繪製8*8的像素圖案,也能夠直接使用我在參考連接中這位做者給出的方案,我是直接使用的這個圖案:
地圖要素顯示方案
那麼如何將這些要素顯示在OLED屏幕上呢?最簡單的方法就是用電腦的畫圖軟件對圖片取模,這個方法在這裏也不作詳述,在網上搜一下學習一下便可(能夠去看原子或杜洋工做室的教程)
通過試驗,這幾張圖片不能直接用畫圖軟件直接保存,因此建議直接在取模軟件上畫圖,反正只是64像素點的圖,蠻好畫的
如下是我本身畫的一些圖,僅供參考:
人物
箱子到達
箱子
目的地
總之,獲得這幾個點陣的數據就能夠在OLED上顯示了,這樣界面就沒有啥問題了








設計

地圖顯示

因爲咱們設計每一個地圖要素都是8*8的,在OLED上面顯示很是方便,本身參考一下別人的地圖或者本身設計地圖便可,我貼的參考文章裏面的就能夠,選幾張作一下:
地圖1
地圖2
地圖3
顯示在OLED上:
地圖顯示到OLED上
地圖顯示到OLED上





3d

基本信息顯示

在屏幕右邊咱們要顯示一些基本信息,好比如今的關卡數,已經走過的步數等等。這裏能夠本身自由設計,做爲發揮指標,好比搞些已經有幾個箱子就位的信息等。視頻

*歡迎界面顯示(非必須)

在進入遊戲以前,能夠顯示一個歡迎界面,顯示是什麼遊戲,有開始遊戲的提示,這也能夠做爲發揮指標,由本身自由設計blog

以上就是在屏幕上咱們要作的事,也是最主要的事,完成了這些,剩下的就很是簡單了。

控制

在本次題目中,須要一個東西來對遊戲中的人物進行上下左右移動控制,在這裏給出兩種方案,可是方案不作限定,想用其餘方案也能夠,好比在手機上本身作一個控制界面,而後讓手機和單片機進行通訊(用藍牙模塊)等等

鍵盤

最簡單的鍵盤由輕觸按鍵構成,因爲新生們剛剛上手電子設計,對一些基本操做還不是很熟悉,因此選擇鍵盤的同窗必須本身焊接出一個鍵盤,好比這種形式:
鍵盤反面
鍵盤正面
我隨便焊的,因此焊的特別醜,大佬勿噴,大家認真作的話確定焊的比我好
總之,引出4個輕觸按鍵來控制上下左右四個方向便可,還有你把鍵盤搞定,不少遊戲都不用在搞了,在上面作就行,好比貪吃蛇



搖桿模塊

通常使用的搖桿模塊以下圖所示,某寶上很容易買到:
搖桿模塊
這個模塊的具體使用方法在這裏不作詳述,留給新生們本身探索,使用這個模塊可讓東西看着更有遊戲感,並且能夠加分

以上就是控制的方案

使用的單片機

使用的單片機沒有什麼限制,我是在STM32上實現本身的方案的,使用51也能夠完成,由於我參考的一些資料都是用51來作的
若是是那種之前根本沒有了解過單片機的萌新,建議從51開始學起,不急於一時,學習51會讓你對單片機以及單片機如何編程有必定了解,這樣的話學習STM32會更加容易理解,可是學習51也不必深刻,看郭天祥老師的書學習其實學到串口通訊就差很少能夠了,而後就能夠試着轉STM32了

成品展現

下面就是我本身作的成品,稍微展現一下效果
玩了一會後
將箱子向上推一格
顯示通關界面


貪吃蛇

通過上面推箱子的學習,其實貪吃蛇在製做方面就比較簡單了,主要仍是看你的c語言程序寫的咋樣,由於OLED,鍵盤之類的控制已經很熟悉了,下面只給出一些設計思路,其餘的不作詳述
有條件的同窗能夠試一下在本身的電腦上用c語言實現一個貪吃蛇,參考一下網上的代碼,這樣的話就比較好在單片機上寫了,你所要考慮的惟一的事就在於如何將你用c語言當中用到的一些東西和你的硬件結合起來,好比OLED

地圖與蛇身設計

你們都知道,之前在諾基亞玩過的那種貪吃蛇的地圖都是有不少種的,因此在實現遊戲以前必須先想好地圖如何設計,我採用的是最簡單的地圖,即那種一個大矩形邊框的形式
除了地圖以外,還要設計一下蛇身,你們知道,一塊常見的OLED屏幕,分辨率只有12864,所以若是你的蛇身設計的是11的,在屏幕上就很難看清,因此用OLED的同窗最好將蛇身設計爲2*2或者其餘的
在本文最上面提供的參考文章中,就是作的這樣的效果,你們能夠參考一下:
貪吃蛇
因爲我只是將方案驗證一下,且個人程序是我之前寫的c語言程序移植而來,在這裏我就選用最簡單的方案了



其餘方案

可能有的同窗是新手,之前沒有接觸過單片機,不能熟練的掌握OLED,在這裏我就給出一種更加簡單的方案:點陣
點陣的使用和數碼管相似,方便控制,並且容易分辨,操做簡單
若是想使用點陣的同窗,能夠參考以下視頻:
【51單片機】自制貪吃蛇遊戲機
單片機驅動點陣屏貪食蛇遊戲8051
上面這兩位的做品就是用點陣來作的,相對於OLED,這種方案會更加簡單,惟一要注意的就是點陣的使用,這玩意使用起來是有坑的,我在講題的時候會說一下




成品展現

貪吃蛇比推箱子簡單不少,在這裏對於程序我就不作贅述了,你們學過一點點c語言去參考一下網上的一些代碼應該能搞出來,仍是那句話,注意與硬件的配合,不管你用的是OLED仍是點陣
下面是我本身作的成品,僅供參考,大佬勿噴
遊戲界面
歡迎界面

相關文章
相關標籤/搜索