• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      吳尚茗 楊麗燕 劉亞榮

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

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

      中圖分類號:TP368.12 文獻(xiàn)標(biāo)識碼:A

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

      1 總體方案設(shè)計

      本次設(shè)計的主要硬件模塊,選擇使用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)設(shè)LED顯示燈模塊以及RTC系統(tǒng)時鐘等兩個模塊相互配合,并結(jié)合STM32搭載外設(shè)4.3寸TFTLCD液晶顯示屏的顯示和觸摸功能,來實現(xiàn)貪吃蛇游戲的簡單吃豆、計數(shù)以及整個游戲界面顯示等相應(yīng)功能。系統(tǒng)總體設(shè)計框圖如圖1所示。

      2 游戲的軟件設(shè)計

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

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

      2.2 優(yōu)先級任務(wù)設(shè)計

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

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

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

      2.3 游戲顯示任務(wù)設(shè)計

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

      2.4 蛇身運動設(shè)計

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

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

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

      2.4.1 判斷蛇的移動方向

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

      2.4.2 判斷蛇是否吃到食物

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

      2.5 結(jié)束任務(wù)設(shè)計

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

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

      3 結(jié)語

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

      參考文獻(xiàn)

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

      猜你喜歡
      STM32單片機
      基于STM32單片機的脈沖信號參數(shù)高精度測試儀
      科技資訊(2017年3期)2017-03-25 01:42:48
      基于STM32芯片的移動機器人的避障研究
      基于單片機的灌裝生產(chǎn)線成品率計算裝置設(shè)計
      基于STM32的兩輪自平衡遙控小車設(shè)計
      科技視界(2016年26期)2016-12-17 08:35:54
      基于STM32單片機的智能手環(huán)設(shè)計與實現(xiàn)
      基于STM32單片機的數(shù)碼相框顯示系統(tǒng)設(shè)計
      基于STM32的多旋翼無人機超聲波測距系統(tǒng)
      試論STM32單片機在室內(nèi)環(huán)境監(jiān)測系統(tǒng)中的運用
      STM32單片機原理及硬件電路設(shè)計研究
      STM32單片機的高精度超聲波測距系統(tǒng)的設(shè)計
      长岭县| 喀什市| 集贤县| 黄冈市| 塔河县| 永登县| 富平县| 珲春市| 皋兰县| 浦北县| 山阳县| 平泉县| 海丰县| 南宁市| 桂阳县| 衡东县| 安西县| 离岛区| 五原县| 文登市| 安远县| 福安市| 鄢陵县| 兖州市| 南丹县| 界首市| 延津县| 九龙县| 平舆县| 晋城| 和田县| 望谟县| 北流市| 体育| 普兰县| 渑池县| 特克斯县| 儋州市| 南川市| 南京市| 马公市|