arm課程設(shè)計(jì)俄羅斯方塊_第1頁
已閱讀1頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p>  1.設(shè)計(jì)任務(wù)及要求1</p><p>  2.總體設(shè)計(jì)思路及功能描述1</p><p>  2.1設(shè)計(jì)思路1</p><p>  2.2功能描述2</p><p>  2.3程序流程圖2</p>&l

2、t;p>  3.各部分程序功能及詳細(xì)說明3</p><p>  3.1游戲界面函數(shù)3</p><p>  3.2方塊顯示基本函數(shù)游戲界面函數(shù)4</p><p>  3.2.1繪制方塊4</p><p>  3.2.2擦除方塊4</p><p>  3.2.3隨機(jī)生成一個(gè)方塊5</p&

3、gt;<p>  3.3方塊處理基本函數(shù)游戲界面函數(shù)5</p><p>  3.3.1左移函數(shù)5</p><p>  3.3.2變形函數(shù)6</p><p>  3.3.3碰撞函數(shù)6</p><p>  3.3.4消行函數(shù)7</p><p>  4.調(diào)試的步驟及調(diào)試過程中出現(xiàn)的問題以及

4、解決方法8</p><p>  4.1碰撞函數(shù)調(diào)試方塊8</p><p>  4.2其它函數(shù)調(diào)試方塊9</p><p>  4.2.1隨機(jī)生成一個(gè)方塊變形函數(shù)9</p><p>  4.2.2變形函數(shù)9</p><p>  4.2.3消行函數(shù)與得分、等級計(jì)算10</p><p&

5、gt;  5.設(shè)計(jì)心得體會10</p><p><b>  附錄:11</b></p><p>  (一)源程序(主函數(shù))11</p><p> ?。ǘ﹨⒖嘉墨I(xiàn)13</p><p><b>  設(shè)計(jì)任務(wù)及要求</b></p><p>  本實(shí)驗(yàn)主要是用arm實(shí)驗(yàn)箱

6、實(shí)現(xiàn)一個(gè)簡單的游戲設(shè)計(jì),我選擇的是設(shè)計(jì)一個(gè)俄羅斯方塊小游戲,主要任務(wù)是實(shí)現(xiàn)方塊的移動、變形、隨機(jī)出現(xiàn)下一個(gè)方塊、觸屏控制、停止、嵌套、消行、計(jì)分等功能。要求:良好的方塊形狀設(shè)計(jì),繪制七種常見的基本圖形(方形、長條形、7形、反7形、Z形、反Z形、T形),各個(gè)方塊要實(shí)現(xiàn)它的移動、變形;良好的用戶界面,有關(guān)分?jǐn)?shù)和等級顯示等。</p><p>  總體設(shè)計(jì)思路及功能描述</p><p><b

7、>  設(shè)計(jì)思路</b></p><p>  整個(gè)游戲界面的設(shè)計(jì)和控制:設(shè)計(jì)一個(gè)左邊是10X15帶有框格的游戲界面。右邊為控制和顯示的界面,控制自然是繪制按鍵圖案通過觸屏控制來實(shí)現(xiàn)。顯示的內(nèi)容有下一個(gè)、得分、等級。</p><p>  方塊的移動:通過定時(shí)器1,改變方塊左右移動的地址來實(shí)現(xiàn)。</p><p>  方塊的變形:可通過運(yùn)用三維數(shù)組儲存7個(gè)

8、基本方塊形狀,采用線性代數(shù)轉(zhuǎn)置的思路改變數(shù)組的值并設(shè)定一個(gè)緩沖區(qū)儲存變形數(shù)組,從而達(dá)到變形的效果。</p><p>  方塊的碰邊處理:可設(shè)定一個(gè)二維數(shù)組儲存整個(gè)游戲界面的最新狀態(tài),有方塊為1,沒有則為0,并在游戲界面周圍填入1,通過方塊地址和數(shù)組位置的轉(zhuǎn)換判定數(shù)組中的值,為0說明可走,為1則不能通過,從而實(shí)現(xiàn)碰邊處理。</p><p>  方塊的嵌套:與碰邊原理相似,可將之前停止在界面上

9、的方塊位置對應(yīng)數(shù)組中的值賦1,再判斷當(dāng)前方塊每一列的最后一行下是否有方塊,實(shí)現(xiàn)方塊嵌套。</p><p>  方塊的隨機(jī)出現(xiàn):當(dāng)方塊到達(dá)最后一行或嵌套成功后停止,然后將出現(xiàn)下一個(gè)方塊,可通過定時(shí)器取出末尾三位實(shí)現(xiàn)隨機(jī)性。并在右邊顯示下一個(gè)方塊的形狀。</p><p>  消行處理:可通過處理界面的數(shù)組判斷某一行是否都為1,若為1就執(zhí)行將上一行賦給下一行,并將第一行賦為0。</p>

10、;<p>  分?jǐn)?shù)及等級的計(jì)算:當(dāng)方塊到達(dá)最后一行或嵌套成功后停止分?jǐn)?shù)加1分,當(dāng)消行成功加10飯呢,當(dāng)分?jǐn)?shù)超過100分時(shí)等級加1。</p><p><b>  功能描述</b></p><p><b>  左、右、下移動;</b></p><p><b>  方塊變形;</b></

11、p><p>  隨機(jī)出現(xiàn)下一個(gè)方塊;</p><p>  觸屏控制界面(左、右、下、變形、開始、暫停、結(jié)束)</p><p><b>  左右碰撞檢測;</b></p><p><b>  嵌套停止判斷</b></p><p><b>  消行</b><

12、;/p><p><b>  得分等級顯示</b></p><p><b>  程序流程圖</b></p><p>  圖 2-1 程序流程圖</p><p>  各部分程序功能及詳細(xì)說明</p><p><b>  游戲界面函數(shù)</b></p>

13、<p>  本實(shí)驗(yàn)設(shè)計(jì)了一個(gè)左邊是10X15附有框圖的游戲界面。右邊為控制和顯示的界面,分別有顯示下一個(gè)方塊、開始、結(jié)束、暫停、變形、向左、向右、向下、得分、等級等,并且大部分都是通過觸屏控制達(dá)到相應(yīng)效果。</p><p>  void InitGame ()</p><p><b>  {</b></p><p><b>

14、;  U16 i,j;</b></p><p>  Set_Color(GUI_BLACK); //設(shè)定背景顏色API</p><p>  Fill_Rect(0,0,639,479); //填充底色</p><p>  for(i=0;i<10;i++) //10x15格游戲界面</p>

15、<p>  for(j=0;j<15;j++) </p><p><b>  {</b></p><p>  Set_Color (GUI_BLACK);</p><p>  Draw_VLine(10+i*32, 15, 480);//豎線</p><p>  Draw_HLine(15+j*30,

16、10, 10+11*32); //橫線</p><p>  Set_Color (GUI_WHITE); //填充白色</p><p>  Fill_Rect(10+i*32+1, 15+j*30+1,10+(i+1)*32-1,15+(j+1)*30-1);//填充 </p><p><b>  }</b></p>&

17、lt;p>  Set_Color(GUI_GREEN);</p><p>  Set_Font (&CHINESE_FONT16); </p><p>  Disp_String (CN_start"下一個(gè)"CN_end,9*40-20,27);</p><p>  Disp_String (CN_start&q

18、uot;得分"CN_end,9*40-10,5*40+10);</p><p>  Disp_String (CN_start"等級"CN_end,13*40-10,5*40+10);</p><p>  Set_Color(GUI_YELLOW);</p><p>  Fill_Rect(14*40-20,20,15*40,60);/

19、/開始、結(jié)束、暫停</p><p>  Fill_Rect(14*40-20,80,15*40,120);</p><p>  Fill_Rect(14*40-20,140,15*40,180);</p><p>  Fill_Circle(12*40,7*40+20,40);//變形、左、右、下</p><p>  Fill_Circle(

20、10*40,9*40+10,40);</p><p>  Fill_Circle(14*40,9*40+10,40);</p><p>  Fill_Circle(12*40,11*40-10,40);</p><p>  Set_BkColor(GUI_YELLOW);</p><p>  Set_Color(GUI_RED);</p

21、><p>  Disp_String (CN_start"開始"CN_end,14*40-5,35);</p><p>  Disp_String (CN_start"結(jié)束"CN_end,14*40-5,95);</p><p>  Disp_String (CN_start"暫停"CN_end,14*40-5

22、,155);</p><p>  Disp_String (CN_start"變形"CN_end,12*40-15,8*40-30);</p><p>  Disp_String (CN_start"向左"CN_end,10*40-15,9*40);</p><p>  Disp_String (CN_start"向

23、右"CN_end,14*40-15,9*40);</p><p>  Disp_String (CN_start"向下"CN_end,12*40-15,11*40-20);</p><p><b>  }</b></p><p>  方塊顯示基本函數(shù)游戲界面函數(shù)</p><p><b&

24、gt;  繪制方塊</b></p><p>  本實(shí)驗(yàn)設(shè)計(jì)了一個(gè)三維數(shù)組儲存7個(gè)基本方塊形狀,通過數(shù)組里的數(shù)將方塊繪制出來。</p><p>  void Drawblock(U16 x,U16 y,U16 z)</p><p><b>  {</b></p><p><b>  U16 i,j;&

25、lt;/b></p><p>  for(i=0;i<4;i++)</p><p>  for(j=0;j<4;j++) </p><p><b>  {</b></p><p>  if(block[z][j][i]==1)</p><p>  { Set_Color

26、(GUI_BLACK); //邊框黑色</p><p>  Draw_VLine(x+i*32+1, y+j*30+1, y+(j+1)*30-1);//豎線</p><p>  Draw_VLine(x+(i+1)*32-1, y+j*30+1, y+(j+1)*30-1);</p><p>  Draw_HLine(y+j*30+1, x+i*32+1,

27、 x+(i+1)*32-1); //橫線</p><p>  Draw_HLine(y+(j+1)*30-1, x+i*32+1, x+(i+1)*32-1);</p><p>  Set_Color (GUI_BLUE); //填充藍(lán)色</p><p>  Fill_Rect(x+i*32+2, y+j*30+2,x+(i+1)*32-2,y+(j+1)*

28、30-2);//填充</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  擦除方塊</b></p><p>  通過將當(dāng)前有方塊的地方填

29、充成白色達(dá)到擦除效果。</p><p>  void Eraseblock(U16 x,U16 y,U16 z)</p><p><b>  {</b></p><p><b>  U16 i,j;</b></p><p>  for(i=0;i<4;i++)</p><p

30、>  for(j=0;j<4;j++) </p><p><b>  {</b></p><p>  if(block[z][j][i]==1)</p><p><b>  {</b></p><p>  Set_Color (GUI_WHITE); //填充白色</p&g

31、t;<p>  Fill_Rect(x+i*32+1, y+j*30+1,x+(i+1)*32-1,y+(j+1)*30-1);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>

32、;<b>  隨機(jī)生成一個(gè)方塊</b></p><p>  通過取出定時(shí)器1的后三位值產(chǎn)生隨機(jī)值,為了避免取值時(shí)間幾乎相同隨機(jī)值相近的概率比較高,所以采用當(dāng)前時(shí)刻取出的值與之前相加達(dá)到更加隨機(jī)的效果。并且在右側(cè)下一個(gè)中顯示出來。</p><p>  void Creatblock()</p><p><b>  {</b>

33、</p><p><b>  U16 i,j;</b></p><p>  s=rTCNTO1&0x0007+s;//取隨機(jī)值&0x0007取后三位</p><p>  for(i=0;i<4;i++)</p><p>  for(j=0;j<4;j++) </p><p

34、><b>  {</b></p><p>  if(block[ZZ][j][i]==1)</p><p><b>  {</b></p><p>  Set_Color (GUI_BLACK); //填充黑色</p><p>  Fill_Rect(9*40+i*32+1, 40+j

35、*30+1,9*40+(i+1)*32-1,40+(j+1)*30-1);</p><p><b>  }</b></p><p><b>  }</b></p><p>  k=s&0x0007;</p><p>  Drawblock(9*40,40,k);</p><

36、;p>  Delay(50);</p><p><b>  }</b></p><p>  方塊處理基本函數(shù)游戲界面函數(shù)</p><p><b>  左移函數(shù)</b></p><p>  當(dāng)觸屏界面的左移按鍵被按下后,方塊首地址的列坐標(biāo)將會減去32像素達(dá)到左移一格的效果。根據(jù)取出的最左列坐標(biāo)判

37、斷方塊是否到達(dá)游戲界面最左側(cè),若不是繼續(xù)左移,若是則不再左移。右移、下降同理,下面不再贅述。</p><p>  void Goleft()</p><p><b>  {</b></p><p>  U16 m,n,k;</p><p>  k=getL(); m=k/10;n=k%10;</p><

38、;p>  rTCON=(0<<8); //time1 stop</p><p>  if(oldblock[(m*30+i*30+YY)/30][((n+1)*32+XX)/32-1]==1);</p><p><b>  else</b></p><p><b>  {</b></p>

39、<p>  Eraseblock(XX,i*30+YY,ZZ); //擦除 </p><p>  XX=XX-32;//左移</p><p>  Drawblock(XX,i*30+YY,ZZ); </p><p><b>  } </b></p><p>  rTCON=(1<&

40、lt;11)|(0<<9)|(1<<8);//time1 start</p><p><b>  }</b></p><p><b>  變形函數(shù)</b></p><p>  利用轉(zhuǎn)置的原理,達(dá)到方塊變形的效果。先將當(dāng)前數(shù)組的值賦給緩沖區(qū),然后再將緩沖區(qū)轉(zhuǎn)置變形后的值再賦給原來的數(shù)組。</p&

41、gt;<p>  void Changeblock(U16 z)</p><p><b>  {</b></p><p><b>  U16 a,b;</b></p><p>  rTCON =(0<<8); //time1 stop</p><p>  Eraseb

42、lock(XX,i*30+YY,ZZ); //擦除</p><p>  for(a=0;a<4;a++)</p><p>  for(b=0;b<4;b++) </p><p><b>  {</b></p><p>  block[7][a][b]=block[z][a][b];//賦值緩沖區(qū)</p

43、><p><b>  } </b></p><p>  for(a=0;a<4;a++)</p><p>  for(b=0;b<4;b++) </p><p><b>  {</b></p><p>  block[z][a][b]=block[7][3-b][a

44、];//裝置變形</p><p><b>  }</b></p><p>  rTCON=(1<<11)|(0<<9)|(1<<8);//time1 start</p><p>  Drawblock(XX,i*30+YY,ZZ); //畫出新方塊</p><p><b&g

45、t;  }</b></p><p><b>  碰撞函數(shù)</b></p><p>  取出每一列最后一行,判斷它的同列的下一行對應(yīng)的游戲界面數(shù)組是否為1,若不是則繼續(xù)行走,若是則停止并把當(dāng)前方塊相應(yīng)數(shù)組中的值置1。</p><p>  void Checkverge()</p><p><b>  

46、{</b></p><p>  U16 a,b,m0=0,m1,m2,m3;</p><p>  for(a=0;a<4;a++)</p><p><b>  {</b></p><p>  if(block[ZZ][a][0]) m0=a;</p><p>  if(block

47、[ZZ][a][1]) m1=a;</p><p>  if(block[ZZ][a][2]) m2=a;</p><p>  if(block[ZZ][a][3]) m3=a; </p><p><b>  } </b></p><p><b>  if</b></p><p

48、><b>  (</b></p><p>  (oldblock[((m0+1)*30+i*30+YY)/30][(XX)/32]==1)</p><p>  ||(oldblock[((m1+1)*30+i*30+YY)/30][(32+XX)/32]==1)</p><p>  ||(oldblock[((m2+1)*30+i*30+

49、YY)/30][(2*32+XX)/32]==1)</p><p>  ||(oldblock[((m3+1)*30+i*30+YY)/30][(3*32+XX)/32]==1)</p><p><b>  )</b></p><p><b>  {</b></p><p>  for(a=0;a&

50、lt;4;a++) </p><p>  for(b=0;b<4;b++) </p><p>  {if(block[ZZ][a][b]) </p><p><b>  { </b></p><p>  oldblock[(i*30+YY+a*30)/30][(XX+b*32)/32]=1;</p>

51、<p><b>  }</b></p><p><b>  } </b></p><p><b>  i=0;</b></p><p>  XX=3*32+10;</p><p>  YY=15-120;</p><p><b> 

52、 flag=1;</b></p><p>  fen=fen+1;</p><p><b>  }</b></p><p>  ok(((i+4)*30+YY)/30-5);//判斷消行</p><p><b>  }</b></p><p><b> 

53、 消行函數(shù)</b></p><p>  當(dāng)游戲界面數(shù)組的某一行全為1時(shí),則進(jìn)入消行,分?jǐn)?shù)加10并將上一行賦給下一行,第一行清0。若有n行全為1時(shí),分?jǐn)?shù)加10*n并將上n行賦給下n行,第一行到第n行清0。</p><p>  void ok(U8 y)//y:要判斷的行的坐標(biāo)</p><p><b>  {</b></p&g

54、t;<p>  U16 i,j,n,temp1=1,temp2=0;</p><p>  U8 flag_H;</p><p>  for(i=4;i>0;i--)</p><p><b>  {</b></p><p>  for(j=1;j<11;j++)</p><p&

55、gt;<b>  {</b></p><p>  temp1=temp1&&oldblock[y-i][j];//檢測是否可以消行</p><p>  temp2=temp2||oldblock[0][j];//檢測是否到第一行</p><p><b>  }</b></p><p>

56、;  if(temp1==1) </p><p><b>  {</b></p><p>  n++;//可以消的行數(shù)</p><p>  flag_H=1;//進(jìn)入消行標(biāo)志位</p><p><b>  }</b></p><p>  if(temp2==1) Gam

57、eover(); //游戲結(jié)束</p><p><b>  }</b></p><p>  if(flag_H==1)//進(jìn)入消行</p><p>  { flag_H=0;</p><p>  for(j=0;j<4;j++)</p><p>  for(i=1;i<11;i

58、++)</p><p>  {oldblock[y-j][i]=oldblock[y-j-n][i];//把上一行賦給下一行</p><p>  oldblock[n-j][i]=0;</p><p>  fen=fen+10*n;}</p><p><b>  }</b></p><p><

59、;b>  }</b></p><p>  調(diào)試的步驟及調(diào)試過程中出現(xiàn)的問題以及解決方法</p><p><b>  碰撞函數(shù)調(diào)試方塊</b></p><p>  最初我采用的是取點(diǎn)顏色函數(shù)U32 Get_Point(U16 x, U16 y);判斷當(dāng)前方塊的周圍是否有方塊,我們在方塊周圍畫上一個(gè)像素的黑色矩形,同時(shí)在游戲界面外

60、留相應(yīng)像素的黑線,取出方塊最左列、最右列、最下行的地址,并判斷相應(yīng)地址相隔兩個(gè)像素的點(diǎn)是否與方塊周圍的矩形一樣同為黑色,以此達(dá)到碰邊與停止的效果??墒窃谡{(diào)試的時(shí)候我發(fā)現(xiàn)函數(shù)取出的點(diǎn)與坐標(biāo)對應(yīng)的顏色不匹配,后來我發(fā)現(xiàn)我把行跟列調(diào)換了,還有很多地方都是,經(jīng)過了一番苦改。但是還是不行,我發(fā)現(xiàn)當(dāng)方塊運(yùn)行三四格后一定會相等,之前我以為是坐標(biāo)問題,仔細(xì)分析了好久,也修改了很多次,但還是沒有成功。至今我還不知道是什么原因。后來我放棄了這種方法,采用了

61、數(shù)組的方法,就是將游戲界面周圍都填上1,界面中的每一格都對應(yīng)數(shù)組中一個(gè)數(shù),通過判斷最左列的左邊、最右列的右邊、最下行的下面一行對應(yīng)數(shù)組中的數(shù)是否為1決定是否左移、右移、下降。在調(diào)試的時(shí)候,由于坐標(biāo)值比較亂,自己也沒有理清楚,所以調(diào)了很久,目前基本是可以實(shí)現(xiàn)停止、嵌套,如圖4-1。但有時(shí)候還是會出現(xiàn)異常,可能是判斷條件還不夠完善。</p><p>  圖 4-1 實(shí)現(xiàn)停止、嵌套示意圖</p><

62、;p><b>  其它函數(shù)調(diào)試方塊</b></p><p>  隨機(jī)生成一個(gè)方塊變形函數(shù)</p><p>  在調(diào)試時(shí)我發(fā)現(xiàn)隨機(jī)生成一個(gè)方塊是相同的概率很高,后來經(jīng)過分析才知道原來是因?yàn)槊看味际窃诜綁K停止時(shí)才取隨機(jī)值那么時(shí)間上很相近所以取出的值是相同的幾率就比較的大,我也曾想過要用c語言的隨機(jī)函數(shù)來做,不過后來靈機(jī)一動,我可以將上一次和當(dāng)前的值相加然后再與出7位

63、,那么它的值不就多樣了嗎?最后經(jīng)過調(diào)試發(fā)現(xiàn)果然隨機(jī)性增加了很多。</p><p><b>  變形函數(shù)</b></p><p>  在調(diào)試前我害怕改變原有基本方塊的圖形所以設(shè)置緩沖區(qū),想在變形時(shí)直接將當(dāng)前方塊賦給緩沖區(qū),將緩沖區(qū)變形后并直接顯示緩沖區(qū)里的數(shù)組,這樣就不會改變元數(shù)組的值了,但是調(diào)試后我才發(fā)現(xiàn)若是這樣的話那么變形后回到定時(shí)器方塊行走時(shí)又是變形前的方塊,并且

64、留下沒有擦除掉的方塊,因?yàn)椴脸惋@示的都是原數(shù)組里的方塊。所以后來我改變了方案,就是將緩沖區(qū)里變形后的數(shù)組再賦給原來的數(shù)組,不過這樣造成一個(gè)問題,就是每次隨生成一個(gè)方塊所對應(yīng)的都是上次變形后儲存在數(shù)組中的數(shù),不過問題不大對整體沒有什么大影響。</p><p>  消行函數(shù)與得分、等級計(jì)算</p><p>  在基本實(shí)現(xiàn)了碰撞函數(shù)后消行一直是我最頭疼的問題,最初我是判斷游戲界面數(shù)組中的每一行

65、是否都為1,后來經(jīng)過同學(xué)的提點(diǎn)后改為判斷當(dāng)前方塊停止的那四行。顯示分?jǐn)?shù)時(shí),由于數(shù)組大小取錯(cuò)了,所以最后一位顯示亂碼,后來又因?yàn)橹骱瘮?shù)和分?jǐn)?shù)改變的地方都寫了sprintf(); 函數(shù),所以顯示的分?jǐn)?shù)出現(xiàn)錯(cuò)誤,經(jīng)過修改后,分?jǐn)?shù)可以正常顯示。但是消行還有一個(gè)問題,就是我的函數(shù)只能判斷相鄰行的消行和賦值,如果是隔行的話界面就會出現(xiàn)異常,所以函數(shù)還是需要進(jìn)一步修改。</p><p><b>  設(shè)計(jì)心得體會<

66、;/b></p><p>  經(jīng)過一周的設(shè)計(jì),終于基本完成了基于ARM的俄羅斯方塊游戲的設(shè)計(jì)。在設(shè)計(jì)之前原本以為這個(gè)題目很簡單,沒什么難度,但是當(dāng)自己親手做的時(shí)候才發(fā)現(xiàn)很多東西并不容易實(shí)現(xiàn)。比如:如何使方塊變形、如何判斷俄羅斯方塊是否可以停止、如何讓方塊嵌套、如何消行并重新繪制游戲區(qū)界面,同時(shí)計(jì)算分?jǐn)?shù)等等。</p><p>  不過,問題總有解決的辦法,當(dāng)每個(gè)難題有了思路和突破口后,

67、我都會查找相關(guān)資料仔細(xì)研究并和同學(xué)探討,最后,經(jīng)過老師和同學(xué)的幫忙,我終于完成了基本的移動、變形、停止、嵌套、消行、計(jì)分等功能。我總結(jié)了一下,在程序設(shè)計(jì)的時(shí)候出現(xiàn)的問題主要是一些判斷條件的制定,有些判斷條件還沒有想全,當(dāng)執(zhí)行某些操作時(shí)就會出現(xiàn)異常,比如:讓俄羅斯方塊停止的判斷,如果判斷條件不完善就會造成有的可以停下,有的還是繼續(xù)走。</p><p>  通過這次這次課程設(shè)計(jì),我對游戲的編程有了初步的認(rèn)識,游戲的編

68、程就是要注意很多細(xì)節(jié)性的東西,我也終于體會到了何謂“細(xì)節(jié)決定成敗”,從系統(tǒng)設(shè)計(jì)到游戲代碼的實(shí)現(xiàn),每一步都是對自己的挑戰(zhàn),由于自己的理論與實(shí)踐能力都不是很強(qiáng),所以所編寫的程序工作還不是很穩(wěn)定,還有很多地方需要改善。比如可以加入語音、可以設(shè)置等級不同的速度、和不同的方塊可以用不同的顏色等等。雖然這次編寫的程序工作不是很穩(wěn)定,但是在這個(gè)過程中我感受到了編程的快樂,也學(xué)到了很多東西,我想我會繼續(xù)將這個(gè)程序完善的。</p><

69、p><b>  附錄:</b></p><p> ?。ㄒ唬┰闯绦颍ㄖ骱瘮?shù))</p><p>  void Main(void)</p><p><b>  {</b></p><p>  TouchINT_Init();</p><p>  Target_Init();

70、</p><p>  GUI_Init();</p><p>  InitGame ();</p><p>  Timer1_init();</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>

71、  if(time_num==200)</p><p><b>  {</b></p><p>  time_num=0;</p><p>  Checkverge();//碰撞檢測</p><p>  ok(((i+4)*30+YY)/30-5);//判斷消行</p><p>  if(flag

72、==1)</p><p>  { ZZ=k; </p><p><b>  flag=0;</b></p><p>  Creatblock();//隨機(jī)生成一個(gè)方塊 </p><p><b>  } </b></p><p>  Eraseblock(XX,i*

73、30+YY,ZZ);</p><p>  Drawblock(XX,(++i)*30+YY,ZZ);</p><p><b>  }</b></p><p>  if (touchok)//觸屏</p><p><b>  {</b></p><p>  if(( 11

74、*40<TOUCH_X && TOUCH_X<13*40) &&(6*40+20<TOUCH_Y && TOUCH_Y<8*40+20))</p><p>  Changeblock(ZZ);//變形</p><p>  else if((9*40<TOUCH_X && TOUCH_X<11

75、*40) &&(8*40+10<TOUCH_Y && TOUCH_Y<10*40+20))</p><p>  Goleft(); //左移</p><p>  else if((13*40<TOUCH_X && TOUCH_X<15*40) && (8

76、*40+10<TOUCH_Y && TOUCH_Y<10*40+20)) </p><p>  Goright(); //右移</p><p>  else if((11*40<TOUCH_X && TOUCH_X<13*40) && (10*40-10<TOUCH_Y &

77、;& TOUCH_Y<12*40-10))</p><p>  Godown(); //下降</p><p>  else if((14*40-20<TOUCH_X && TOUCH_X<15*40) && (20<TOUCH_Y && TOUCH_Y<60))</p><p&g

78、t;<b>  {</b></p><p>  rTCON=(1<<11)|(0<<9)|(1<<8); //time1 start</p><p>  Drawblock(9*40,40,k);</p><p><b>  }</b></p><p>  el

79、se if((14*40-20<TOUCH_X && TOUCH_X<15*40) && (80<TOUCH_Y && TOUCH_Y<120))</p><p>  Gameover(); //游戲結(jié)束</p><p>  else if((14*40-20<TOUCH_X && TO

80、UCH_X<15*40) && (140<TOUCH_Y && TOUCH_Y<180))</p><p>  rTCON=(0<<8); //time1 stop </p><p>  touchok=0;</p><p><b>  }</b></p><

81、;p>  ji=fen/100+1;</p><p>  Set_Color(GUI_RED);</p><p>  Set_BkColor(GUI_BLACK);</p><p>  Set_Font(&GUI_Font8x16); //設(shè)定字體類型API </p><p>  Disp_St

82、ring(score,10*40,5*40+10);</p><p>  Disp_String(level,14*40,5*40+10);</p><p>  sprintf(score,"%d",fen); //更新分?jǐn)?shù) </p><p>  sprintf(level,"%2d",ji); //

83、更新等級</p><p><b>  }</b></p><p><b>  }</b></p><p><b> ?。ǘ﹨⒖嘉墨I(xiàn)</b></p><p>  徐英慧.《ARM9嵌入式系統(tǒng)設(shè)計(jì)—基于s3c2410與linux》.北京航空航天大學(xué)出版社</p>&

84、lt;p>  楊元強(qiáng).酷比杯獲獎作品選登《LEGO俄羅斯》[J] .“酷比杯”游戲策劃大賽,2007</p><p>  譚浩強(qiáng).c程序設(shè)計(jì)[M] . 北京:清華大學(xué)出版社,2003</p><p>  杜春雷.《ARM系統(tǒng)結(jié)構(gòu)與體系》.清華大學(xué)出版社</p><p>  王田苗.嵌入式系統(tǒng)設(shè)計(jì)與實(shí)例開發(fā)(第2版).清華大學(xué)出版社,2003</p>

85、<p>  孫紀(jì)坤等. 嵌入式Linux系統(tǒng)開發(fā)技術(shù)詳解――基于ARM.人民郵電出版社,2006</p><p>  吳明暉等. 基于ARM的嵌入式系統(tǒng)開發(fā)與應(yīng)用.北京:人民郵電出版社,2004</p><p>  于明等.ARM9嵌入式系統(tǒng)設(shè)計(jì)與開發(fā)教程.電子工業(yè)出版社,2006</p><p>  魏洪興.嵌入式系統(tǒng)設(shè)計(jì)師教程.清華大學(xué)出版社,20

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論