2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩18頁(yè)未讀, 繼續(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>  Java 課 程 設(shè) 計(jì)</p><p><b>  題目:俄羅斯方塊</b></p><p><b>  目錄</b></p><p>  一. 需求分析.......................................................2</p><p

2、>  1.1開發(fā)背景...................................................... 2</p><p>  1.2設(shè)計(jì)目的...................................................... 2</p><p>  1.3功能需求...................................

3、................... 2</p><p>  1.4開發(fā)環(huán)境............................................... ...... 2</p><p>  二.軟件概要設(shè)計(jì).................................................... 3</p><p>  2.1

4、設(shè)計(jì)思想..................................................... 3</p><p>  2.2 系統(tǒng)架構(gòu)......................................................3</p><p>  2.3 模塊劃分..........................................

5、............3</p><p>  三.詳細(xì)設(shè)計(jì).........................................................4</p><p>  3.1 事件處理.......................................................4</p><p>  3.2 界面設(shè)計(jì).

6、...................................... ..............4</p><p>  3.3 系統(tǒng)流程.................................... .................4</p><p>  3.4 游戲畫布類..............................................

7、......5</p><p>  3.5 方塊類........................................................9</p><p>  3.6 方塊的消除....................................................8</p><p>  四.軟件運(yùn)行測(cè)試........

8、.............................................10</p><p>  五.課程設(shè)計(jì)總結(jié)及心得體會(huì).......................................... 12</p><p>  六.參考文獻(xiàn)... .....................................................12<

9、/p><p>  附錄:重要代碼.............................. ........................13</p><p><b>  一.需求分析</b></p><p><b>  1.1開發(fā)背景</b></p><p>  Java是現(xiàn)在全球最時(shí)髦的開發(fā)工具

10、之一,它擁有一套龐大且完善的類庫(kù),內(nèi)置了其他語(yǔ)言需要靠庫(kù)甚至是操作系統(tǒng)才能支持的功能。Java的產(chǎn)生與流行是InterNet發(fā)展的客觀要求。如今越來越多的應(yīng)用程序是于Java開發(fā)的,用Java開發(fā)的應(yīng)用程序可在任何計(jì)算平臺(tái)上安全地運(yùn)行。Java作為一個(gè)分布式的,面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,可以讓位于任何地方的任何計(jì)算機(jī)使用網(wǎng)絡(luò)上的的應(yīng)用程序??梢哉fJava是一個(gè)萬(wàn)能的開發(fā)平臺(tái),用Java編程已經(jīng)成為一種趨勢(shì)。</p><

11、p><b>  1.2設(shè)計(jì)目的</b></p><p>  通過本次課程設(shè)計(jì)了解和掌握J(rèn)DK開發(fā)環(huán)境以及Eclipse等集成開發(fā)環(huán)境,鞏固所學(xué)的Java知識(shí)及其編程機(jī)制。了解JAVA程序開發(fā)流程,學(xué)會(huì)構(gòu)思比較復(fù)雜的課題的設(shè)計(jì)思想;,能合理的利用本學(xué)期所掌握的多線程、類、GUI等知識(shí)編寫一個(gè)較為復(fù)雜的Java應(yīng)用軟件。掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的有關(guān)概念和開發(fā)方法,鍛煉大家團(tuán)隊(duì)合作開發(fā)精神。&

12、lt;/p><p><b>  1.3功能需求</b></p><p>  本課程設(shè)計(jì)的目標(biāo)是設(shè)計(jì)一個(gè)名為《俄羅斯方塊》的游戲軟件,實(shí)現(xiàn)其界面初始化,程序運(yùn)行,退出,和相應(yīng)數(shù)據(jù)處理。能實(shí)現(xiàn)游戲的基本功能,類似下落、轉(zhuǎn)向、平移、得分累加和計(jì)數(shù)等,并在規(guī)定的時(shí)間內(nèi)達(dá)到課題所需要實(shí)現(xiàn)的功能及要求。</p><p><b>  1.4開發(fā)環(huán)境&l

13、t;/b></p><p>  操作系統(tǒng):Microsoft Windows XP</p><p>  程序語(yǔ)言:Java </p><p>  開 發(fā) 包:Java(TM) 2 Standard Edition (5.0)</p><p>  Sun Micro. J2ME Wireless Tool Kit 2.2</p&

14、gt;<p>  IDE: Eclipse 3.41</p><p><b>  二 .軟件概要設(shè)計(jì)</b></p><p><b>  2.1設(shè)計(jì)思想</b></p><p>  1).使用Jpanel框架,并添加按鈕、文本框等對(duì)象,用布局管理器定義各個(gè)對(duì)象的分布。</p><p&

15、gt;  2).設(shè)計(jì)一個(gè)二維數(shù)組來表示方塊,默認(rèn)為不顯示,游戲過程中通過SetVisible來顯示方塊。</p><p>  3).設(shè)計(jì)一個(gè)設(shè)計(jì)定時(shí)線程來控制方塊下落速度。</p><p>  4).設(shè)計(jì)七種形狀的防快,每種形狀定義四種形態(tài)來實(shí)現(xiàn)方塊變換。</p><p>  5).每個(gè)方塊落到底后判斷能否消層和游戲是否結(jié)束。</p><p>

16、;<b>  2.2系統(tǒng)架構(gòu)</b></p><p>  主要包含方塊類,游戲畫布類,處理控制類,定時(shí)線程,模塊構(gòu)造,頁(yè)面布局</p><p><b>  2.3 模塊化分</b></p><p>  根據(jù)需求分析要實(shí)現(xiàn)的系統(tǒng)功能,可以得出系統(tǒng)的模塊圖:</p><p><b>  三.詳

17、細(xì)設(shè)計(jì)</b></p><p><b>  3.1事件處理</b></p><p>  在frame框架中設(shè)置各種對(duì)象,使用addActionListener添加監(jiān)聽。例如:gameScr.addKeyListener(gameScr);然后使用public void actionPerformed(ActionEvent e)和public void m

18、ouseClicked(MouseEvent e)實(shí)現(xiàn)按鈕和鼠標(biāo)點(diǎn)擊事件。</p><p><b>  3.2界面設(shè)計(jì)</b></p><p><b>  游戲基本界面圖</b></p><p><b>  3.3系統(tǒng)流程</b></p><p><b>  游戲畫面

19、流程圖</b></p><p><b>  游戲算法流程圖</b></p><p><b>  3.4 游戲畫布類</b></p><p>  游戲畫布類,繼承自Canvas類,游戲的主要代碼,用于實(shí)現(xiàn)方塊在畫布上顯示</p><p>  class GameCanvas extends

20、 Canvas implements KeyListener { </p><p>  final int unitSize = 25; // 小方塊邊長(zhǎng) </p><p>  int rowNum; // 正方格的行數(shù) </p><p>  int columnNum; // 正方格的列數(shù) </p><p>  int ma

21、xAllowRowNum; // 允許有多少行未消 </p><p>  int blockInitRow; // 新出現(xiàn)塊的起始行坐標(biāo) </p><p>  int blockInitCol; // 新出現(xiàn)塊的起始列坐標(biāo) </p><p>  int[][] scrArr; // 屏幕數(shù)組 </p><p>  Block b

22、; // 對(duì)方快的引用 </p><p>  GameCanvas() { </p><p>  rowNum = 18; </p><p>  columnNum = 12; </p><p>  maxAllowRowNum = rowNum - 2; </p><p>  b = new Blo

23、ck(this); </p><p>  blockInitRow = rowNum - 1; </p><p>  blockInitCol = columnNum / 2 - 2; </p><p>  scrArr = new int[32][32]; </p><p><b>  } </b>

24、</p><p>  // 初始化屏幕,并將屏幕數(shù)組清零的方法 </p><p>  void initScr() { </p><p>  for (int i = 0; i < rowNum; i++) </p><p>  for (int j = 0; j < columnNum; j++) </p&

25、gt;<p>  scrArr[i][j] = 0; </p><p>  b.reset(); </p><p>  repaint(); </p><p><b>  } </b></p><p>  // 重新刷新畫布方法 </p><p>  public

26、 void paint(Graphics g) { </p><p>  for (int i = 0; i < rowNum; i++) </p><p>  for (int j = 0; j < columnNum; j++) </p><p>  drawUnit(i, j, scrArr[i][j]); </p>

27、<p><b>  } </b></p><p>  // 畫方塊的方法 </p><p>  public void drawUnit(int row, int col, int type) { </p><p>  scrArr[row][col] = type; </p><p>  Gr

28、aphics g = getGraphics(); </p><p>  switch (type) { // 表示畫方快的方法 </p><p>  case 0: </p><p>  g.setColor(Color.black); </p><p>  break; // 以背景為顏色畫 </p>&

29、lt;p>  case 1: </p><p>  g.setColor(Color.green); </p><p>  break; // 畫正在下落的方塊 </p><p>  case 2: </p><p>  g.setColor(Color.gray); </p><p>  b

30、reak; // 畫已經(jīng)落下的方法 </p><p><b>  } </b></p><p>  g.fill3DRect(col * unitSize, getSize().height - (row + 1) * unitSize, </p><p>  unitSize, unitSize, true); </p&

31、gt;<p>  g.dispose(); </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  }</b></p><p><b>  3.5方塊類</b></

32、p><p>  方塊類,定義了七種形狀的方塊,每種形狀有四種狀態(tài),實(shí)現(xiàn)用鍵盤控制方塊的下落,移動(dòng),轉(zhuǎn)換形狀等</p><p>  class Block { </p><p>  static int[][] pattern = { </p><p>  { 0x0f00, 0x4444, 0x0f00, 0x4444 },//本行表示長(zhǎng)

33、條四種狀態(tài) </p><p>  { 0x04e0, 0x0464, 0x00e4, 0x04c4 }, </p><p>  { 0x4620, 0x6c00, 0x4620, 0x6c00 }, </p><p>  { 0x2640, 0xc600, 0x2640, 0xc600 }, </p><p>  { 0x62

34、20, 0x1700, 0x2230, 0x0740 }, </p><p>  { 0x6440, 0x0e20, 0x44c0, 0x8e00 }, </p><p>  { 0x0660, 0x0660, 0x0660, 0x0660 } }; </p><p>  int blockType; </p><p>  i

35、nt turnState; </p><p>  int blockState; </p><p>  int row, col; </p><p>  GameCanvas scr; </p><p>  Block(GameCanvas scr) { </p><p>  this.scr = scr

36、; </p><p>  blockType = (int) (Math.random() * 1000) % 7; </p><p>  turnState = (int) (Math.random() * 1000) % 4; </p><p>  blockState = 1; </p><p>  row = scr.

37、getInitRow(); </p><p>  col = scr.getInitCol(); </p><p><b>  } </b></p><p>  public void reset() { </p><p>  blockType = (int) (Math.random() * 1000)

38、 % 7; </p><p>  turnState = (int) (Math.random() * 1000) % 4; </p><p>  blockState = 1; </p><p>  row = scr.getInitRow(); </p><p>  col = scr.getInitCol(); &l

39、t;/p><p>  dispBlock(1); </p><p><b>  }</b></p><p>  public void leftTurn() { </p><p>  if (assertValid(blockType, (turnState + 1) % 4, row, col)) { <

40、/p><p>  dispBlock(0); </p><p>  turnState = (turnState + 1) % 4; </p><p>  dispBlock(1); </p><p><b>  } </b></p><p><b>  } </b&g

41、t;</p><p>  public void leftMove() { </p><p>  if (assertValid(blockType, turnState, row, col - 1)) { </p><p>  dispBlock(0); </p><p><b>  col--; </b&g

42、t;</p><p>  dispBlock(1); </p><p><b>  } </b></p><p><b>  } </b></p><p>  public void rightMove() { </p><p>  if (assertV

43、alid(blockType, turnState, row, col + 1)) { </p><p>  dispBlock(0); </p><p><b>  col++; </b></p><p>  dispBlock(1); </p><p><b>  } </b>

44、;</p><p><b>  } </b></p><p>  public boolean fallDown() { </p><p>  if (blockState == 2) </p><p>  return (false); </p><p>  if (assertV

45、alid(blockType, turnState, row - 1, col)) { </p><p>  dispBlock(0); </p><p><b>  row--; </b></p><p>  dispBlock(1); </p><p>  return (true); </

46、p><p>  } else { </p><p>  blockState = 2; </p><p>  dispBlock(2); </p><p>  return (false); </p><p><b>  } </b></p><p><

47、;b>  } </b></p><p>  // 判斷是否正確的方法 </p><p>  boolean assertValid(int t, int s, int row, int col) { </p><p>  int k = 0x8000; </p><p>  for (int i = 0; i

48、 < 4; i++) { </p><p>  for (int j = 0; j < 4; j++) { </p><p>  if ((int) (pattern[t][s] & k) != 0) { </p><p>  int temp = scr.getScrArrXY(row - i, col + j); </p

49、><p>  if (temp < 0 || temp == 2) </p><p>  return false; </p><p><b>  } </b></p><p>  k = k >> 1; </p><p><b>  } </b&

50、gt;</p><p><b>  } </b></p><p>  return true; </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  3.6方塊的消除&

51、lt;/b></p><p>  實(shí)現(xiàn)方塊滿行是刪除該行,并改變分?jǐn)?shù)輸出窗口的值</p><p>  void deleteFullLine() { </p><p>  int full_line_num = 0; </p><p>  int k = 0; </p><p>  for (int

52、i = 0; i < rowNum; i++) { </p><p>  boolean isfull = true; </p><p>  L1: for (int j = 0; j < columnNum; j++) </p><p>  if (scrArr[i][j] == 0) { </p><p>&l

53、t;b>  k++; </b></p><p>  isfull = false; </p><p>  break L1; </p><p><b>  } </b></p><p>  if (isfull) </p><p>  full_line_nu

54、m++; </p><p>  if (k != 0 && k - 1 != i && !isfull) </p><p>  for (int j = 0; j < columnNum; j++) { </p><p>  if (scrArr[i][j] == 0) </p><p>

55、  drawUnit(k - 1, j, 0); </p><p><b>  else </b></p><p>  drawUnit(k - 1, j, 2); </p><p>  scrArr[k - 1][j] = scrArr[i][j]; </p><p><b>  } <

56、;/b></p><p><b>  } </b></p><p>  for (int i = k - 1; i < rowNum; i++) { </p><p>  for (int j = 0; j < columnNum; j++) { </p><p>  drawUnit(i,

57、 j, 0); </p><p>  scrArr[i][j] = 0; </p><p><b>  } </b></p><p><b>  } </b></p><p>  ELS.score += full_line_num; </p><p> 

58、 ELS.scoreField.setText("" + ELS.score); </p><p><b>  } </b></p><p><b>  四.軟件測(cè)試運(yùn)行</b></p><p><b>  1.游戲開始運(yùn)行</b></p><p&

59、gt;  2.增加難度并填滿一行后,消去該行,分?jǐn)?shù)增加</p><p>  3.列被填滿,彈出游戲結(jié)束窗口</p><p>  五.課程設(shè)計(jì)總結(jié)及體會(huì)</p><p>  本次課程設(shè)計(jì)花費(fèi)了小組成員一周的時(shí)間來完成。從設(shè)計(jì)開始選擇課題到最終完成課程設(shè)計(jì),小組成員分工明確,相互合作,按時(shí)完成了相關(guān)任務(wù)。通過這次的實(shí)驗(yàn),我們學(xué)習(xí)到了很多Java編程的知識(shí),同時(shí)對(duì)這學(xué)期的

60、課本所學(xué)知識(shí)有了進(jìn)一步鞏固.特別是多線程,AWT組件和事件等能更熟練的運(yùn)用.</p><p>  這次實(shí)驗(yàn)過后,我們發(fā)現(xiàn),動(dòng)手比看書更能獲取實(shí)際有用的知識(shí).很多知識(shí),在書本上看似很有道理,可是這些知識(shí)在與實(shí)際情況結(jié)合起來往往就會(huì)出現(xiàn)書本上沒見過的情況,或者說之前的理解與實(shí)際的使用是截然不同的.所以,真理是從實(shí)踐中得知的,而且也只有實(shí)踐才能檢驗(yàn)真理.而這次試驗(yàn)也加強(qiáng)了我們這些方面的理解能力,對(duì)書面上的東西實(shí)際操作在

61、具體項(xiàng)目上有了一個(gè)更加清晰的認(rèn)識(shí)。我們還意識(shí)到一個(gè)大的程序,在寫代碼前,一定要有良好的需求分析和結(jié)構(gòu)設(shè)計(jì),應(yīng)該占整個(gè)程序設(shè)計(jì)的大部分時(shí)間,一個(gè)好的程序,分析設(shè)計(jì)應(yīng)該要非常充分,這樣才不至于代碼寫了一半才發(fā)現(xiàn)很多錯(cuò)誤。在具體代碼操作之前的設(shè)計(jì)規(guī)劃與構(gòu)建才是一個(gè)優(yōu)秀的程序設(shè)計(jì)的靈魂。</p><p>  設(shè)計(jì)過程中,我們另一個(gè)大的一個(gè)體會(huì)就是合作的好處,通過互相幫助,大大的提高了工作的效率。同時(shí)我們也發(fā)現(xiàn)了自己的不足

62、之處。對(duì)于很多自己以為很熟悉的東西,在細(xì)節(jié)上的把握有許多不足;有些想當(dāng)然,認(rèn)為它應(yīng)該是這樣,而忽略的事實(shí)。這也讓我們明白,做事細(xì)心是必須的,所謂細(xì)節(jié)決定成敗!</p><p>  程序還有很多不足,在今后的日子里,我們會(huì)虛心向老師同學(xué)請(qǐng)教,盡自己最大的努力做到最好。</p><p><b>  六.參考文獻(xiàn)</b></p><p>  [1].

63、《Java程序設(shè)計(jì)之網(wǎng)絡(luò)編程》,李芝興,楊瑞龍著,清華大學(xué)出版社</p><p>  [2].《Java語(yǔ)言與面向?qū)ο蟪绦蛟O(shè)計(jì)》,印旻編著,清華大學(xué)出版社 </p><p>  [3].《Java程序設(shè)計(jì)實(shí)用教程》,朱站立、沈偉編著,電子工業(yè)出版社</p><p><b>  附錄:重要代碼</b></p><p&

64、gt;  class GameCanvas extends Canvas implements KeyListener { </p><p>  final int unitSize = 25; // 小方塊邊長(zhǎng) </p><p>  int rowNum; // 正方格的行數(shù) </p><p>  int columnNum; // 正方格的列數(shù)

65、</p><p>  int maxAllowRowNum; // 允許有多少行未消 </p><p>  int blockInitRow; // 新出現(xiàn)塊的起始行坐標(biāo) </p><p>  int blockInitCol; // 新出現(xiàn)塊的起始列坐標(biāo) </p><p>  int[][] scrArr; // 屏幕數(shù)組 &

66、lt;/p><p>  Block b; // 對(duì)方快的引用 </p><p>  GameCanvas() { </p><p>  rowNum = 18; </p><p>  columnNum = 12; </p><p>  maxAllowRowNum = rowNum - 2; </

67、p><p>  b = new Block(this); </p><p>  blockInitRow = rowNum - 1; </p><p>  blockInitCol = columnNum / 2 - 2; </p><p>  scrArr = new int[32][32]; </p><p

68、><b>  } </b></p><p>  // 初始化屏幕,并將屏幕數(shù)組清零的方法 </p><p>  void initScr() { </p><p>  for (int i = 0; i < rowNum; i++) </p><p>  for (int j = 0; j &

69、lt; columnNum; j++) </p><p>  scrArr[i][j] = 0; </p><p>  b.reset(); </p><p>  repaint(); </p><p><b>  } </b></p><p>  // 重新刷新畫布方法

70、</p><p>  public void paint(Graphics g) { </p><p>  for (int i = 0; i < rowNum; i++) </p><p>  for (int j = 0; j < columnNum; j++) </p><p>  drawUnit(i, j,

71、scrArr[i][j]); </p><p><b>  } </b></p><p>  // 畫方塊的方法 </p><p>  public void drawUnit(int row, int col, int type) { </p><p>  scrArr[row][col] = type

72、; </p><p>  Graphics g = getGraphics(); </p><p>  switch (type) { // 表示畫方快的方法 </p><p>  case 0: </p><p>  g.setColor(Color.black); </p><p>  brea

73、k; // 以背景為顏色畫 </p><p>  case 1: </p><p>  g.setColor(Color.green); </p><p>  break; // 畫正在下落的方塊 </p><p>  case 2: </p><p>  g.setColor(Color.gray

74、); </p><p>  break; // 畫已經(jīng)落下的方法 </p><p><b>  } </b></p><p>  g.fill3DRect(col * unitSize, getSize().height - (row + 1) * unitSize, </p><p>  unitSiz

75、e, unitSize, true); </p><p>  g.dispose(); </p><p><b>  } </b></p><p>  public Block getBlock() { </p><p>  return b; // 返回block實(shí)例的引用 </p>

76、<p><b>  } </b></p><p>  // 返回屏幕數(shù)組中(row,col)位置的屬性值 </p><p>  public int getScrArrXY(int row, int col) { </p><p>  if (row < 0 || row >= rowNum || col &l

77、t; 0 || col >= columnNum) </p><p>  return (-1); </p><p><b>  else </b></p><p>  return (scrArr[row][col]); </p><p><b>  } </b></

78、p><p>  // 返回新塊的初始行坐標(biāo)方法 </p><p>  public int getInitRow() { </p><p>  return (blockInitRow); // 返回新塊的初始行坐標(biāo) </p><p><b>  } </b></p><p>  //

79、 返回新塊的初始列坐標(biāo)方法 </p><p>  public int getInitCol() { </p><p>  return (blockInitCol); // 返回新塊的初始列坐標(biāo) </p><p><b>  } </b></p><p>  public void reportGame

80、Over() {</p><p>  JOptionPane.showMessageDialog(this, "Game Over!請(qǐng)繼續(xù)努力");</p><p><b>  }</b></p><p>  // 滿行刪除方法 </p><p>  void deleteFullLine() {

81、 </p><p>  int full_line_num = 0; </p><p>  int k = 0; </p><p>  for (int i = 0; i < rowNum; i++) { </p><p>  boolean isfull = true; </p><p> 

82、 L1: for (int j = 0; j < columnNum; j++) </p><p>  if (scrArr[i][j] == 0) { </p><p><b>  k++; </b></p><p>  isfull = false; </p><p>  break L1;

83、 </p><p><b>  } </b></p><p>  if (isfull) </p><p>  full_line_num++; </p><p>  if (k != 0 && k - 1 != i && !isfull) </p><

84、p>  for (int j = 0; j < columnNum; j++) { </p><p>  if (scrArr[i][j] == 0) </p><p>  drawUnit(k - 1, j, 0); </p><p><b>  else </b></p><p>  dra

85、wUnit(k - 1, j, 2); </p><p>  scrArr[k - 1][j] = scrArr[i][j]; </p><p><b>  } </b></p><p><b>  } </b></p><p>  for (int i = k - 1; i <

86、; rowNum; i++) { </p><p>  for (int j = 0; j < columnNum; j++) { </p><p>  drawUnit(i, j, 0); </p><p>  scrArr[i][j] = 0; </p><p><b>  } </b>&l

87、t;/p><p><b>  } </b></p><p>  ELS.score += full_line_num; </p><p>  ELS.scoreField.setText("" + ELS.score); </p><p><b>  } </b>

88、;</p><p>  boolean isGameEnd() { </p><p>  for (int col = 0; col < columnNum; col++) { </p><p>  if (scrArr[maxAllowRowNum][col] != 0){</p><p>  reportGameOver()

89、;</p><p>  return true;</p><p><b>  } </b></p><p><b>  } </b></p><p>  return false;</p><p><b>  } </b></p>

90、<p>  public void keyTyped(KeyEvent e) { </p><p><b>  } </b></p><p>  public void keyReleased(KeyEvent e) { </p><p><b>  } </b></p><

91、;p>  public void keyPressed(KeyEvent e) { </p><p>  if (!ELS.isPlay) </p><p>  return; </p><p>  switch (e.getKeyCode()) { </p><p>  case KeyEvent.VK_DOWN:

92、 </p><p>  b.fallDown(); </p><p><b>  break; </b></p><p>  case KeyEvent.VK_LEFT: </p><p>  b.leftMove(); </p><p><b>  break; &

93、lt;/b></p><p>  case KeyEvent.VK_RIGHT: </p><p>  b.rightMove(); </p><p><b>  break; </b></p><p>  case KeyEvent.VK_UP: </p><p>  b.

94、leftTurn(); </p><p><b>  break; </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p&g

95、t;  class Command implements ActionListener { </p><p>  static final int button_play = 1; </p><p>  static final int button_levelup = 2; </p><p>  static final int button_leve

96、ldown = 3; </p><p>  static final int button_quit = 4; </p><p>  static final int button_pause = 5; </p><p>  static boolean pause_resume = true; </p><p>  int

97、curButton; </p><p>  GameCanvas scr; </p><p>  Command(int button, GameCanvas scr) { </p><p>  curButton = button; </p><p>  this.scr = scr; </p><p&g

98、t;<b>  } </b></p><p>  // 按鈕執(zhí)行方法 </p><p>  public void actionPerformed(ActionEvent e) { </p><p>  switch (curButton) { </p><p>  case button_play:

99、 </p><p><b>  { </b></p><p>  ELS.isPlay = true; </p><p>  ELS.score = 0; </p><p>  ELS.scoreField.setText("0"); </p><p>  EL

100、S.timer.resume(); </p><p>  scr.initScr(); </p><p><b>  } </b></p><p>  scr.requestFocus(); </p><p><b>  break; </b></p><p&g

101、t;  case button_levelup: </p><p>  if (ELS.level < 10) { </p><p>  ELS.level++; </p><p>  ELS.levelField.setText("" + ELS.level); </p><p>  ELS.sco

102、re = 0; </p><p>  ELS.scoreField.setText("" + ELS.score); </p><p><b>  } </b></p><p>  scr.requestFocus(); </p><p><b>  break; <

103、;/b></p><p>  case button_leveldown: </p><p>  if (ELS.level > 1) { </p><p>  ELS.level--; </p><p>  ELS.levelField.setText("" + ELS.level); <

104、;/p><p>  ELS.score = 0; </p><p>  ELS.scoreField.setText("" + ELS.score); </p><p><b>  } </b></p><p>  scr.requestFocus(); </p><p

105、><b>  break; </b></p><p>  case button_pause: </p><p>  if (pause_resume) { </p><p>  ELS.timer.suspend(); </p><p>  pause_resume = false; <

106、/p><p><b>  return;</b></p><p>  } else { </p><p>  ELS.timer.resume(); </p><p>  pause_resume = true; </p><p><b>  } </b><

107、/p><p>  scr.requestFocus(); </p><p><b>  break; </b></p><p>  case button_quit: </p><p>  System.exit(0); </p><p><b>  } </b&g

108、t;</p><p><b>  } </b></p><p><b>  } </b></p><p><b>  //方塊類 </b></p><p>  class Block { </p><p>  static int[][]

109、 pattern = { </p><p>  { 0x0f00, 0x4444, 0x0f00, 0x4444 },// 用十六進(jìn)至表示,本行表示長(zhǎng)條四種狀態(tài) </p><p>  { 0x04e0, 0x0464, 0x00e4, 0x04c4 }, </p><p>  { 0x4620, 0x6c00, 0x4620, 0x6c00 }, &

110、lt;/p><p>  { 0x2640, 0xc600, 0x2640, 0xc600 }, </p><p>  { 0x6220, 0x1700, 0x2230, 0x0740 }, </p><p>  { 0x6440, 0x0e20, 0x44c0, 0x8e00 }, </p><p>  { 0x0660, 0x066

111、0, 0x0660, 0x0660 } }; </p><p>  int blockType; </p><p>  int turnState; </p><p>  int blockState; </p><p>  int row, col; </p><p>  GameCanvas sc

112、r; </p><p>  Block(GameCanvas scr) { </p><p>  this.scr = scr; </p><p>  blockType = (int) (Math.random() * 1000) % 7; </p><p>  turnState = (int) (Math.random()

113、* 1000) % 4; </p><p>  blockState = 1; </p><p>  row = scr.getInitRow(); </p><p>  col = scr.getInitCol(); </p><p><b>  } </b></p><p>

114、  public void reset() { </p><p>  blockType = (int) (Math.random() * 1000) % 7; </p><p>  turnState = (int) (Math.random() * 1000) % 4; </p><p>  blockState = 1; </p>

115、<p>  row = scr.getInitRow(); </p><p>  col = scr.getInitCol(); </p><p>  dispBlock(1); </p><p><b>  }</b></p><p>  public void leftTurn() { &

116、lt;/p><p>  if (assertValid(blockType, (turnState + 1) % 4, row, col)) { </p><p>  dispBlock(0); </p><p>  turnState = (turnState + 1) % 4; </p><p>  dispBlock(1);

117、 </p><p><b>  } </b></p><p><b>  } </b></p><p>  public void leftMove() { </p><p>  if (assertValid(blockType, turnState, row, col - 1)) {

118、 </p><p>  dispBlock(0); </p><p><b>  col--; </b></p><p>  dispBlock(1); </p><p><b>  } </b></p><p><b>  } </b

119、></p><p>  public void rightMove() { </p><p>  if (assertValid(blockType, turnState, row, col + 1)) { </p><p>  dispBlock(0); </p><p><b>  col++; </

120、b></p><p>  dispBlock(1); </p><p><b>  } </b></p><p><b>  } </b></p><p>  public boolean fallDown() { </p><p>  if (block

121、State == 2) </p><p>  return (false); </p><p>  if (assertValid(blockType, turnState, row - 1, col)) { </p><p>  dispBlock(0); </p><p><b>  row--; </

122、b></p><p>  dispBlock(1); </p><p>  return (true); </p><p>  } else { </p><p>  blockState = 2; </p><p>  dispBlock(2); </p><p> 

123、 return (false); </p><p><b>  } </b></p><p><b>  } </b></p><p>  // 判斷是否正確的方法 </p><p>  boolean assertValid(int t, int s, int row, int c

124、ol) { </p><p>  int k = 0x8000; </p><p>  for (int i = 0; i < 4; i++) { </p><p>  for (int j = 0; j < 4; j++) { </p><p>  if ((int) (pattern[t][s] & k

125、) != 0) { </p><p>  int temp = scr.getScrArrXY(row - i, col + j); </p><p>  if (temp < 0 || temp == 2) </p><p>  return false; </p><p><b>  } </b&

126、gt;</p><p>  k = k >> 1; </p><p><b>  } </b></p><p><b>  } </b></p><p>  return true; </p><p><b>  } </b&g

127、t;</p><p>  // 同步顯示的方法 </p><p>  public synchronized void dispBlock(int s) { </p><p>  int k = 0x8000; </p><p>  for (int i = 0; i < 4; i++) { </p>&l

128、t;p>  for (int j = 0; j < 4; j++) { </p><p>  if (((int) pattern[blockType][turnState] & k) != 0) { </p><p>  scr.drawUnit(row - i, col + j, s); </p><p><b>  }

129、 </b></p><p>  k = k >> 1; </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b

130、>  } </b></p><p><b>  //定時(shí)線程 </b></p><p>  class MyTimer extends Thread { </p><p>  GameCanvas scr; </p><p>  public MyTimer(GameCanvas scr

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論