国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于單片機的貪吃蛇游戲的實現(xiàn)

2020-09-10 07:22:44吳尚茗楊麗燕劉亞榮
科技尚品 2020年6期
關鍵詞:STM32單片機

吳尚茗 楊麗燕 劉亞榮

摘 要:文章是基于ALIENTEK精英STM32開發(fā)板,在μC/OS-II嵌入式操作系統(tǒng)下,用C語言進行的簡單貪吃蛇游戲設計。本游戲設計主要利用觸屏顯示模塊、LED測試模塊和RTC時鐘模塊來控制游戲運行。利用LCD觸摸屏實現(xiàn)四個輕觸按鍵,將按鍵信息發(fā)送至郵箱,控制上下左右,實現(xiàn)貪吃蛇的簡單吃豆、計數(shù)和整個游戲界面顯示等相應功能。

關鍵詞:貪吃蛇游戲;STM32單片機;μC/OS-II嵌入式操作系統(tǒng)

中圖分類號:TP368.12 文獻標識碼:A

手機游戲的歷史已經(jīng)超過十年,其是現(xiàn)代生活的一種娛樂方式。貪吃蛇游戲作為早期的嵌入式開發(fā)游戲,雖然游戲內(nèi)容和畫面都很簡單,但在手機游戲出現(xiàn)的早期,其是一款相當經(jīng)典的游戲[1]。

1 總體方案設計

本次設計的主要硬件模塊,選擇使用ALIENTEK精英STM32開發(fā)板?;陂_發(fā)板的Cotrex-M3內(nèi)核,及μC/OS-II嵌入式操作系統(tǒng),將μC/OS-II嵌入式操作系統(tǒng)移植到ALIENTEK精英STM32開發(fā)板上。在μC/OS-II嵌入式操作系統(tǒng)下,利用單片機的內(nèi)設LED顯示燈模塊以及RTC系統(tǒng)時鐘等兩個模塊相互配合,并結(jié)合STM32搭載外設4.3寸TFTLCD液晶顯示屏的顯示和觸摸功能,來實現(xiàn)貪吃蛇游戲的簡單吃豆、計數(shù)以及整個游戲界面顯示等相應功能。系統(tǒng)總體設計框圖如圖1所示。

2 游戲的軟件設計

2.1 系統(tǒng)總程序設計

本游戲從游戲開始后進行難度選擇,通過選擇難度確定蛇運動的速度,由此開始游戲。開始游戲時,蛇首先向指定方向運動,再通過按鍵控制蛇的運動方向以及游戲的暫停與開始。如果蛇吃到食物,則蛇身增長;如果蛇碰到自身和墻壁,則游戲結(jié)束,通過觸屏按鍵重新開始游戲。游戲的總流程圖如圖2所示。

2.2 優(yōu)先級任務設計

在μC/OS-II嵌入式操作系統(tǒng)下,軟件設計要分不同任務進行設計,且每個任務按各自優(yōu)先級高低順序執(zhí)行,任務之間通過信號量及消息郵箱進行通信。

此次設計主要創(chuàng)建三個不同優(yōu)先級別的任務:LED任務(led_task)、觸摸屏任務(touch_tesk)、貪吃蛇任務(snake_task)。優(yōu)先級的順序為touch_tesk>snake_task>led_tesk。即開始游戲就執(zhí)行貪吃蛇任務,如果屏幕掃描到有觸摸按鍵按下,就發(fā)送觸摸事件消息到郵箱;此時,游戲任務從郵箱中獲取消息,開始執(zhí)行游戲任務。

優(yōu)先級任務設計流程圖如圖3所示。

2.3 游戲顯示任務設計

設計的主要思路為,將屏幕界面分為按鍵控制模塊和游戲界面模塊,初始頁面使用LCD的畫鍵盤功能設計游戲等級,選擇等級后清屏進入游戲界面。游戲界面將屏幕分成720個小方塊,即地圖上有720個點,每個點的數(shù)值代表0位空地,大于0為蛇身,-1為食物。一開始設定所有的點都為0,利用RTC時鐘隨機將一個點的數(shù)值設為-1,再將連續(xù)3個點分別置1、2、3代表蛇身,這就是貪吃蛇的初始長度,之后蛇身數(shù)值增長,因此蛇身的數(shù)值都是大于1的。

2.4 蛇身運動設計

根據(jù)輸入的鍵位值來確定蛇的方向。蛇的運動方式為柔體傳動,即蛇身的位置不變,蛇頭向相應的方向前進,蛇尾相對于上一次響應減少一個方塊,而不是輸入某一個方向后整體向同一個方向移動。

因此,在設計時要定義一個數(shù)組map[i],用來儲存蛇身的數(shù)據(jù),用LCD寫入顏色的功能將這個數(shù)組涂上貪吃蛇的顏色。定義蛇尾為1,蛇頭每前進一步,len增長,map值自加,向前的格子涂上蛇身顏色。同時,通過坐標檢測確定蛇并沒有吃到食物,此時使用len自減。這樣,貪吃蛇的總長度就沒有發(fā)生變化。將map=1的格子涂上白色,即去掉蛇尾,再將map自減,完成蛇的一次向前運動。同理,如果蛇吃到了食物,則將食物涂為蛇身顏色,此時len增長,map增長,且將不做自減。此時,蛇再進行向前運動。

具體實現(xiàn)細節(jié)如下。

2.4.1 判斷蛇的移動方向

初始時將cl定義為蛇的運動方向,當觸屏任務將發(fā)送指令時,蛇頭向相應位置的坐標增加,即蛇向相應的方向移動。在運動過程中,如果輸入的運動方向與貪吃蛇正在運動的運動方向相反,則會發(fā)生反向運動。為了避免反向運動造成程序運行錯誤,需要判定運動方向不為指令方向的反方向。

2.4.2 判斷蛇是否吃到食物

根據(jù)蛇頭的坐標與食物的坐標是否相等,來判斷蛇是否吃到食物。如果吃到食物,則蛇的長度和游戲分數(shù)均加1,并執(zhí)行RTC時鐘指令,出現(xiàn)下一個食物。吃掉食物后,蛇的關節(jié)數(shù)加1,并根據(jù)蛇的移動重新畫出蛇的身體。

2.5 結(jié)束任務設計

根據(jù)設定的游戲區(qū)域范圍,如果蛇頭的坐標超過該范圍,即相當于蛇撞墻死掉,游戲結(jié)束;當蛇長超過3的時候,就有可能與自身相撞,判斷當蛇頭的坐標與蛇身體的任一坐標相等時,蛇就死掉,游戲結(jié)束。判斷如果蛇的sh.x和sh.y在設定的區(qū)域外或map[sh.y * 30 + sh.x]大于1,則說明蛇死掉,就觸發(fā)游戲結(jié)束。

蛇死掉后,游戲任務觸發(fā)信號量,開啟時鐘延時。此時,游戲結(jié)束任務獲取信號量,開始執(zhí)行游戲結(jié)束任務,即在LCD顯示屏上顯示“GAME OVER!”和“RESET”按鍵。點擊“RESET”按鍵,可以重新回到游戲頁面。

3 結(jié)語

本次設計實現(xiàn)了貪吃蛇游戲的基本功能:游戲開始時,通過方向鍵控制貪吃蛇的運動方向;當貪吃蛇吃到隨機出現(xiàn)的食物時蛇身增長,當蛇碰到墻壁或者自身時,蛇死亡,游戲結(jié)束。并且在按鍵、吃到食物以及貪吃蛇死亡時配合不同音效,同時游戲有三個可調(diào)節(jié)的難度供選擇

參考文獻

[1] 劉曉崢.淺析基于J2ME平臺的貪吃蛇游戲開發(fā)[J].科技視界,2013(17):38-39.

猜你喜歡
STM32單片機
基于STM32單片機的脈沖信號參數(shù)高精度測試儀
科技資訊(2017年3期)2017-03-25 01:42:48
基于STM32芯片的移動機器人的避障研究
基于單片機的灌裝生產(chǎn)線成品率計算裝置設計
基于STM32的兩輪自平衡遙控小車設計
科技視界(2016年26期)2016-12-17 08:35:54
基于STM32單片機的智能手環(huán)設計與實現(xiàn)
基于STM32單片機的數(shù)碼相框顯示系統(tǒng)設計
基于STM32的多旋翼無人機超聲波測距系統(tǒng)
試論STM32單片機在室內(nèi)環(huán)境監(jiān)測系統(tǒng)中的運用
STM32單片機原理及硬件電路設計研究
STM32單片機的高精度超聲波測距系統(tǒng)的設計
郓城县| 临猗县| 崇州市| 宣城市| 贵溪市| 绍兴县| 左云县| 兴业县| 静乐县| 滕州市| 龙里县| 贺兰县| 平遥县| 兴业县| 平乡县| 缙云县| 嘉善县| 蒲江县| 洱源县| 垫江县| 通城县| 通化县| 青冈县| 彩票| 美姑县| 大余县| 永吉县| 遵义市| 南昌县| 镇原县| 富源县| 洛阳市| 陇西县| 辉南县| 汤阴县| 斗六市| 敦化市| 宜春市| 建湖县| 邹城市| 益阳市|