基于μC_OS系統(tǒng)ARM9硬件平臺的貪吃蛇C語言游戲設(shè)計.doc_第1頁
基于μC_OS系統(tǒng)ARM9硬件平臺的貪吃蛇C語言游戲設(shè)計.doc_第2頁
基于μC_OS系統(tǒng)ARM9硬件平臺的貪吃蛇C語言游戲設(shè)計.doc_第3頁
基于μC_OS系統(tǒng)ARM9硬件平臺的貪吃蛇C語言游戲設(shè)計.doc_第4頁
基于μC_OS系統(tǒng)ARM9硬件平臺的貪吃蛇C語言游戲設(shè)計.doc_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1基于C/OS系統(tǒng)、ARM9硬件平臺的貪吃蛇游戲設(shè)計摘要程序核心思想:游戲開始后進(jìn)入游戲界面。首先初始化蛇的坐標(biāo),食物的坐標(biāo)。線程基本流程:判斷是否是暫停階段,是否有有退出按鍵,游戲是否有結(jié)束,如果都沒有就執(zhí)行,如果游戲結(jié)束了就重新游戲或者退出。設(shè)計要求;1、能夠通過方向鍵來控制蛇的移動方向;2、蛇吃到食物后能夠重新出現(xiàn)食物;并且能夠更新和顯示分?jǐn)?shù);3、游戲開始的時候能通過手動進(jìn)行游戲級別的調(diào)整;4、每吃到5個食物后,游戲能夠自動進(jìn)入下一關(guān),并能通過增加蛇的移動速度來增加游戲的難度;5、游戲開始的時候能夠手動對游戲級別進(jìn)行調(diào)整;開發(fā)平臺信息一、C/OS操作系統(tǒng)C/OS和C/OS-II是專門為計算機(jī)的嵌入式應(yīng)用設(shè)計的,絕大部分代碼是用C語言編寫的。CPU硬件相關(guān)部分是用匯編語言編寫的、總量約200行的匯編語言部分被壓縮到最低限度,為的是便于移植到任何一種其它的CPU上。C/OS-II中最多可以支持64個任務(wù),分別對應(yīng)優(yōu)先級063,其中0為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個最高優(yōu)先級的任務(wù)和4個最低優(yōu)先級的任務(wù),所有用戶可以使用的任務(wù)數(shù)有56個,每個任務(wù)都有不同的優(yōu)先級,用戶在創(chuàng)建任務(wù)的時候定義該任務(wù)的優(yōu)先級。uC/OS操作系統(tǒng)中每個任務(wù)可以有5種狀態(tài):休眠態(tài)、就緒態(tài)、運行態(tài)、等待或掛起狀態(tài)、中斷態(tài),在任一個時候,任務(wù)的狀態(tài)一定是這5種狀態(tài)之一。任務(wù)在等待消息、郵箱或者信號量等事件的到來的時候會進(jìn)入掛起狀態(tài),當(dāng)任務(wù)接到消息以后,則處于就緒狀態(tài)。二、試驗箱基本硬件信息1)CPU:S3C44B0X,ARM7TDMI,工作在60MHz2)BIOS:2M,NORFLASH3)內(nèi)存:8MSDRAM4)海量存儲器:16M,NANDFlash5)鍵盤:17鍵數(shù)字小鍵盤6)顯示器:32024016級灰度的LCD(可選256彩色LCD),四線電阻式觸摸屏7)USB接口:1.1標(biāo)準(zhǔn)8)串行口:兩個,最高波特率115200kb9)網(wǎng)絡(luò)接口:10M以太網(wǎng)10)CAN接口:125Kb,250Kb,500Kb,1Mb11)調(diào)試接口:JTAG,14針,20針12)電機(jī):直流電機(jī)(有刷),步進(jìn)電機(jī)(帶1/64減速器)13)A/D:8路10位,滿量程2.5V,已用前4路14)D/A:10位,滿量程4.096V15)LED:8個,共陰極216)音頻輸出:44.1KHz17)FPGA(可選):ACEX1K系列,擴(kuò)展輸出100I/O,與S3C44B0X外部總線直接相連18)擴(kuò)展口:2個二、開發(fā)集成環(huán)境ARMSDT2.5集成開發(fā)環(huán)境ARMSDT2.5集成開發(fā)環(huán)境(ARMProjectManager)是ARM公司(為方便用戶在ARM芯片上進(jìn)行應(yīng)用軟件開發(fā)而推出的一整套集成開發(fā)工具。ARMSDT可在Windows95、98、NT以及Solaris2.5/2.6、HP-UX10上運行,支持最高到ARM9(含ARM9)的所有ARM處理器芯片的開發(fā),包括StrongARM。ARMSDT包括一套完整的應(yīng)用軟件開發(fā)工具:1、*armccARM的C編譯器,具有優(yōu)化功能,兼容于ANSIC。2、*tccTHUMB的C編譯器,同樣具有優(yōu)化功能,兼容于ANSIC。3、*armasm支持ARM和THUMB的匯編器。4、*armlinkARM連接器,連接一個和多個目標(biāo)文件,最終生成ELF格式的可執(zhí)行映像文件。5、*armsdARM和THUMB的符號調(diào)試器。詳細(xì)設(shè)計一、屬性解釋貪吃蛇游戲設(shè)計最主要在于蛇移動的控制,在設(shè)計中分別用兩組一維數(shù)組snake.U16x100和snake.U16x100來分別0存放蛇身的坐標(biāo),x100代表橫坐標(biāo),y100代表縱坐標(biāo)。蛇的寬度設(shè)置為10個像素點。變量direction為移動方向,foodx,foody為食物的坐標(biāo)。function.stop為判定是否是要結(jié)束退出游戲,function.restar用來在游戲結(jié)束后重新開始游戲。1000/snake.level為蛇的移動速度(在程序中用1000/snake.level作為每次循環(huán)的延遲時間),當(dāng)snake.level的記錄的等級越高的話,蛇的移動速度會越快(因為延遲時間越?。y度越高。snake.life用來判定游戲是否結(jié)束,snake.life=1代表蛇已死,游戲結(jié)束。游戲的其他相關(guān)變量還有snake.node,用來記錄蛇的節(jié)數(shù);snake.score用來記錄游戲得分;snake.level用來記錄游戲的等級。二、相關(guān)初始化過程:1、堆棧大小定義、任務(wù)優(yōu)先級定義:OS_STKMain_StackSTACKSIZE*8=0,;VoidMain_Task(void*Id);#defineMain_Task_Prio12OS_STKControl_StackSTACKSIZE*8=0,;voidControl(void*Id);#defineControl_Prio152、任務(wù)的創(chuàng)建:OSTaskCreate(Main_Task,(void*)0,(OS_STK*)&Main_StackSTACKSIZE-1,Main_Task_Prio);OSTaskCreate(Control,(void*)0,(OS_STK*)&Control_StackSTACKSIZE*8-1,Control_Prio);3、初始化畫筆寬度:SetPenWidth(pdc,10);/初始化畫筆寬度為10個像素點4、初始化蛇的節(jié)數(shù):snake.node=5;/游戲開始時蛇有5節(jié)35、初始蛇尾巴的坐標(biāo):snake.x0=10;snake.y0=10;初始化蛇各節(jié)的坐標(biāo):for(i=0;i=snake.node-1;i+)snake.xi+1=snake.xi+10;snake.yi+1=snake.yi;6、蛇相關(guān)參數(shù)的初始化:初始化移動方向為向右:snake.direction=6;7、游戲相關(guān)參數(shù)的初始化:初始化分?jǐn)?shù):snake.score=0;初始化等級:snake.level=1;三、程序流程:本設(shè)計需要創(chuàng)建兩個任務(wù),任務(wù)流程和任務(wù)狀態(tài)切換如下圖。具體的任務(wù)流程和任務(wù)所要完成的功能如下:在系統(tǒng)啟動后,同時創(chuàng)建兩個任務(wù),任務(wù)一和任務(wù)二。任務(wù)一主要功能是等待鍵盤消息,有鍵盤消息的時候判斷是什么鍵盤,并對相應(yīng)的變量重新賦值。任務(wù)二主要功能是控制并在屏幕上顯示蛇的移動,并完成對分?jǐn)?shù)、游戲等級、和其他相關(guān)參數(shù)的記錄和顯示。任務(wù)一為主任務(wù),在創(chuàng)建任務(wù)的時候,賦給它的優(yōu)先級別比任務(wù)二高,所以任務(wù)一優(yōu)先運行,任務(wù)二處于就緒狀態(tài),因為任務(wù)一主要是等待鍵盤消息,在無鍵盤消息的時候,任務(wù)一被掛起,這時候任務(wù)二進(jìn)入運行狀態(tài)。1、程序主流程圖:是否有鍵盤消息任務(wù)一掛起任務(wù)一,任務(wù)二就緒任務(wù)二掛起任務(wù)一運行任務(wù)二運行是否42、主任務(wù)流程圖:主要功能是等待鍵盤消息,有鍵盤消息的時候判斷是什么鍵盤,并對相應(yīng)的變量重新賦值。3、任務(wù)二流程圖:主要功能是控制并在屏幕上顯示蛇的移動,并完成對分?jǐn)?shù)、游戲等級、和其他相關(guān)參數(shù)的記錄和顯示。是等待鍵盤消息是否有鍵盤按下判斷是哪個按鍵否8如果蛇現(xiàn)在的方向是左或者右就把方向改成向上2如果蛇現(xiàn)在的方向是左或者右就把方向改成向下4如果蛇現(xiàn)在的方向是上或者下就把方向改成左6如果蛇現(xiàn)在的方向是上或者下就把方向改成右*發(fā)出退出游戲的信息發(fā)出重新開始游戲的信息/+對游戲的等級加1(只在游戲開始前有效)-對游戲的等級減1(只在游戲開始前有效)/n車確定等級選擇,開始游戲5四、具體功能實現(xiàn):1、移動功能的實現(xiàn):這部分功能是游戲的主體,實現(xiàn)蛇移動的方式是首先擦除蛇尾,擦除的方發(fā)是用白色的畫筆覆蓋畫上蛇尾,蛇尾就變成白色底色不可見,然后從蛇尾開始,依次將蛇每一的坐標(biāo)給下一節(jié)。例如剛開始蛇是5節(jié),這時候依次把第2四節(jié)的坐標(biāo)給第1節(jié);把第3節(jié)(即蛇頭)的坐標(biāo)給第2節(jié);把第4四節(jié)的坐標(biāo)給第3節(jié);把第4節(jié)(即蛇頭)的坐標(biāo)給第3節(jié);把第5節(jié)(即蛇頭)的坐標(biāo)給第4節(jié)。擦除蛇尾和轉(zhuǎn)移坐標(biāo)這兩個順序不能顛倒。這時候蛇頭的初始化游戲是否結(jié)束是否調(diào)用食物產(chǎn)生程序根據(jù)direction變量移動蛇是否吃到食物否是蛇的節(jié)數(shù)加1分?jǐn)?shù)加1加快蛇的移動速度是否要產(chǎn)生食物否是是否有返回按鍵顯示結(jié)束畫面否6坐標(biāo)和第4節(jié)的坐標(biāo)是一樣的,這時候需要判斷變量snake.direction的值,根據(jù)snake.direction的值補畫上蛇頭。首先,擦除蛇尾SetPenColor(pdc,0xffffffff);MoveTo(pdc,snake.x0,snake.y0);LineTo(pdc,snake.x0,snake.y0);然后,蛇的每個環(huán)節(jié)坐標(biāo)給下一節(jié);For(i=0;i=0;i-)if(snake.xi=snake.xsnake.node&snake.yi=snake.ysnake.node)snake.life=1;break;elsecontinue;8(2)蛇頭撞到游戲界面邊框判斷蛇是否撞到邊框的方法,只要比較蛇頭的X、Y坐標(biāo)是不是同時和邊框的X、Y坐標(biāo)一樣,一樣的話,即表明蛇撞到邊框,游戲結(jié)束。例如:本設(shè)計中以(10,45)為坐標(biāo)原點的情況下,只要保證蛇頭的X坐標(biāo)在0620之間(像素點為單位),蛇頭Y坐標(biāo)在0415之間(像素點為單位),即表示蛇沒有撞到邊框。if(snake.xsnake.node=0|snake.xsnake.node=620|snake.ysnake.node=0|nake.ysnake.node=415)snake.life=1;5、監(jiān)聽鍵盤動作:任務(wù)通過等待消息而處于掛起狀態(tài),當(dāng)任務(wù)接到消息以后,則處于就緒狀態(tài),然后開始判斷所接受到的這個消息是不是需要處理,如果是執(zhí)行相應(yīng)的處理函數(shù),最后,刪除所接收到的消息,繼續(xù)掛起等待下一條消息。VoidMain_Task(void*Id)/Main_Test_TaskU8xiaoxi;POSMSGpMsg=0;for(;)pMsg=WaitMessage(0);switch(pMsg-Message)caseOSM_KEY:xiaoxi=onKey(pMsg-WParam,pMsg-LParam);if(xiaoxi=default:break;OSTimeDly(200);DeleteMessage(pMsg);U8onKey(intnkey,intfnkey)switch(nkey)Casereturndefault:returnFALSE;9程序下載與調(diào)試1、把程序下載到試驗箱中:(1)執(zhí)行菜單Project|Make對工程進(jìn)行編譯連接。在出現(xiàn)的錯誤/警告窗口中選擇某錯誤/警告信息,ADS會自動打開相應(yīng)源文件并用箭頭指向出錯的文本行。如果某個源文件被修改,重新編譯時ADS會自動同步各文件的日期信息。(2)在ADS中執(zhí)行菜單Project|Debug啟動ADS1.2的調(diào)試工具AXD。(3)在AXD中執(zhí)行菜單Options|ConfigureTarget對AXD進(jìn)行設(shè)置。選擇ADP即遠(yuǎn)程調(diào)試,點Configure按鈕進(jìn)一步設(shè)置具體參數(shù)。(4)點Select按鈕選擇遠(yuǎn)程連接為ARMethernetdriver,點Configure按鈕輸入仿真器的IP地址。如果用戶使用的是并行口仿真器,請輸入127.0.0.1即可。(5)等待程序裝載完畢以后,通過Execute|Go菜單以及Execute|Stop(或者工具欄中的相應(yīng)按鈕)運行或暫停程序。程序暫停后在窗口中將顯示出程序暫停的位置。(6)通過Execute|Step菜單(或者工具欄中的相應(yīng)按鈕)可以單步運行程序。也可以使用StepIn、StepOut菜單命令進(jìn)入或者跳出函數(shù)的調(diào)用。RunToCursor命令運行到光標(biāo)位置。(7)程序停止后可以通過ProcessorViews|Sources菜單查看源文件,并可在適當(dāng)位置按F9設(shè)置端點。(8)使用在ProcessorView菜單下的Registers、Variables和Memory命令可以查看工作寄存器或者內(nèi)存變量。讀者可以逐一地嘗試,為以后調(diào)試程序打下基礎(chǔ)。注意:在進(jìn)行調(diào)試時在ADS中必須選擇當(dāng)前工程的Debug版本,如果選擇Release版本則無法正常調(diào)試程序。但在調(diào)試通過后就必須選擇Release版本進(jìn)行編譯連接并將生產(chǎn)的system.bin文件復(fù)制到開發(fā)板的Flash中。將開發(fā)板上的Flash激活并使Windows認(rèn)其為一個2、運行結(jié)果與不足:本程序能夠完成設(shè)計目的的所有基本要求;(1)能夠通過方向鍵來控制蛇的移動方向;(2)蛇吃到食物后能夠重新出現(xiàn)食物;并且能夠更新和顯示分?jǐn)?shù);(3)每吃到5個食物后,游戲能夠自動進(jìn)入下一關(guān),并能通過增加蛇的移動速度來增加游戲的難度;(4)能夠通過按鍵隨便退出游戲,并能通過按鍵重新進(jìn)入游戲;未能實現(xiàn)的功能;本程序設(shè)計時預(yù)想在游戲開始前能夠停留在游戲界別設(shè)置畫面,并能通過手動進(jìn)行游戲級別的調(diào)整,“+”按

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論