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

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  課 程 小 論 文</b></p><p><b>  目錄</b></p><p>  一 問題分析和任務(wù)定義3</p><p><b>  1.問題分析3</b></p><p>  2.課程報(bào)告所用軟件3</p><

2、p><b>  3.設(shè)計(jì)目的4</b></p><p><b>  3.任務(wù)定義4</b></p><p><b>  二 邏輯設(shè)計(jì)5</b></p><p><b>  1.游戲流程圖5</b></p><p>  2.游戲功能敘述5&l

3、t;/p><p><b>  三 詳細(xì)設(shè)計(jì)7</b></p><p>  1.游戲界面設(shè)計(jì)7</p><p>  2.游戲控制設(shè)計(jì)7</p><p><b>  3.主類的實(shí)現(xiàn)7</b></p><p><b>  4.基本類設(shè)計(jì)8</b><

4、/p><p><b>  四 程序編碼10</b></p><p>  程序調(diào)試與測(cè)試18</p><p><b>  六 結(jié)果分析19</b></p><p>  本次課程設(shè)計(jì)讓我學(xué)習(xí)到了很多,也體會(huì)到編寫程序的不易,但我絕不會(huì)放棄。希望能在這條路上,走的更遠(yuǎn)。附錄(程序代碼)20</p

5、><p><b>  參考文獻(xiàn)35</b></p><p>  一 問題分析和任務(wù)定義</p><p><b>  1.問題分析</b></p><p>  游戲這個(gè)名稱一直就存在于每個(gè)人的日常生活中,如猜拳游戲、猜謎游戲、大地游戲、球類游戲等,林林總總,不勝枚舉,甚至于有些流行歌曲把人生也比喻為游戲

6、,好比“一場(chǎng)游戲一場(chǎng)夢(mèng)” 。因此,游戲?qū)τ诂F(xiàn)代人的成長(zhǎng)歷程,絕對(duì)是一個(gè)不可或缺的重要角色。</p><p>  “游戲”,最簡(jiǎn)單的定義,就是一種供人們娛樂休閑的快樂元素。從更專業(yè)的角度形容, “游戲”是具有特定行為模式、規(guī)則條件、身心娛樂及輸贏的一種行為表現(xiàn)。</p><p>  而俄羅斯方塊是一款風(fēng)靡全球的電視游戲機(jī)和掌上游戲機(jī)游戲,它曾經(jīng)造成的轟動(dòng)與經(jīng)濟(jì)價(jià)值可以說是游戲史上的一件大事。

7、這款游戲最是由蘇聯(lián)的游戲Alex Pajitnow制作的,它看似簡(jiǎn)單卻變化無窮,令人著迷,相信大多數(shù)人都還記得為它的規(guī)則簡(jiǎn)單,容易上手,且游戲過程變化無窮。而在“聯(lián)眾俄羅斯方塊”中,游戲人既能感受到游戲中的樂趣,也能提供一個(gè)展現(xiàn)自己高超技藝的場(chǎng)所,究其歷史,俄羅斯方塊最早還是出現(xiàn)在PC機(jī)上,無數(shù)人進(jìn)入游戲編程的世界都是從編寫俄羅斯方塊游戲開始的,因?yàn)檫@是檢驗(yàn)一個(gè)人對(duì)開發(fā)語言,環(huán)境和基本數(shù)據(jù)結(jié)構(gòu)知識(shí)熟練程度的便捷途徑。于此同時(shí)俄羅斯方塊

8、是一款我們大家小時(shí)候經(jīng)常玩的游戲,非常的具有趣味,代表了我們的一段童年時(shí)光。此次,我所選的課題就是簡(jiǎn)單俄羅斯方塊的設(shè)計(jì),用來追憶它陪我度過的一段童年時(shí)光。</p><p>  2.課程報(bào)告所用軟件</p><p>  Eclipse最初是由IBM公司開發(fā)的替代商業(yè)軟件Visual Age for Java的下一代IDE開發(fā)環(huán)境,2001年11月貢獻(xiàn)給開源社區(qū),現(xiàn)在它由非營利軟件供應(yīng)商聯(lián)盟E

9、clipse基金會(huì)(Eclipse Foundation)管理。2003年,Eclipse 3.0選擇OSGi服務(wù)平臺(tái)規(guī)范為運(yùn)行時(shí)架構(gòu)。2007年6月,穩(wěn)定版3.3發(fā)布;2008年6月發(fā)布代號(hào)為Ganymede的3.4版;2009年6月發(fā)布代號(hào)為Galileo的3.5版;2010年6月發(fā)布代號(hào)為Helios的3.6版;2011年6月發(fā)布代號(hào)為Indigo的3.7版;2012年6月發(fā)布代號(hào)為Juno的4.2版;2013年6月發(fā)布代號(hào)為Ke

10、pler的4.3版;2014年6月發(fā)布代號(hào)為L(zhǎng)una的4.4版;2015年6月項(xiàng)目發(fā)布代號(hào)為Mars的4.5版。</p><p>  Eclipse 是一個(gè)開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運(yùn)的是,Eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開發(fā)工具(Java Development Kit,JDK)。</p>

11、<p>  Eclipse 可以作為Java 集成開發(fā)環(huán)境(IDE),但 Eclipse 的目標(biāo)卻不僅限于此。Eclipse 還包括插件開發(fā)環(huán)境(Plug-in Development Environment,PDE),它允許他們構(gòu)建與 Eclipse 環(huán)境無縫集成的工具。 </p><p>  Exclipse的平等和一致性并不僅限于 Java 開發(fā)工具。盡管 Eclipse 是使用Java語言開

12、發(fā)的,但它的用途并不限于 Java 語言;例如,支持諸如C/C++、COBOL、PHP、Android等編程語言的插件已經(jīng)可用,或預(yù)計(jì)將會(huì)推出。Eclipse 框架還可用來作為與軟件開發(fā)無關(guān)的其他應(yīng)用程序類型的基礎(chǔ),比如內(nèi)容管理系統(tǒng)。</p><p><b>  3.設(shè)計(jì)目的</b></p><p>  綜合運(yùn)用在校期間所學(xué)理論知識(shí)和技能,設(shè)計(jì)開發(fā)俄羅斯方塊,使自己熟

13、悉應(yīng)用系統(tǒng)的開發(fā)過程,培養(yǎng)獨(dú)立思考能力,檢驗(yàn)學(xué)習(xí)效果和動(dòng)手能力,提高工程實(shí)踐能力,為將來實(shí)際工作打下堅(jiān)實(shí)的基礎(chǔ)。</p><p><b>  3.任務(wù)定義</b></p><p>  通過研究分析俄羅斯方塊所具備的能力及實(shí)現(xiàn)的方法、確定主體結(jié)構(gòu)。利用現(xiàn)階段我所能達(dá)到的能力,以最簡(jiǎn)潔、最容易的辦法,邊開發(fā)邊測(cè)試邊修改,實(shí)現(xiàn)一個(gè)初級(jí)游戲軟件。開發(fā)過程遵循軟件工程規(guī)范,可采

14、用結(jié)構(gòu)化或面向?qū)ο蠓治鲈O(shè)計(jì)方法。主要實(shí)現(xiàn)windows的GUI程序開發(fā),對(duì)游戲中的圖形圖像進(jìn)行鍵盤控制。游戲者可以通過上下左右鍵來對(duì)游戲進(jìn)行操作。</p><p><b>  二 邏輯設(shè)計(jì)</b></p><p><b>  1.游戲流程圖</b></p><p><b>  圖1</b></p

15、><p><b>  2.游戲功能敘述</b></p><p>  1、當(dāng)程序運(yùn)行時(shí),用戶進(jìn)入主界面,進(jìn)行游戲。游戲具有開始游戲,暫停游戲 ,提高或降低級(jí)數(shù)以及退出游戲的功能。</p><p>  2、游戲開始,游戲區(qū)域上方不斷地出現(xiàn)預(yù)定義形狀的下墜物件。 </p><p>  3、下墜物件可以通過旋轉(zhuǎn)改變其顯示形態(tài),并且不

16、斷地往下墜,直到它接觸到游戲區(qū)域底部或其他之前已經(jīng)壘疊起的下墜物件。當(dāng)一個(gè)下墜物件到達(dá)底部后,其位置則確定下來并占有該空間的位置區(qū)域。 </p><p>  4、當(dāng)游戲區(qū)域的某一行被下墜物件完全填充,則消除該行的所有下墜物,壘在其上面的物件將掉下代替該行空間。 </p><p>  5、游戲的結(jié)束是以下墜物件的頂部到達(dá)游戲區(qū)域的頂部作為判斷依據(jù),表示裝滿溢出。并且在某一瞬間,下一個(gè)方塊的形

17、態(tài)在游戲區(qū)域的右上方有預(yù)先提示,同時(shí)每抵消一行空間積分自增。</p><p><b>  三 詳細(xì)設(shè)計(jì)</b></p><p><b>  1.界面設(shè)計(jì)</b></p><p>  首先進(jìn)行游戲區(qū)域的設(shè)計(jì),一般為12*22或者10*22,在這里我設(shè)計(jì)的是12*22。主要的游戲功能都在游戲區(qū)域顯示,比如方塊的隨機(jī)選擇,畫布的

18、背景顯示等等。</p><p>  其次是系統(tǒng)功能顯示區(qū)域,這里顯示了當(dāng)前所玩游戲的等級(jí),右方可以選擇不同的游戲級(jí)別,一共有1、2、3、4、5五種游戲級(jí)別的選擇;下方是游戲畫布背景的選擇,一共有淺綠、淺黃、黑色三種背景顏色的選擇;最下方有開始游戲、暫停游戲、結(jié)束游戲和退出游戲四中功能選項(xiàng)。</p><p><b>  2.游戲功能設(shè)計(jì)</b></p>&

19、lt;p>  在無人操作時(shí),游戲開始后會(huì)隨機(jī)產(chǎn)生一個(gè)下墜物,先顯示在界面右上角的顯示區(qū)域,然后轉(zhuǎn)到游戲區(qū)域,右上角又隨機(jī)產(chǎn)生一個(gè)新的下墜物,當(dāng)該下墜物下落到底后,新的下墜物再次進(jìn)入游戲區(qū)域,如此循環(huán),直到游戲結(jié)束/暫停,這就是游戲的正常工作。 </p><p>  上述過程是在無人操作時(shí)游戲自動(dòng)運(yùn)行的,當(dāng)用戶進(jìn)行一定的操作交互的時(shí)候,運(yùn)行程序可以根據(jù)用戶的操作指示進(jìn)行當(dāng)前下墜物的控制。而這些操作都

20、是響應(yīng)相關(guān)的功能鍵而執(zhí)行的,所以這里可以把它看成一種“中斷”的操作。</p><p>  在中斷過程中,可以通過鍵盤包括按某些鍵進(jìn)行操作。為了便于用戶操作,用戶可以自主選擇操作鍵,但他們的作用不變。但還是應(yīng)該設(shè)置默認(rèn)鍵來方便操作。例如:光標(biāo)向上鍵,光標(biāo)向下鍵,光標(biāo)向左鍵,光標(biāo)向右鍵。 </p><p> ?。?)按光標(biāo)向上鍵    

21、0;             </p><p>  此事件產(chǎn)生下墜物旋轉(zhuǎn)操作,下墜物并非任何情況都能旋轉(zhuǎn),如果旋轉(zhuǎn)后與小方格矩陣顯示的下墜物有沖突或超出邊界時(shí),均不能發(fā)生旋轉(zhuǎn)。因此首先要判斷是否有足夠的空間進(jìn)行旋轉(zhuǎn),然后選擇是否旋轉(zhuǎn)。 </p><p>

22、; ?。?)按光標(biāo)向下鍵 </p><p>  此事件產(chǎn)生下墜物加速下落操作,如果下墜物已經(jīng)到達(dá)游戲區(qū)域底部或者已經(jīng)有其他方塊遮擋,則下墜物停止下降。 </p><p> ?。?)按光標(biāo)向左鍵 </p><p>  此事件產(chǎn)生下落下墜物左移操作。首先要判斷此下墜物是否能夠發(fā)生左移,當(dāng)越界或被其他顯示下墜物阻擋時(shí),則不能左移。 

23、</p><p>  (4)按光標(biāo)向右鍵 </p><p>  此事件產(chǎn)生下落下墜物右移操作。首先要判斷此下墜物是否能夠發(fā)生右移,當(dāng)越界或被其他顯示下墜物阻擋時(shí),則不能右移。</p><p><b>  方塊的定義</b></p><p>  在此,我用type類來進(jìn)行方塊的類型定義,一共定義了長(zhǎng)條、直角左、直

24、角右、直角中、正方形五中方塊類型</p><p>  private final int types[][][]={ //游戲方塊</p><p>  {{-1,0},{0,0},{1,0},{2,0}}, //長(zhǎng)條</p><p>  {{0,-1},{0,

25、0},{0,1},{0,2}},</p><p>  {{-1,0},{0,0},{1,0},{1,1}}, //直角(右)</p><p>  {{0,1},{0,0},{0,-1},{1,-1}},</p><p>  {{1,0},{0,0},{-1,0},{-1,-1}},</p><p&

26、gt;  {{0,-1},{0,0},{0,1},{-1,1}},</p><p>  {{-1,0},{0,0},{0,1},{1,0}}, //直角(中)</p><p>  {{0,1},{0,0},{1,0},{0,-1}},</p><p>  {{1,0},{0,0},{0,-1},{-1,0}},<

27、;/p><p>  {{0,-1},{0,0},{-1,0},{0,1}},</p><p>  {{-1,1},{-1,0},{0,0},{1,0}}, //直接(左)</p><p>  {{1,1},{0,1},{0,0},{0,-1}},</p><p>  {{1,-1},{1,0},{0

28、,0},{-1,0}},</p><p>  {{-1,-1},{0,-1},{0,0},{0,1}},</p><p>  {{0,-1},{0,0},{1,0},{1,1}},</p><p>  {{-1,0},{0,0},{0,-1},{1,-1}},</p><p>  {{0,1},{0,0},{1,0},{1,-1}},<

29、/p><p>  {{1,0},{0,0},{0,-1},{-1,-1}},</p><p>  {{0,0},{0,1},{1,0},{1,1}} //正方形</p><p><b>  };</b></p><p><b>  方塊的隨機(jī)出現(xiàn)</b&g

30、t;</p><p>  我用makenewblock()函數(shù)來實(shí)現(xiàn)方塊的隨機(jī)出現(xiàn)</p><p>  public void makenewblock() //隨機(jī)出現(xiàn)方塊</p><p><b>  {</b></p><p>  aa=(int)(

31、Math.random()*100%7+1);</p><p>  ic=aa*10+1;</p><p>  switch(aa)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  block_type=0;&l

32、t;/p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  block_type=2;</p><p><b>  break;</b></p><p><b>  case 3:&l

33、t;/b></p><p>  block_type=6;</p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  block_type=10;</p><p><b>  break;<

34、/b></p><p><b>  case 5:</b></p><p>  block_type=14;</p><p><b>  break;</b></p><p><b>  case 6:</b></p><p>  block_ty

35、pe=16;</p><p><b>  break;</b></p><p><b>  case 7:</b></p><p>  block_type=18;</p><p><b>  break;</b></p><p><b>  

36、}</b></p><p>  block_x=1;</p><p>  block_y=sp_width/2;</p><p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p><p>  block_box[i][0]=block_

37、x-types[block_type][i][1];</p><p>  block_box[i][1]=block_y+types[block_type][i][0];</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  方塊的旋轉(zhuǎn)

38、</b></p><p>  public void turnright()</p><p><b>  {</b></p><p>  int[][] block_box_temp=new int[4][2];</p><p>  int ic_temp=ic;</p><p>  

39、int block_type_temp=block_type;</p><p>  int id=ic%10; </p><p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p><p>  block_box_temp[i][0]=block_box[i][0];&

40、lt;/p><p>  block_box_temp[i][1]=block_box[i][1];</p><p><b>  }</b></p><p><b>  if(aa==7)</b></p><p><b>  return;</b></p><p&

41、gt;  else if(aa==1||aa==5||aa==6)</p><p><b>  {</b></p><p><b>  if(id==2)</b></p><p><b>  {</b></p><p>  block_type--;</p>&l

42、t;p><b>  ic--;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  block_type++;</p><p&g

43、t;<b>  ic++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p

44、><b>  if(id==4)</b></p><p><b>  {</b></p><p>  block_type=block_type-3;</p><p><b>  ic=ic-3;</b></p><p><b>  }</b><

45、;/p><p><b>  else</b></p><p><b>  {</b></p><p>  block_type++;</p><p><b>  ic++;</b></p><p><b>  }</b></p&g

46、t;<p><b>  }</b></p><p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p><p>  block_box[i][0]=block_x-types[block_type][i][1];</p><p>  bl

47、ock_box[i][1]=block_y+types[block_type][i][0];</p><p><b>  }</b></p><p>  if(Iscanmoveto()==false)</p><p><b>  {</b></p><p>  ic=ic_temp;</p&

48、gt;<p>  block_type=block_type_temp;</p><p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p><p>  block_box[i][0]=block_box_temp[i][0];</p><p>  block

49、_box[i][1]=block_box_temp[i][1];</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }四 程序編碼</b></p><p><b>  程序主要代碼</b></

50、p><p>  public class BlockGame </p><p><b>  {</b></p><p>  private int aa=0;</p><p>  private int ic=0;</p><p>  private final int sp_width=10;

51、 //游戲界面寬格</p><p>  private final int sp_height=20; //游戲界面高格</p><p>  private final int types[][][]={ //游戲方塊&l

52、t;/p><p>  {{-1,0},{0,0},{1,0},{2,0}}, //長(zhǎng)條</p><p>  {{0,-1},{0,0},{0,1},{0,2}},</p><p>  {{-1,0},{0,0},{1,0},{1,1}}, //直角(右)</p>

53、;<p>  {{0,1},{0,0},{0,-1},{1,-1}},</p><p>  {{1,0},{0,0},{-1,0},{-1,-1}},</p><p>  {{0,-1},{0,0},{0,1},{-1,1}},</p><p>  {{-1,0},{0,0},{0,1},{1,0}},

54、 //直角(中)</p><p>  {{0,1},{0,0},{1,0},{0,-1}},</p><p>  {{1,0},{0,0},{0,-1},{-1,0}},</p><p>  {{0,-1},{0,0},{-1,0},{0,1}},</p><p>  {{-1,1},{-1,0},{0,0},{1,0}},

55、 //直接(左)</p><p>  {{1,1},{0,1},{0,0},{0,-1}},</p><p>  {{1,-1},{1,0},{0,0},{-1,0}},</p><p>  {{-1,-1},{0,-1},{0,0},{0,1}},</p><p>  {{0,-1},{0,0},{1,0},{

56、1,1}},</p><p>  {{-1,0},{0,0},{0,-1},{1,-1}},</p><p>  {{0,1},{0,0},{1,0},{1,-1}},</p><p>  {{1,0},{0,0},{0,-1},{-1,-1}},</p><p>  {{0,0},{0,1},{1,0},{1,1}}

57、 //正方形</p><p><b>  };</b></p><p>  private int[][] block_box=new int[4][2]; //四個(gè)方塊坐標(biāo)</p><p>  private int[][] block_box_tt=new int[4][

58、2];</p><p>  private int block_x=0,block_y=0; //游戲方塊在游戲界面中的坐標(biāo)</p><p>  private int block_type=0; //方塊類別</p><p>  priva

59、te int[][] game_space=new int[20][10]; //空間數(shù)據(jù)</p><p>  private int movetype=0;</p><p>  private int scroe=0;</p><p>  private int speed=5;</p><p>  pub

60、lic BlockGame()</p><p><b>  {</b></p><p>  clearspace();</p><p>  makenewblock();</p><p><b>  }</b></p><p>  public void clearspace

61、() //初始化空間數(shù)據(jù)</p><p><b>  {</b></p><p>  for(int i=0;i<sp_height;i++)</p><p>  for(int j=0;j<sp_width;j++)</p><p> 

62、 game_space[i][j]=0;</p><p><b>  }</b></p><p>  public void makenewblock() //隨機(jī)出現(xiàn)方塊</p><p><b>  {</b></p><p> 

63、 aa=(int)(Math.random()*100%7+1);</p><p>  ic=aa*10+1;</p><p>  switch(aa)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  block

64、_type=0;</p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  block_type=2;</p><p><b>  break;</b></p><p><b> 

65、 case 3:</b></p><p>  block_type=6;</p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  block_type=10;</p><p><b>  

66、break;</b></p><p><b>  case 5:</b></p><p>  block_type=14;</p><p><b>  break;</b></p><p><b>  case 6:</b></p><p>

67、  block_type=16;</p><p><b>  break;</b></p><p><b>  case 7:</b></p><p>  block_type=18;</p><p><b>  break;</b></p><p>&

68、lt;b>  }</b></p><p>  block_x=1;</p><p>  block_y=sp_width/2;</p><p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p><p>  block_box[i]

69、[0]=block_x-types[block_type][i][1];</p><p>  block_box[i][1]=block_y+types[block_type][i][0];</p><p><b>  }</b></p><p><b>  }</b></p><p>  publ

70、ic void movedown()</p><p><b>  {</b></p><p>  block_x++;</p><p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p><p>  block_box[i][0

71、]=block_x-types[block_type][i][1];</p><p><b>  }</b></p><p>  movetype=1;</p><p><b>  }</b></p><p>  public void moveleft()</p><p>

72、<b>  {</b></p><p>  block_y--;</p><p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p><p>  block_box[i][1]=block_y+types[block_type][i][0];</

73、p><p><b>  }</b></p><p>  movetype=2;</p><p><b>  }</b></p><p>  public void moveright()</p><p><b>  {</b></p><

74、p>  block_y++;</p><p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p><p>  block_box[i][1]=block_y+types[block_type][i][0];</p><p><b>  }</b>

75、</p><p>  movetype=3;</p><p><b>  }</b></p><p>  public void turnright()</p><p><b>  {</b></p><p>  int[][] block_box_temp=new int[

76、4][2];</p><p>  int ic_temp=ic;</p><p>  int block_type_temp=block_type;</p><p>  int id=ic%10; </p><p>  for(int i=0;i<4;i++)</p><p><b>  {<

77、/b></p><p>  block_box_temp[i][0]=block_box[i][0];</p><p>  block_box_temp[i][1]=block_box[i][1];</p><p><b>  }</b></p><p><b>  if(aa==7)</b>

78、</p><p><b>  return;</b></p><p>  else if(aa==1||aa==5||aa==6)</p><p><b>  {</b></p><p><b>  if(id==2)</b></p><p><b

79、>  {</b></p><p>  block_type--;</p><p><b>  ic--;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b> 

80、 {</b></p><p>  block_type++;</p><p><b>  ic++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else<

81、;/b></p><p><b>  {</b></p><p><b>  if(id==4)</b></p><p><b>  {</b></p><p>  block_type=block_type-3;</p><p><b>

82、;  ic=ic-3;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  block_type++;</p><p><b> 

83、 ic++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p><p>  block_

84、box[i][0]=block_x-types[block_type][i][1];</p><p>  block_box[i][1]=block_y+types[block_type][i][0];</p><p><b>  }</b></p><p>  if(Iscanmoveto()==false)</p><p

85、><b>  {</b></p><p>  ic=ic_temp;</p><p>  block_type=block_type_temp;</p><p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p><p>

86、  block_box[i][0]=block_box_temp[i][0];</p><p>  block_box[i][1]=block_box_temp[i][1];</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }&l

87、t;/b></p><p>  public void moveback()</p><p><b>  {</b></p><p>  if(movetype==1)</p><p><b>  {</b></p><p>  block_x--;</p>

88、<p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p><p>  block_box[i][0]=block_x-types[block_type][i][1];</p><p><b>  }</b></p><p><b&

89、gt;  }</b></p><p>  else if(movetype==2)</p><p><b>  {</b></p><p>  block_y++;</p><p>  for(int m=0;m<4;m++)</p><p><b>  {</b

90、></p><p>  block_box[m][1]=block_y+types[block_type][m][0];</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if(movetype==3)</p><

91、p><b>  {</b></p><p>  block_y--;</p><p>  for(int n=0;n<4;n++)</p><p><b>  {</b></p><p>  block_box[n][1]=block_y+types[block_type][n][0];

92、</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  public boolean Iscanmoveto()</p><p><b>  {</b&

93、gt;</p><p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p><p>  if(block_box[i][0]<0||block_box[i][0]>19)</p><p><b>  {</b></p><

94、;p>  moveback();</p><p>  return false;</p><p><b>  }</b></p><p>  else if(block_box[i][1]<0||block_box[i][1]>9)</p><p><b>  {</b></

95、p><p>  moveback();</p><p>  return false;</p><p><b>  }</b></p><p>  else if(game_space[block_box[i][0]][block_box[i][1]]==1)</p><p><b>  {

96、</b></p><p>  moveback();</p><p>  return false;</p><p><b>  }</b></p><p><b>  }</b></p><p>  return true;</p><p&g

97、t;<b>  }</b></p><p>  public boolean Ishitbottom()</p><p><b>  {</b></p><p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p>&

98、lt;p>  if(block_box[i][0]+1>19)</p><p><b>  {</b></p><p>  for(int m=0;m<4;m++)</p><p><b>  {</b></p><p>  game_space[block_box[m][0]][

99、block_box[m][1]]=1;</p><p>  block_box_tt[m][0]=block_box[m][0];</p><p>  block_box_tt[m][1]=block_box[m][1];</p><p>  block_box[m][0]=0;</p><p>  block_box[m][1]=0;<

100、;/p><p><b>  }</b></p><p>  return true;</p><p>  } </p><p><b>  }</b></p><p>  for(int i=0;i<4;i++)</p><p>&l

101、t;b>  {</b></p><p>  if(game_space[block_box[i][0]+1][block_box[i][1]]==1)</p><p><b>  {</b></p><p>  for(int m=0;m<4;m++)</p><p><b>  {&l

102、t;/b></p><p>  game_space[block_box[m][0]][block_box[m][1]]=1;</p><p>  block_box_tt[m][0]=block_box[m][0];</p><p>  block_box_tt[m][1]=block_box[m][1];</p><p>  blo

103、ck_box[m][0]=0;</p><p>  block_box[m][1]=0;</p><p><b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p><b>  }</b>

104、</p><p>  return false;</p><p><b>  }</b></p><p>  public void CheckAndCutLine()</p><p><b>  {</b></p><p>  int a[]={block_box_tt[0

105、][0],block_box_tt[1][0],block_box_tt[2][0],block_box_tt[3][0]};</p><p>  int b[]={30,30,30,30};</p><p>  int temp=0;</p><p>  int temp1=0;</p><p>  int count=0;</p&g

106、t;<p><b>  int ss=0;</b></p><p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p><p>  for(int j=0;j<10;j++)</p><p><b>  {</b&g

107、t;</p><p>  if(game_space[a[i]][j]==1)</p><p><b>  temp++;</b></p><p><b>  }</b></p><p>  if(temp==10)</p><p><b>  {</b&g

108、t;</p><p>  for(int m=0;m<4;m++)</p><p>  if(b[m]==a[i])</p><p><b>  {</b></p><p><b>  break;</b></p><p><b>  }</b>&

109、lt;/p><p><b>  else</b></p><p><b>  ss++;</b></p><p><b>  if(ss==4)</b></p><p><b>  {</b></p><p>  b[count]=a[

110、i];</p><p><b>  count++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  temp=0;</b></p><p><b>  

111、ss=0;</b></p><p><b>  }</b></p><p>  for(int i=0;i<3;i++)</p><p>  for(int j=i+1;j<4;j++)</p><p><b>  {</b></p><p>  if

112、(b[i]>b[j])</p><p><b>  {</b></p><p>  temp1=b[i];</p><p>  b[i]=b[j];</p><p>  b[j]=temp1;</p><p><b>  }</b></p><p&g

113、t;<b>  }</b></p><p>  for(int n=0;n<4;n++)</p><p><b>  {</b></p><p>  if(b[n]==30)</p><p><b>  break;</b></p><p><

114、;b>  else</b></p><p><b>  {</b></p><p>  for(int aa=b[n]-1;aa>=0;aa--)</p><p><b>  {</b></p><p>  for(int bb=0;bb<10;bb++)</p&

115、gt;<p><b>  {</b></p><p>  game_space[aa+1][bb]=game_space[aa][bb];</p><p><b>  }</b></p><p><b>  }</b></p><p>  for(int cc=0

116、;cc<10;cc++)</p><p>  game_space[0][cc]=0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  public boo

117、lean IsGameOver()</p><p><b>  {</b></p><p>  boolean flag=false;</p><p>  for(int i=0;i<sp_width;i++)</p><p><b>  {</b></p><p> 

118、 if(game_space[0][i]==1)</p><p><b>  {</b></p><p>  flag=true;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>

119、;  }</b></p><p>  return flag;</p><p><b>  }</b></p><p>  public void sure()</p><p><b>  {</b></p><p>  for(int i=0;i<4;i+

120、+)</p><p>  game_space[block_box[i][0]][block_box[i][1]]=1;</p><p><b>  }</b></p><p>  public void notsure()</p><p><b>  {</b></p><p&

121、gt;  for(int i=0;i<4;i++)</p><p>  game_space[block_box[i][0]][block_box[i][1]]=0;</p><p><b>  }</b></p><p>  public boolean judge(int i,int j)</p><p>&l

122、t;b>  {</b></p><p>  if(game_space[i][j]==1)</p><p>  return true;</p><p><b>  else</b></p><p>  return false;</p><p><b>  }<

123、/b></p><p>  }五 程序調(diào)試與測(cè)試</p><p><b>  圖2</b></p><p>  我運(yùn)行程序后,進(jìn)行了一小段時(shí)間的游戲,發(fā)現(xiàn)基本游戲功能都能實(shí)現(xiàn),但是還是有一部分的功能未能成功,但是程序設(shè)計(jì)已經(jīng)基本成功。六 結(jié)果分析</p><p>  通過短短的幾個(gè)周的時(shí)間,我從一個(gè)對(duì)JAVA編程懵

124、懂的學(xué)生到現(xiàn)在可以試著用JAVA進(jìn)行簡(jiǎn)單程序的設(shè)計(jì)與編寫,雖然在實(shí)驗(yàn)過程中,我遇到了許多的困難,特別是還不太適應(yīng)面向?qū)ο蟮木幊田L(fēng)格和思想,看待問題時(shí)總是想到用什么結(jié)構(gòu)來實(shí)現(xiàn)該功能,而沒有將問題看成一個(gè)封裝的整體來考慮,所以在這次課程設(shè)計(jì)中我接觸、體驗(yàn)了面向?qū)ο笤O(shè)計(jì),使得思維在向面過程向面向?qū)ο筮^度。因?yàn)檫@次的論文,使我對(duì)JAVA面向?qū)ο蟮木幊逃辛松钜徊降牧私?,因?yàn)檫@次的課程設(shè)計(jì),使我在今后的工作和學(xué)習(xí)中,都有了很到的啟發(fā)。但是我設(shè)計(jì)的程

125、序還是有很大的問題,相對(duì)于現(xiàn)在身份成熟的俄羅斯方塊游戲編程,我設(shè)計(jì)的程序還有很大的欠缺,很多功能沒有實(shí)現(xiàn),比如積分功能,但是在我不屑的努力下,我還是基本完成了實(shí)驗(yàn),并最終運(yùn)行成功。</p><p><b>  附錄(程序代碼)</b></p><p>  public class BlockGame </p><p><b>  {&

126、lt;/b></p><p>  private int aa=0;</p><p>  private int ic=0;</p><p>  private final int sp_width=10; //游戲界面寬格</p><p>  private final in

127、t sp_height=20; //游戲界面高格</p><p>  private final int types[][][]={ //游戲方塊</p><p>  {{-1,0},{0,0},{1,0},{2,0}}, /

128、/長(zhǎng)條</p><p>  {{0,-1},{0,0},{0,1},{0,2}},</p><p>  {{-1,0},{0,0},{1,0},{1,1}}, //直角(右)</p><p>  {{0,1},{0,0},{0,-1},{1,-1}},</p><p>  {{1,0},{0,

129、0},{-1,0},{-1,-1}},</p><p>  {{0,-1},{0,0},{0,1},{-1,1}},</p><p>  {{-1,0},{0,0},{0,1},{1,0}}, //直角(中)</p><p>  {{0,1},{0,0},{1,0},{0,-1}},</p><p

130、>  {{1,0},{0,0},{0,-1},{-1,0}},</p><p>  {{0,-1},{0,0},{-1,0},{0,1}},</p><p>  {{-1,1},{-1,0},{0,0},{1,0}}, //直接(左)</p><p>  {{1,1},{0,1},{0,0},{0,-1}},&l

131、t;/p><p>  {{1,-1},{1,0},{0,0},{-1,0}},</p><p>  {{-1,-1},{0,-1},{0,0},{0,1}},</p><p>  {{0,-1},{0,0},{1,0},{1,1}},</p><p>  {{-1,0},{0,0},{0,-1},{1,-1}},</p><p

132、>  {{0,1},{0,0},{1,0},{1,-1}},</p><p>  {{1,0},{0,0},{0,-1},{-1,-1}},</p><p>  {{0,0},{0,1},{1,0},{1,1}} //正方形</p><p><b>  };</b></p>

133、<p>  private int[][] block_box=new int[4][2]; //四個(gè)方塊坐標(biāo)</p><p>  private int[][] block_box_tt=new int[4][2];</p><p>  private int block_x=0,block_y=0;

134、 //游戲方塊在游戲界面中的坐標(biāo)</p><p>  private int block_type=0; //方塊類別</p><p>  private int[][] game_space=new int[20][10]; //空間數(shù)據(jù)</p>&

135、lt;p>  private int movetype=0;</p><p>  private int scroe=0;</p><p>  private int speed=5;</p><p>  public BlockGame()</p><p><b>  {</b></p><p

136、>  clearspace();</p><p>  makenewblock();</p><p><b>  }</b></p><p>  public void clearspace() //初始化空間數(shù)據(jù)</p><p><b&

137、gt;  {</b></p><p>  for(int i=0;i<sp_height;i++)</p><p>  for(int j=0;j<sp_width;j++)</p><p>  game_space[i][j]=0;</p><p><b>  }</b></p>

138、<p>  public void makenewblock() //隨機(jī)出現(xiàn)方塊</p><p><b>  {</b></p><p>  aa=(int)(Math.random()*100%7+1);</p><p>  ic=aa*10+1;</p&g

139、t;<p>  switch(aa)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  block_type=0;</p><p><b>  break;</b></p><p&g

溫馨提示

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

評(píng)論

0/150

提交評(píng)論