




已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
ARM系統(tǒng)設(shè)計(jì)實(shí)踐課程報(bào)告題目:基于ADuC7020 ARM平臺(tái)的貪吃蛇游戲的開(kāi)發(fā)姓 名: 學(xué) 號(hào): 完成時(shí)間: 191. 課程設(shè)計(jì)內(nèi)容1.1設(shè)計(jì)任務(wù) 在LCD屏幕上模擬貪吃蛇游戲,基本功能為: 1)起初貪吃蛇的長(zhǎng)度為3節(jié),并根據(jù)預(yù)先設(shè)計(jì)好的方向行進(jìn),直到通過(guò)按鍵改變貪吃蛇的行進(jìn)方向。 2)在實(shí)驗(yàn)開(kāi)發(fā)平臺(tái)上的LCD上繪制出貪吃蛇,并且在貪吃蛇的四周繪制出四面圍墻,貪吃蛇在行進(jìn)過(guò)程中不能碰到墻壁,碰到墻壁則游戲結(jié)束,并通過(guò)屏幕的閃爍來(lái)提醒用戶(hù)游戲結(jié)束。用戶(hù)可以根據(jù)按下Reset按鍵可以重新開(kāi)始游戲。 3)貪吃蛇在行進(jìn)過(guò)程中,由四個(gè)按鍵控制貪吃蛇的行進(jìn)方向,即上下左右按鍵,同時(shí)按鍵與蜂鳴器相連接,當(dāng)按鍵被確認(rèn)按下時(shí)會(huì)發(fā)出滴的響聲,提示用戶(hù)按鍵已被按下。貪吃蛇的食物跟貪吃蛇的一節(jié)長(zhǎng)度大小一樣,并且隨機(jī)產(chǎn)生在貪吃蛇規(guī)定的行進(jìn)范圍之內(nèi)。貪吃蛇在行進(jìn)過(guò)程中若遇到產(chǎn)生的食物會(huì)將食物吃掉,貪吃蛇便會(huì)長(zhǎng)一節(jié),然后繼續(xù)行進(jìn)。1.2開(kāi)發(fā)平臺(tái) 1)實(shí)驗(yàn)所需硬件:ADuC7020,PC機(jī)。 2)本次實(shí)驗(yàn)所需用到的硬件模塊:LCD(用來(lái)顯示蛇的移動(dòng)以及吃食物、撞墻等過(guò)程);鍵盤(pán)(用來(lái)控制貪吃蛇的上下左右移動(dòng)等功能)。2.設(shè)計(jì)思想2.1實(shí)現(xiàn)功能 1)顯示開(kāi)機(jī)界面和蛇的移動(dòng)以及吃食物、撞墻等過(guò)程。 2)控制貪吃蛇的上下左右移動(dòng)和游戲的重新開(kāi)始功能。2.2設(shè)計(jì)內(nèi)容 因?yàn)楸敬螌?shí)驗(yàn)要使LCD顯示,并通過(guò)鍵盤(pán)產(chǎn)生中斷控制貪吃蛇的運(yùn)動(dòng)狀態(tài)和速度,所以本次實(shí)驗(yàn)主要同到的.c文件主要是keyboard.c、lcd.c、8led.c和main.c,主要在這幾個(gè)文件上進(jìn)行編程。本次實(shí)驗(yàn)的關(guān)鍵是如何在LCD中顯示蛇并且需要實(shí)現(xiàn)蛇的移動(dòng),以及蛇吃到食物之后如何實(shí)現(xiàn)蛇身增長(zhǎng)一段以及如何用鍵盤(pán)產(chǎn)生中斷控制蛇的移動(dòng)方向.2.2.1游戲界面設(shè)計(jì)1)游戲邊框繪制 將整個(gè)屏幕全部作為游戲界面,所以將點(diǎn)亮屏幕四條邊的像素點(diǎn)。此時(shí)調(diào)用二維數(shù)組chDispRam實(shí)現(xiàn)點(diǎn)亮屏幕中四條邊。具體通過(guò)以下程序?qū)崿F(xiàn)。 2)游戲結(jié)束時(shí)界面顯示 這里設(shè)計(jì)了新函數(shù)GameOver()來(lái)實(shí)現(xiàn)。GameOver()原型如下: 3)食物顯示和貪吃蛇顯示 為了在屏幕中顯示貪吃蛇,首先需要在屏幕中確定蛇頭的坐標(biāo),這樣蛇身的坐標(biāo)都可以通過(guò)蛇頭的坐標(biāo)推導(dǎo)出來(lái),從而實(shí)現(xiàn)整個(gè)3段蛇身的顯示。在點(diǎn)亮蛇頭坐標(biāo)的過(guò)程中,先設(shè)計(jì)了一個(gè)新函數(shù)Set_Display(),功能是只需要給出屏幕中某點(diǎn)的坐標(biāo)和亮滅信號(hào),就可以實(shí)現(xiàn)該點(diǎn)的點(diǎn)亮或者熄滅。Set_Display()原型如下:接下來(lái)調(diào)用Set_Display()實(shí)現(xiàn)貪吃蛇的蛇身顯示。具體程序?qū)崿F(xiàn)如下: 然后食物的顯示,包括初始顯示和隨機(jī)產(chǎn)生食物,這里通過(guò)chDispRam和新函數(shù)Food()來(lái)完成。Food()函數(shù)通過(guò)把隨機(jī)數(shù)賦給食物坐標(biāo)來(lái)實(shí)現(xiàn)食物的隨機(jī)顯示。Food()原型如下: 2.2.2貪吃蛇行進(jìn)和吃食物蛇身變長(zhǎng)設(shè)計(jì) 游戲開(kāi)始時(shí),定義了新函數(shù)Move(),設(shè)置貪吃蛇從初始位置向右運(yùn)動(dòng),在運(yùn)動(dòng)過(guò)程中等待按鍵,根據(jù)按鍵來(lái)決定下一步怎么行進(jìn)。 按鍵控制的貪吃蛇行進(jìn)可以有4種轉(zhuǎn)向和4種直線(xiàn)運(yùn)動(dòng)方向。這里通過(guò)定義了4個(gè)新函數(shù)來(lái)實(shí)現(xiàn),分別是UpMove(),DownMove(),LeftMove(),RightMove().這些函數(shù)中,首先控制貪吃蛇轉(zhuǎn)向,等到轉(zhuǎn)向完畢后,將按轉(zhuǎn)向后的方向的直線(xiàn)行進(jìn),繼續(xù)等待下一條按鍵指令。 貪吃蛇在行進(jìn)過(guò)程中,每行進(jìn)一步,都要檢測(cè)蛇頭坐標(biāo)是否和食物坐標(biāo)相同,如果相同,則在行進(jìn)過(guò)程中蛇尾少熄滅一段,這樣在效果上就變相的實(shí)現(xiàn)了蛇身的增長(zhǎng)。在對(duì)比蛇頭和食物坐標(biāo)的過(guò)程中,定義了一個(gè)新函數(shù)Judge_Food()來(lái)實(shí)現(xiàn)。3程序流程圖與主要函數(shù)說(shuō)明3.1程序運(yùn)行的主函數(shù)(void main):3.2 UpMove(),DownMove(),LeftMove(),RightMove()功能類(lèi)似,下面以RightMove()為例介紹函數(shù)功能:4.測(cè)試效果與分析4.1初始界面測(cè)試 4.2功能測(cè)試4.2.1出現(xiàn)食物4.4.2出現(xiàn)蛇4.2.3蛇的移動(dòng)界面 (a)左移 (b)右移 (c)上移 (d)下移4.3游戲結(jié)束界面 4.4結(jié)果說(shuō)明 測(cè)試結(jié)果分為開(kāi)機(jī)界面測(cè)試、貪吃蛇行進(jìn)和吃食物的功能測(cè)試以及貪吃蛇撞墻后游戲結(jié)束閃爍界面測(cè)試。測(cè)試結(jié)果為:以上提及的功能均能正常工作,貪吃蛇在上下左右四個(gè)方向行進(jìn)過(guò)程中和從四個(gè)方向去吃食物的過(guò)程中,均能流暢準(zhǔn)確的完成,滿(mǎn)足設(shè)計(jì)的要求。根據(jù)結(jié)果,程序仍有需要改進(jìn)的地方,比如說(shuō)貪吃蛇的行進(jìn)速度,和貪吃蛇形狀的設(shè)計(jì),在此設(shè)計(jì)過(guò)程中,貪吃蛇的速度較為緩慢,為了改進(jìn)這一狀況,這是以后的工作重點(diǎn)。 5.收獲與體會(huì)通過(guò)本次課程設(shè)計(jì),我受益匪淺,收獲很多。從一開(kāi)始的迷茫,到后來(lái)的逐漸清晰,自己對(duì)本次設(shè)計(jì)的框架和思想有了更加深刻的理解,對(duì)于ARM的硬件結(jié)構(gòu)有了一個(gè)全新的認(rèn)識(shí)。在本次設(shè)計(jì)過(guò)程中,自己遇到了很多的困難,對(duì)很多函數(shù)的使用也不了解,但是通過(guò)與同學(xué)交流并查看相關(guān)資料,經(jīng)過(guò)多次嘗試,我解決了這些問(wèn)題,每一次問(wèn)題的解決都是對(duì)自己能力的提升和鍛煉。書(shū)本上的知識(shí)畢竟只是理論,要與實(shí)踐結(jié)合起來(lái),這樣才能更好的學(xué)習(xí),希望以后能有更多這樣的機(jī)會(huì),感謝老師的指導(dǎo)與付出。附錄:/ 設(shè)置屏幕上某點(diǎn)的亮滅函數(shù)/void Set_Display(uint8 x,uint8 y,uint8 k)/設(shè)置(y,x)點(diǎn)的亮(1)或者滅(0),顯示屏上橫為y,豎為x,函數(shù)這樣和一般坐標(biāo)系就一致 uint8 xx,jj,kk,tt; xx=x; kk=y/8; /在第幾列 jj=y%8; /在該列的第幾位 tt=0x01; if(k=1) if(jj!=0) tt=tt(8-jj);/找到相應(yīng)的位置賦值 chDispRamxkk=chDispRamxkk| tt; else chDispRamxkk-1=chDispRamxkk-1| tt; else if(k=0) if(jj!=0) tt=tt(8-jj); /找到相應(yīng)的位置賦值 chDispRam2xkk=chDispRamxkk&tt; return chDispRam2xkk; /游戲開(kāi)始后貪吃蛇初始行進(jìn)函數(shù)/void Move()/蛇初始運(yùn)動(dòng)方向?yàn)橄蛴?while(1) Set_Display(SX,+SY,1);/蛇頭向前一點(diǎn) Judge_Food();/直線(xiàn)運(yùn)動(dòng),判斷食物 Set_Display(SX,SY-SL,0); /蛇尾滅一個(gè)點(diǎn) switch( Key_Num ) /檢測(cè)是否向上或者向下的按鍵 case KEY1:/鍵1表示向上 Key_Num = 0; UpMove(); break; case KEY2:/鍵2表示向下 Key_Num = 0; DownMove(); break; default: Key_Num = 0; break; /貪吃蛇向右轉(zhuǎn)向函數(shù)/void RightMove()/向右運(yùn)動(dòng) Judge_Direction(); sx=SX;sy=SY;sl=SL; if(JD=1) /向上運(yùn)動(dòng)時(shí) JD=0; while(1) /正在向右轉(zhuǎn)彎 if(sl!=0) Set_Display(SX,+SY,1); Set_Display(sx-(sl-1),sy,0); if(foodsignal=1)&(sl=2) /目的是在在轉(zhuǎn)彎過(guò)程中,吃到食物,蛇長(zhǎng)變長(zhǎng) SL=SL+1; sl=sl-2; else sl-; else break; else if(JD=2) /向下運(yùn)動(dòng)時(shí) JD=0; while(1) /正在向右轉(zhuǎn)彎 if(sl!=0) Set_Display(SX,+SY,1); Set_Display(sx+(sl-1),sy,0); if(foodsignal=1)&(sl=2) /目的是在在轉(zhuǎn)彎過(guò)程中,吃到食物,蛇長(zhǎng)變長(zhǎng) SL=SL+1; sl=sl-2; else sl-; else break; while(1)/轉(zhuǎn)向完畢后直線(xiàn)行進(jìn) Set_Display(SX,+SY,1);/蛇頭向前一點(diǎn) Judge_Food();/直線(xiàn)運(yùn)動(dòng),判斷食物 Set_Display(SX,SY-SL,0); /蛇尾滅一個(gè)點(diǎn) switch( Key_Num ) /檢測(cè)是否向上或者向下的按鍵 case KEY1:/鍵1表示向上 Key_Num = 0; UpMove(); break; case KEY2:/鍵2表示向下 Key_Num = 0; DownMove(); break; default: Key_Num = 0; break; /貪吃蛇向上轉(zhuǎn)向函數(shù)/void UpMove() Judge_Direction();sx=SX;sy=SY;sl=SL; if(JD=3) /向左運(yùn)動(dòng)時(shí) JD=0; while(1) /正在向上轉(zhuǎn)彎 if(sl!=0) Set_Display(+SX,SY,1); Set_Display(sx,sy-(sl-1),0); if(foodsignal=1)&(sl=2) /目的是在在轉(zhuǎn)彎過(guò)程中,吃到食物,蛇長(zhǎng)變長(zhǎng) SL=SL+1; sl=sl-2; else sl-; else break; else if(JD=4) /向右運(yùn)動(dòng)時(shí) JD=0; while(1) /正在向上轉(zhuǎn)彎 if(sl!=0) Set_Display(+SX,SY,1); Judge_Wall(); Set_Display(sx,sy-(sl-1),0); if(foodsignal=1)&(sl=2) /目的是在在轉(zhuǎn)彎過(guò)程中,吃到食物,蛇長(zhǎng)變長(zhǎng) SL=SL+1; sl=sl-2; else sl-; else break; while(1) /轉(zhuǎn)向完畢后直線(xiàn)行進(jìn) Set_Display(+SX,SY,1); /蛇頭向前一點(diǎn) Judge_Wall(); Judge_Food(); /直線(xiàn)運(yùn)動(dòng),判斷食物 Set_Display(SX-SL,SY,0); /蛇尾滅一個(gè)點(diǎn) switch( Key_Num ) /檢測(cè)是否向左或者向右的按鍵 case KEY3: /鍵3表示向左 Key_Num = 0; LeftMove(); break; case KEY4: /鍵4表示向右 Key_Num = 0; RightMove(); break; default: Key_Num = 0; break; /貪吃蛇向左轉(zhuǎn)向函數(shù)/void LeftMove() Judge_Direction();sx=SX;sy=SY;sl=SL; if(JD=1) /向上運(yùn)動(dòng)時(shí) JD=0; while(1) /正在向左轉(zhuǎn)彎 if(sl!=0) Set_Display(SX,-SY,1); Set_Display(sx-(sl-1),sy,0); /運(yùn)動(dòng)時(shí)蛇頭坐標(biāo)再變化 if(foodsignal=1)&(sl=2) /目的是在在轉(zhuǎn)彎過(guò)程中,吃到食物,蛇長(zhǎng)變長(zhǎng) SL=SL+1; sl=sl-2; else sl-; else break; else if(JD=2) /向下運(yùn)動(dòng)時(shí) JD=0; while(1) /正在向左轉(zhuǎn)彎 if(sl!=0) Set_Display(SX,-SY,1); Set_Display(sx+(sl-1),sy,0); if(foodsignal=1)&(sl=2) /目的是在在轉(zhuǎn)彎過(guò)程中,吃到食物,蛇長(zhǎng)變長(zhǎng) SL=SL+1; sl=sl-2; else sl-; else break; while(1) /轉(zhuǎn)向完畢后直線(xiàn)行進(jìn) Set_Display(SX,-SY,1); /蛇頭向前一點(diǎn) Judge_Food(); /直線(xiàn)運(yùn)動(dòng),判斷食物 Set_Display(SX,SY+SL,0); /蛇尾滅一個(gè)點(diǎn) switch( Key_Num ) /檢測(cè)是否向上或者向下的按鍵 case KEY1: /鍵1表示向上 Key_Num = 0; UpMove(); break; case KEY2: /鍵2表示向下 Key_Num = 0; DownMove(); break; default: Key_Num = 0; break; /貪吃蛇向下轉(zhuǎn)向函數(shù)/void DownMove() Judge_Direction();sx=SX;sy=SY;sl=SL; if(JD=3) /向左運(yùn)動(dòng)時(shí) JD=0; while(1) /正在向下轉(zhuǎn)彎 if(sl!=0) Set_Display(-SX,SY,1); Set_Display(sx,sy+(sl-1),0); if(foodsignal=1)&(sl=2) /目的是在在轉(zhuǎn)彎過(guò)程中,吃到食物,蛇長(zhǎng)變長(zhǎng) SL=SL+1; sl=sl-2; else sl-; else break; else if(JD=4) /向右運(yùn)動(dòng)時(shí) JD=0; while(1) /正在向下轉(zhuǎn)彎 if(sl!=0) Set_Display(-SX,SY,1); Set_Display(sx,sy-(sl-1),0); if(foodsignal=1)&(sl=2) /目的是在在轉(zhuǎn)彎過(guò)程中,吃到食物,蛇長(zhǎng)變長(zhǎng) SL=SL+1; sl=sl-2; else sl-; else break; while(1) /轉(zhuǎn)向完畢后直線(xiàn)行進(jìn) Set_Display(-SX,SY,1); /蛇頭向前一點(diǎn) Judge_Food(); /直線(xiàn)運(yùn)動(dòng),判斷食物 Set_Display(SX-SL,SY,0); /蛇尾滅一個(gè)點(diǎn) switch( Key_Num ) /檢測(cè)是否向左或者向右的按鍵 case KEY3: /鍵3表示向左 Key_Num = 0; LeftMove(); break; case KEY4: /鍵4表示向右 Key_Num = 0; RightMove(); break; default: Key_Num = 0; break; /判斷貪吃蛇行進(jìn)方向函數(shù)/void Judge_Direction()/運(yùn)動(dòng)方向判斷,JD=1是向上,2是向下,3是向左,4是向右uint8 Test_Light(); if(chDispRam2SX+1SY=0) JD=1;if(chDispRam2SX-1SY=0) JD=2;if(chDispRam2SXSY-1=0) JD=3;if(chDispRam2SXSY+1=0) JD=4;/食物生成函數(shù)/void Food() /生成食物 foodx=rand(); /控制食物在一定范圍內(nèi) foodx=foodx%35; foody=rand(); foody=foody%35; Set_Display(foodx,foody,1); /顯示隨機(jī)的到的食物/游戲結(jié)束顯示/void GameOver()/游戲結(jié)束顯示 LCD_clr();w_cd(0x38,0); display(2,2,5,Game Over);DELAY(3000000);/判斷貪吃蛇是否撞墻/void Judge_Wall() /判斷蛇是否 撞墻 if(SX=62|SX=1|SY=1|SY=127) / LCD_clr(); while(1) GameOver(); /直線(xiàn)行進(jìn)時(shí),判斷是否有食物/void Judge_Food() /直線(xiàn)運(yùn)動(dòng),判斷食物 foodsignal=0; if(SX=foodx)&(SY=foody) Food(); +SL; /轉(zhuǎn)向過(guò)程中,判斷是否有食物/void Judge_Food_Turn() /轉(zhuǎn)彎過(guò)程中,判斷食物 foodsignal=0; if(SX=foodx)&(SY=foody) Food(); foodsignal=1; /主函數(shù)/void main () uint8 hanzi64 = 貪吃蛇;uint8 hanzi264 = ARM 課程設(shè)計(jì);uint8 hanzi364 = 張廣申;uint16 i = 0;sint8 j=0;uint16 ADCBuff, ADCTemp;SYS_Init();/initial();w_cd(0x38,0);Write_CH452_comd( CH452_SYSON2W );/Write_CH452_comd(CH452_NO_BCD); / 不譯碼,8個(gè)數(shù)碼管for( i = 0; i 3; i+) display
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 垂直式扁錠鑄造機(jī)項(xiàng)目投資可行性研究分析報(bào)告(2024-2030版)
- 教育行業(yè)的技術(shù)創(chuàng)新路徑研究-基于實(shí)驗(yàn)室內(nèi)外的探討
- 2024-2030年中國(guó)生態(tài)養(yǎng)豬行業(yè)市場(chǎng)深度分析及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 2025年中國(guó)鵝肝醬行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y方向研究報(bào)告
- 中國(guó)降雨和徑流軟件行業(yè)市場(chǎng)占有率及投資前景預(yù)測(cè)分析報(bào)告
- 教育心理學(xué)在學(xué)生思維訓(xùn)練中的應(yīng)用
- 提升學(xué)生學(xué)習(xí)滿(mǎn)意度的教育心理學(xué)方法
- 中國(guó)電聲元件行業(yè)市場(chǎng)發(fā)展現(xiàn)狀及投資方向研究報(bào)告
- 2025年中國(guó)細(xì)口瓶行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 2025年中國(guó)柔性O(shè)LED面板市場(chǎng)前景預(yù)測(cè)及投資規(guī)劃研究報(bào)告
- 散劑的工藝流程
- 七年級(jí)數(shù)學(xué)新北師大版(2024)下冊(cè)第一章《整式的乘除》單元檢測(cè)習(xí)題(含簡(jiǎn)單答案)
- 敏感肌膚的護(hù)理方法
- 《課件鐵路發(fā)展史》課件
- 2025年貴州茅臺(tái)酒廠集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 消渴中醫(yī)護(hù)理查房
- 兒童護(hù)照辦理委托書(shū)
- 移動(dòng)通信汛期安全課件
- 2025年江西江銅集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 《中藥調(diào)劑技術(shù)》課件-中藥調(diào)劑的概念、起源與發(fā)展
- 阿爾茨海默病源性輕度認(rèn)知障礙診療中國(guó)專(zhuān)家共識(shí)2024解讀
評(píng)論
0/150
提交評(píng)論