久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2769|回復: 2
打印 上一主題 下一主題
收起左側

[MCU實戰經驗]基于stm32和LCD12864的貪吃蛇游戲制作,游戲分析(原創設計)

[復制鏈接]
跳轉到指定樓層
樓主
看到網上有人用單片機做俄羅斯方塊、貪吃蛇游戲后,自己也想做個。。。說干就干,先是分析游戲內容,然后設計程序結構,最后調試硬件,寫代碼,花了一兩天時間搞定了,在此分享下成果,做的過程中,沒有參考任何游戲資料,所以應該是100%原創吧。。。

游戲分析:

貪吃蛇游戲很簡單,不用多說,就是按鍵控制蛇的移動方向,使之吃到食物增加自身長度,當蛇碰到邊界或自身后游戲結束

所以開發這個游戲有一下幾個事情要做

1、游戲界面:

采用LCD12864液晶屏,不是市場上常見的大屏,而是小屏,顯示內容和大屏一樣,外接字庫芯片。

因為單個像素點太小,所以采用4*4像素作為一個最小顯示單元,這樣一來整屏就劃分成了32*64的游戲區域,

在此方面控制程序主有兩個,一個畫點函數,一個擦點函數,用于在屏幕任意坐標添加或刪除一個黑點,作為游戲顯示操作

2、蛇身的建立

這一步將整個蛇顯示到屏幕上,因為蛇身是一個點連接一個點,所以之前有想到用建立鏈表的方式去表示蛇,但后來發現有處理起來有點繁瑣,就舍棄了。

轉而第二種方式,采用數組方式,因為屏幕最大內容是32*64=2K個點,所以建立了一個2048 x 16bit的數組,雖然有點大,但是對于stm32擁有64K RAM來說就有點小巫見大巫了。。。

建立數組后,每個數據表示蛇在屏幕上的坐標,高八位表示行坐標,低八位表示列坐標,數組起始為頭部坐標,根據蛇的長度決定尾部坐標。這樣一來就解決了蛇身的問題

此外還建立了一個64*32bit的屏幕緩存,用以表示屏幕上任意坐標(x,y)處是否存在蛇身。

3、蛇的移動

當蛇要移動時,先提取頭部坐標,如(x,y),根據當前的移動方向,計算下一個坐標,如果方向為左(以屏幕左上角為(0,0)水平向右為x軸,向下為y軸)則下一坐標為(x-1,y)向右(x+1,y)向下(x,y+1)向上(x,y-1)

然后再一次將蛇身坐標(數組內容)依次往后挪一個,長度為蛇身坐標。如果下一坐標為食物,則在尾坐標后再添加一個位置,復制尾坐標,長度+1,否者刪除尾坐標。再將新坐標復制到數組0的地方作為新的蛇頭,此過程中,及時根據坐標的改變(添加新坐標或刪除坐標),在屏幕緩存相應位置畫點和擦點,標記蛇身。

4、游戲的規則,按照3計算新坐標后,判斷該店緩存是否為1(1表示存在蛇身或其他物體,0表示空白單元),如果為1,則表明蛇遇到物體了,如果該物體是食物,則進行游戲添加食物動作,如果不為食物則表明蛇撞自己了,即游戲失敗,此外還要判斷該坐標是否超出邊界。

5、動作控制,4個按鍵,采用中斷方式,代表4個方向。按下一個鍵,改變當前的移動方向,在這里要注意,方向改變之前要判斷當前方向必須不為反向,如轉變至左方向時,當前方向不能是右,防止蛇回頭,撞到自身,這是游戲中不允許的。

6、食物的出現,隨機出現,有兩種辦法,一是利用單片機的系統隨機誤差產生坐標,如ADC模塊,隨機讀取ADC數據模塊,分別對64和32取余。當然前提是誤差最大有64的擺幅,這是一種不夠精確地隨機數。

二是采用C語言rand()隨機函數,也是分別對64和32取余,比前者要科學,但前提是每次游戲運行前要給一個隨機種子,進行隨機函數種子初始化srand(seed),否者每次游戲運行出現的隨機序列(食物的坐標)都是一樣的,這一步就必須借助外部環境了,游戲中我采用的是這一方式獲得食物,這里通過記錄游戲開始后第一次按下鍵盤的時間作為隨機數種子,開了一個72M不分頻的定時器,因為技術頻率快,從游戲開始到第一次按鍵的時間幾乎是隨機的。當然也可以采用ADC模塊的隨機誤差數據。

然后就在游戲開始隨機產生一個食物,當游戲開始后,在計算下一坐標后,如果該點為食物,則吃掉它,并產生一個食物,通過對屏幕緩存的判斷,直到新的食物坐標是一個空白單元。

7、游戲進程控制:

開了一個定時器,周期決定蛇的移動速度。進入定時器后,根據當前的移動方向,進入不同的狀態機,計算下一坐標,判斷,(吃食物或者移動),移動蛇身將坐標往數組后面挪,如果游戲失敗,將游戲標志位置位,主函數則實時判斷游戲是否失敗,如果失敗,則關閉定時器,清屏,顯示游戲分數(蛇身長度),并進入死循環或等待系統軟復位。

2.jpg (51.81 KB, 下載次數: 57)

2.jpg

評分

參與人數 1黑幣 +15 收起 理由
wpppmlah + 15 贊一個!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:262 發表于 2022-9-15 20:52 | 只看該作者
好東東,能分享一下代碼嗎?
回復

使用道具 舉報

板凳
ID:101093 發表于 2022-9-15 23:02 | 只看該作者
做的不錯,技術超強!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区四区免费观看 | 国产一区二区在线视频 | 午夜日韩| 国产日韩视频 | 久久国产美女视频 | 亚洲3级| 久久久.com | 亚洲午夜av久久乱码 | 精品国产一区二区三区久久 | 日本黄色激情视频 | 日本成人午夜影院 | 日韩精品一区二区三区免费视频 | 北条麻妃一区二区三区在线观看 | 一区二区中文字幕 | 久久成人精品视频 | 求毛片 | 天天草天天| 精久久久 | 成年人免费在线视频 | 国产一级视频在线观看 | 第一av | 91超碰在线| 一区二区高清 | 久久国产精品72免费观看 | 国产精品久久久久久亚洲调教 | 午夜影院在线观看 | 99久久久久 | 欧美精品在线免费观看 | 一区二区三区欧美在线 | 色婷婷一区二区三区四区 | 一区二区av| 成人久草| 国产免费视频 | 91麻豆精品国产91久久久久久久久 | 国产一区二区三区 | 一区二区三区四区在线 | 精品国产免费人成在线观看 | 日韩精品| 黑人一级片视频 | 成人免费在线视频 | 日韩欧美网 |