2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩20頁(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><b>  摘要</b></p><p>  Java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計(jì)語(yǔ)言和Java平臺(tái)(即JavaSE, JavaEE, JavaME)的總稱。Java 技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于個(gè)人PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算

2、機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。在全球云計(jì)算和移動(dòng)互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢(shì)和廣闊前景。</p><p><b>  目錄 </b></p><p><b>  引言1</b></p><p><b>  1研究方法1</b></p><

3、;p>  1.1俄羅斯方塊游戲的基本要求1</p><p>  1.1.1游戲基本功能:移動(dòng)、加速、變形、消除、游戲結(jié)束等。1</p><p>  1.1.2顯示下一個(gè)方塊。1</p><p>  1.1.3游戲難度歲分?jǐn)?shù)遞增。1</p><p>  1.1.4玩家自己設(shè)置游戲難度、開始、暫停等。1</p>&l

4、t;p>  1.1.5分?jǐn)?shù)的統(tǒng)計(jì)等。1</p><p><b>  2、研究過程1</b></p><p>  2.1、模塊設(shè)計(jì)1</p><p>  2.1.1、控制面板類1</p><p>  2.1.2、塊類2</p><p>  2.1.3、游戲主類2</p>

5、<p>  2.1.4、方格類2</p><p>  2.1.5、畫布類2</p><p>  2.2、詳細(xì)設(shè)計(jì)2</p><p>  2.2.1、游戲控制2</p><p>  2.2.2、方塊設(shè)計(jì)3</p><p>  2.2.3、畫布設(shè)計(jì)4</p><p><

6、;b>  3、運(yùn)行結(jié)果6</b></p><p>  3.1、初始畫面:6</p><p>  3.2、游戲設(shè)置界面:7</p><p>  3.3、游戲進(jìn)行中的界面:8</p><p>  3.4、游戲結(jié)束界面:9</p><p><b>  4、心得體會(huì)9</b>

7、</p><p><b>  5、參考文獻(xiàn):9</b></p><p>  6、附錄:游戲主類代碼9</p><p><b>  引言</b></p><p>  開發(fā)一個(gè)單機(jī)游戲系統(tǒng),能夠?qū)崿F(xiàn)俄羅斯方塊程序。通過鍵盤按鍵可以調(diào)整方塊的旋轉(zhuǎn)方向。最終達(dá)到能夠通過本次課程設(shè)計(jì),進(jìn)一步鞏固所學(xué)jav

8、a知識(shí),學(xué)會(huì)將理論用于實(shí)踐,掌握所學(xué)知識(shí)的實(shí)驗(yàn)意義。操作系統(tǒng):windows xp,開發(fā)工具:Myeclipse 開發(fā)語(yǔ)言:java</p><p><b>  1研究方法</b></p><p>  1.1俄羅斯方塊游戲的基本要求</p><p>  1.1.1游戲基本功能:移動(dòng)、加速、變形、消除、游戲結(jié)束等。</p><

9、p>  1.1.2顯示下一個(gè)方塊。</p><p>  1.1.3游戲難度歲分?jǐn)?shù)遞增。</p><p>  1.1.4玩家自己設(shè)置游戲難度、開始、暫停等。</p><p>  1.1.5分?jǐn)?shù)的統(tǒng)計(jì)等。</p><p><b>  2、研究過程</b></p><p><b>  2

10、.1、模塊設(shè)計(jì)</b></p><p>  2.1.1、控制面板類</p><p>  繼承自JPanel.上邊安放預(yù)顯窗口、等級(jí)、得分、控制按鈕。主要用來(lái)控制游戲進(jìn)程。</p><p><b>  2.1.2、塊類</b></p><p>  繼承自線程類(Thread)由 4 * 4 個(gè)方格(ErsBox

11、)構(gòu)成一個(gè)塊,控制塊的移動(dòng)、下落、變形等。</p><p>  2.1.3、游戲主類</p><p>  繼承自JFrame類,負(fù)責(zé)游戲的全局控制。</p><p>  內(nèi)含: 一個(gè)GameCanvas畫布類的實(shí)例引用;一個(gè)保存當(dāng)前活動(dòng)塊(ErsBlock)實(shí)例的引用; 一個(gè)保存當(dāng)前控制面板(ControlPanel)實(shí)例的引用。</p><p&

12、gt;<b>  2.1.4、方格類</b></p><p>  是組成塊的基本元素,用自己的顏色來(lái)表示塊的外觀。</p><p><b>  2.1.5、畫布類</b></p><p>  內(nèi)有<行數(shù)> *<列數(shù)>個(gè)方格類實(shí)例。繼承自JPanel類。 ErsBlock線程類動(dòng)態(tài)改變畫布類的方格顏色

13、,畫布類通過 檢查方格顏</p><p>  色來(lái)體現(xiàn)ErsBlock塊的移動(dòng)情況。</p><p><b>  2.2、詳細(xì)設(shè)計(jì)</b></p><p>  2.2.1、游戲控制</p><p>  一輪游戲過程,實(shí)現(xiàn)了Runnable接口。一輪游戲是一個(gè)大循環(huán),在這個(gè)循環(huán)中,每隔100毫秒,檢查游戲中的當(dāng)前塊是否已經(jīng)

14、到底了,如果沒有,就繼續(xù)等待。如果到底了,就看有沒有全填滿的行,如果有就刪除它,并為游戲者加分,同時(shí)隨機(jī)產(chǎn)生一個(gè),新的當(dāng)前塊,讓它自動(dòng)下落。當(dāng)新產(chǎn)生一個(gè)塊時(shí),先檢查畫布最頂上的一行是否已經(jīng)被占了,如果是,可以判斷Game Over了。</p><p><b>  代碼示例:</b></p><p>  private class Game implements Run

15、nable {</p><p>  public void run() {</p><p>  int col = (int) (Math.random() * (canvas.getCols() - 3)),</p><p>  style = ErsBlock.STYLES[(int) (Math.random() * 7)][(int) (Math.rando

16、m() * 4)];</p><p>  while (playing) {</p><p>  if (block != null) { //第一次循環(huán)時(shí),block為空</p><p>  if (block.isAlive()) {</p><p><b>  try {</b></p><

17、;p>  Thread.currentThread().sleep(100);</p><p>  } catch (InterruptedException ie) {</p><p>  ie.printStackTrace();</p><p><b>  }</b></p><p><b>  c

18、ontinue;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  checkFullLine(); //檢查是否有全填滿的行</p><p>  if (isGameOver()) { //檢查游戲是否應(yīng)該

19、結(jié)束了</p><p>  miPlay.setEnabled(true);</p><p>  miPause.setEnabled(true);</p><p>  miResume.setEnabled(false);</p><p>  ctrlPanel.setPlayButtonEnable(true);</p>&

20、lt;p>  ctrlPanel.setPauseButtonLabel(true);</p><p>  reportGameOver();</p><p><b>  return;</b></p><p><b>  }</b></p><p>  block = new ErsBloc

21、k(style, -1, col, getLevel(), canvas);</p><p>  block.start();</p><p>  col = (int) (Math.random() * (canvas.getCols() - 3));</p><p>  style = ErsBlock.STYLES[(int) (Math.random() *

22、 7)][(int) (Math.random() * 4)];</p><p>  ctrlPanel.setTipStyle(style);</p><p><b>  }</b></p><p><b>  }</b></p><p>  2.2.2、方塊設(shè)計(jì)</p><p

23、>  構(gòu)造函數(shù),產(chǎn)生一個(gè)特定的塊style 塊的樣式,對(duì)應(yīng)STYLES的28個(gè)值中的一個(gè)y 起始位置,左上角在canvas中的坐標(biāo)行x 起始位置,左上角在canvas中的坐標(biāo)列l(wèi)evel 游戲等級(jí),控制塊的下落速度。canvas 畫板</p><p><b>  代碼:</b></p><p>  public ErsBlock(int style, int y

24、, int x, int level, GameCanvas canvas) {</p><p>  this.style = style;</p><p>  this.y = y;</p><p>  this.x = x;</p><p>  this.level = level;</p><p>  this.

25、canvas = canvas;</p><p>  int key = 0x8000;</p><p>  for (int i = 0; i < boxes.length; i++) {</p><p>  for (int j = 0; j < boxes[i].length; j++) {</p><p>  boolea

26、n isColor = ((style & key) != 0);</p><p>  boxes[i][j] = new ErsBox(isColor);</p><p>  key >>= 1;</p><p><b>  }</b></p><p><b>  }</b>&

27、lt;/p><p>  display();</p><p><b>  }</b></p><p>  2.2.3、畫布設(shè)計(jì)</p><p>  包括顯示方塊、積分;取得游戲成績(jī)、控制積分的疊加、清零;游戲升級(jí)積分的變化等。</p><p><b>  代碼:</b></

28、p><p><b>  /**</b></p><p>  * 取得自上一次升級(jí)后的積分</p><p>  * @return int, 上一次升級(jí)后的積分</p><p><b>  */</b></p><p>  public int getScoreForLevelUp

29、date() {</p><p>  return scoreForLevelUpdate;</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 升級(jí)后,將上一次升級(jí)以來(lái)的積分清0</p><p><b>  

30、*/</b></p><p>  public void resetScoreForLevelUpdate() {</p><p>  scoreForLevelUpdate -= ErsBlocksGame.PER_LEVEL_SCORE;</p><p><b>  }</b></p><p><b

31、>  /**</b></p><p>  * 得到某一行某一列的方格引用。</p><p>  * @param row int, 要引用的方格所在的行</p><p>  * @param col int, 要引用的方格所在的列</p><p>  * @return ErsBox, 在row行col列的方格的引用<

32、/p><p><b>  */</b></p><p>  public ErsBox getBox(int row, int col) {</p><p>  if (row < 0 || row > boxes.length - 1</p><p>  || col < 0 || col > bo

33、xes[0].length - 1)</p><p>  return null;</p><p>  return (boxes[row][col]);</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 覆蓋JCom

34、ponent類的函數(shù),畫組件。</p><p>  * @param g 圖形設(shè)備環(huán)境</p><p><b>  */</b></p><p>  public void paintComponent(Graphics g) {</p><p>  super.paintComponent(g);</p>

35、<p>  g.setColor(frontColor);</p><p>  for (int i = 0; i < boxes.length; i++) {</p><p>  for (int j = 0; j < boxes[i].length; j++) {</p><p>  g.setColor(boxes[i][j].isCo

36、lorBox() ? frontColor : backColor);</p><p>  g.fill3DRect(j * boxWidth, i * boxHeight,</p><p>  boxWidth, boxHeight, true);</p><p><b>  }</b></p><p><b&g

37、t;  }</b></p><p><b>  }</b></p><p><b>  /*</b></p><p>  * 根據(jù)窗口的大小,自動(dòng)調(diào)整方格的尺寸</p><p><b>  */</b></p><p>  public vo

38、id fanning() {</p><p>  boxWidth = getSize().width / cols;</p><p>  boxHeight = getSize().height / rows;</p><p><b>  }</b></p><p><b>  /**</b>&l

39、t;/p><p>  * 當(dāng)一行被游戲者疊滿后,將此行清除,并為游戲者加分</p><p>  * @param row int, 要清除的行,是由ErsBoxesGame類計(jì)算的</p><p><b>  */</b></p><p>  public synchronized void removeLine(int r

40、ow) {</p><p>  for (int i = row; i > 0; i--) {</p><p>  for (int j = 0; j < cols; j++)</p><p>  boxes[i][j] = (ErsBox) boxes[i - 1][j].clone();</p><p><b>  

41、}</b></p><p>  score += ErsBlocksGame.PER_LINE_SCORE;</p><p>  scoreForLevelUpdate += ErsBlocksGame.PER_LINE_SCORE;</p><p>  repaint();</p><p><b>  }</b&

42、gt;</p><p><b>  /**</b></p><p>  * 重置畫布,置積分為0</p><p><b>  */</b></p><p>  public void reset() {</p><p>  score = 0;</p><

43、p>  scoreForLevelUpdate = 0;</p><p>  for (int i = 0; i < boxes.length; i++) {</p><p>  for (int j = 0; j < boxes[i].length; j++)</p><p>  boxes[i][j].setColor(false);</

44、p><p><b>  }</b></p><p>  repaint();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  3、運(yùn)行結(jié)果</b></p><

45、;p><b>  3.1、初始</b></p><p>  3.2、游戲設(shè)置界面:</p><p>  3.3、游戲進(jìn)行中的界面:</p><p>  3.4、游戲結(jié)束界面:</p><p><b>  4、心得體會(huì)</b></p><p>  通過對(duì)俄羅斯方塊游戲的編

46、寫,加深了對(duì)java多線程的理解。體驗(yàn)到了將理論應(yīng)用到實(shí)踐中的快樂。在編程過程中遇到了許多困難,通過老師、同學(xué)的幫助已經(jīng)書籍的查閱和上網(wǎng)查資料,基本上都得到了解決。通過這次的課程設(shè)計(jì),使我們對(duì)JAVA面向?qū)ο蟮木幊逃辛松钜徊降牧私?。同時(shí)也發(fā)現(xiàn)了自己的許多不足之處,從此以后要更加認(rèn)真的學(xué)習(xí)各種知識(shí),不斷完善、提高自己的水平,才能得到真正的提高。</p><p><b>  5、參考文獻(xiàn):</b>

47、;</p><p>  《Java語(yǔ)言程序設(shè)計(jì)》-------------徐保民 陳旭東 李春艷</p><p>  《Java大學(xué)實(shí)用教程》-------------耿祥義 張躍平</p><p>  《Java程序設(shè)計(jì)實(shí)用教程》--------錢慎一</p><p>  6、附錄:游戲主類代碼</p><p>  

48、package Block;</p><p>  import javax.swing.*;</p><p>  import java.awt.*;</p><p>  import java.awt.event.*;</p><p><b>  /**</b></p><p>  * 游戲主類

49、,繼承自JFrame類,負(fù)責(zé)游戲的全局控制。</p><p><b>  * 內(nèi)含</b></p><p>  * 1, 一個(gè)GameCanvas畫布類的實(shí)例引用,</p><p>  * 2, 一個(gè)保存當(dāng)前活動(dòng)塊(ErsBlock)實(shí)例的引用,</p><p>  * 3, 一個(gè)保存當(dāng)前控制面板(ControlPane

50、l)實(shí)例的引用;</p><p><b>  */</b></p><p>  public class ErsBlocksGame extends JFrame {</p><p>  private static final long serialVersionUID = 1L; </p><p><b>

51、  /**</b></p><p>  * 每填滿一行計(jì)多少分</p><p><b>  */</b></p><p>  public final static int PER_LINE_SCORE = 100;</p><p><b>  /**</b></p>&

52、lt;p>  * 積多少分以后能升級(jí)</p><p><b>  */</b></p><p>  public final static int PER_LEVEL_SCORE = PER_LINE_SCORE * 20;</p><p><b>  /**</b></p><p>  *

53、最大級(jí)數(shù)是10級(jí)</p><p><b>  */</b></p><p>  public final static int MAX_LEVEL = 10;</p><p><b>  /**</b></p><p><b>  * 默認(rèn)級(jí)數(shù)是5</b></p>

54、<p><b>  */</b></p><p>  public final static int DEFAULT_LEVEL = 5;</p><p>  private GameCanvas canvas;</p><p>  private ErsBlock block;</p><p>  priv

55、ate boolean playing = false;</p><p>  private ControlPanel ctrlPanel;</p><p>  private JMenuBar bar = new JMenuBar();</p><p>  private JMenu</p><p>  mGame = new JMenu(

56、"游戲"),</p><p>  mControl = new JMenu("控制"),</p><p>  mWindowStyle = new JMenu("界面風(fēng)格"),</p><p>  mInfo = new JMenu("關(guān)于");</p><p>

57、  private JMenuItem</p><p>  miNewGame = new JMenuItem("新游戲"),</p><p>  miSetBlockColor = new JMenuItem("設(shè)置方塊顏色"),</p><p>  miSetBackColor = new JMenuItem("

58、設(shè)置背景顏色"),</p><p>  miTurnHarder = new JMenuItem("增加難度級(jí)別"),</p><p>  miTurnEasier = new JMenuItem("減小難度級(jí)別"),</p><p>  miExit = new JMenuItem("退出"),

59、</p><p>  miPlay = new JMenuItem("開始"),</p><p>  miPause = new JMenuItem("暫停"),</p><p>  miResume = new JMenuItem("恢復(fù)"),</p><p>  miStop =

60、 new JMenuItem("停止"),</p><p>  miAuthor = new JMenuItem("作者: 2009081314 quyan "),</p><p>  miSourceInfo = new JMenuItem("2012 課程設(shè)計(jì)。");</p><p>  private

61、 JCheckBoxMenuItem</p><p>  miAsWindows = new JCheckBoxMenuItem("Windows"),</p><p>  miAsMotif = new JCheckBoxMenuItem("Motif"),</p><p>  miAsMetal = new JCheckB

62、oxMenuItem("Metal", true);</p><p><b>  /**</b></p><p>  * 主游戲類的構(gòu)造函數(shù)</p><p>  * @param title String,窗口標(biāo)題</p><p><b>  */</b></p>

63、<p>  public ErsBlocksGame(String title) {</p><p>  super(title);</p><p>  setSize(315, 392);</p><p>  Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();</p>

64、;<p>  setLocation((scrSize.width - getSize().width) / 2,</p><p>  (scrSize.height - getSize().height) / 2);</p><p>  createMenu();</p><p>  Container container = getContentP

65、ane();</p><p>  container.setLayout(new BorderLayout(6, 0));</p><p>  canvas = new GameCanvas(20, 12);</p><p>  ctrlPanel = new ControlPanel(this);</p><p>  container.a

66、dd(canvas, BorderLayout.CENTER);</p><p>  container.add(ctrlPanel, BorderLayout.EAST);</p><p>  addWindowListener(new WindowAdapter() {</p><p>  public void windowClosing(WindowEven

67、t we) {</p><p>  stopGame();</p><p>  System.exit(0);</p><p><b>  }</b></p><p><b>  });</b></p><p>  addComponentListener(new Compo

68、nentAdapter() {</p><p>  public void componentResized(ComponentEvent ce) {</p><p>  canvas.fanning();</p><p><b>  }</b></p><p><b>  });</b></

69、p><p><b>  show(); </b></p><p>  canvas.fanning();</p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  * 讓游戲“復(fù)位”</

70、b></p><p><b>  */</b></p><p>  public void reset() {</p><p>  ctrlPanel.reset();</p><p>  canvas.reset();</p><p><b>  }</b></

71、p><p><b>  /**</b></p><p>  * 判斷游戲是否還在進(jìn)行</p><p>  * @return boolean, true-還在運(yùn)行,false-已經(jīng)停止</p><p><b>  */</b></p><p>  public boolean i

72、sPlaying() {</p><p>  return playing;</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 得到當(dāng)前活動(dòng)的塊</p><p>  * @return ErsBlock, 當(dāng)前活動(dòng)塊的

73、引用</p><p><b>  */</b></p><p>  public ErsBlock getCurBlock() {</p><p>  return block;</p><p><b>  }</b></p><p><b>  /**</b

74、></p><p><b>  * 得到當(dāng)前畫布</b></p><p>  * @return GameCanvas, 當(dāng)前畫布的引用</p><p><b>  */</b></p><p>  public GameCanvas getCanvas() {</p><

75、p>  return canvas;</p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  * 開始游戲</b></p><p><b>  */</b></p><p&g

76、t;  public void playGame() {</p><p><b>  play();</b></p><p>  ctrlPanel.setPlayButtonEnable(false);</p><p>  miPlay.setEnabled(false);</p><p>  ctrlPanel.re

77、questFocus();</p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  * 游戲暫停</b></p><p><b>  */</b></p><p>  publ

78、ic void pauseGame() {</p><p>  if (block != null) block.pauseMove();</p><p>  ctrlPanel.setPauseButtonLabel(false);</p><p>  miPause.setEnabled(false);</p><p>  miResum

79、e.setEnabled(true);</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 讓暫停中的游戲繼續(xù)</p><p><b>  */</b></p><p>  public void

80、resumeGame() {</p><p>  if (block != null) block.resumeMove();</p><p>  ctrlPanel.setPauseButtonLabel(true);</p><p>  miPause.setEnabled(true);</p><p>  miResume.setEna

81、bled(false);</p><p>  ctrlPanel.requestFocus();</p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  * 用戶停止游戲</b></p><p>&

82、lt;b>  */</b></p><p>  public void stopGame() {</p><p>  playing = false;</p><p>  if (block != null) block.stopMove();</p><p>  miPlay.setEnabled(true);</p

83、><p>  miPause.setEnabled(true);</p><p>  miResume.setEnabled(false);</p><p>  ctrlPanel.setPlayButtonEnable(true);</p><p>  ctrlPanel.setPauseButtonLabel(true);</p>

84、<p><b>  }</b></p><p><b>  /**</b></p><p>  * 得到當(dāng)前游戲者設(shè)置的游戲難度</p><p>  * @return int, 游戲難度1-MAX_LEVEL</p><p><b>  */</b></p

85、><p>  public int getLevel() {</p><p>  return ctrlPanel.getLevel();</p><p><b>  }</b></p><p><b>  /**</b></p><p>  * 讓用戶設(shè)置游戲難度</p&

86、gt;<p>  * @param level int, 游戲難度1-MAX_LEVEL</p><p><b>  */</b></p><p>  public void setLevel(int level) {</p><p>  if (level < 11 && level > 0) ctr

87、lPanel.setLevel(level);</p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  * 得到游戲積分</b></p><p>  * @return int, 積分。</p><p&

88、gt;<b>  */</b></p><p>  public int getScore() {</p><p>  if (canvas != null) return canvas.getScore();</p><p><b>  return 0;</b></p><p><b>

89、;  }</b></p><p><b>  /**</b></p><p>  * 得到自上次升級(jí)以來(lái)的游戲積分,升級(jí)以后,此積分清零</p><p>  * @return int, 積分。</p><p><b>  */</b></p><p>  pub

90、lic int getScoreForLevelUpdate() {</p><p>  if (canvas != null) return canvas.getScoreForLevelUpdate();</p><p><b>  return 0;</b></p><p><b>  }</b></p>

91、<p><b>  /**</b></p><p>  * 當(dāng)分?jǐn)?shù)累計(jì)到一定的數(shù)量時(shí),升一次級(jí)</p><p>  * @return boolean, ture-update successufl, false-update fail</p><p><b>  */</b></p><

92、p>  public boolean levelUpdate() {</p><p>  int curLevel = getLevel();</p><p>  if (curLevel < MAX_LEVEL) {</p><p>  setLevel(curLevel + 1);</p><p>  canvas.reset

93、ScoreForLevelUpdate();</p><p>  return true;</p><p><b>  }</b></p><p>  return false;</p><p><b>  }</b></p><p><b>  /**</b

94、></p><p><b>  * 游戲開始</b></p><p><b>  */</b></p><p>  private void play() {</p><p><b>  reset();</b></p><p>  playing

95、 = true;</p><p>  Thread thread = new Thread(new Game());</p><p>  thread.start();</p><p><b>  }</b></p><p><b>  /**</b></p><p><

96、;b>  * 報(bào)告游戲結(jié)束了</b></p><p><b>  */</b></p><p>  private void reportGameOver() {</p><p>  JOptionPane.showMessageDialog(this, "Game Over!");</p>

97、<p><b>  }</b></p><p><b>  /**</b></p><p>  * 建立并設(shè)置窗口菜單</p><p><b>  */</b></p><p>  private void createMenu() {</p><

98、p>  bar.add(mGame);</p><p>  bar.add(mControl);</p><p>  bar.add(mWindowStyle);</p><p>  bar.add(mInfo);</p><p>  mGame.add(miNewGame);</p><p>  mGame.a

99、ddSeparator();</p><p>  mGame.add(miSetBlockColor);</p><p>  mGame.add(miSetBackColor);</p><p>  mGame.addSeparator();</p><p>  mGame.add(miTurnHarder);</p><

100、p>  mGame.add(miTurnEasier);</p><p>  mGame.addSeparator();</p><p>  mGame.add(miExit);</p><p>  mControl.add(miPlay);</p><p>  mControl.add(miPause);</p><

101、;p>  mControl.add(miResume);</p><p>  mControl.add(miStop);</p><p>  mWindowStyle.add(miAsWindows);</p><p>  mWindowStyle.add(miAsMotif);</p><p>  mWindowStyle.add(m

102、iAsMetal);</p><p>  mInfo.add(miAuthor);</p><p>  mInfo.add(miSourceInfo);</p><p>  setJMenuBar(bar);</p><p>  miPause.setAccelerator(</p><p>  KeyStroke.g

103、etKeyStroke(KeyEvent.VK_P, KeyEvent.CTRL_MASK));</p><p>  miResume.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0));</p><p>  miNewGame.addActionListener(new ActionListener() {</p

104、><p>  public void actionPerformed(ActionEvent ae) {</p><p>  stopGame();</p><p><b>  reset();</b></p><p>  setLevel(DEFAULT_LEVEL);</p><p><b&

105、gt;  }</b></p><p><b>  });</b></p><p>  miSetBlockColor.addActionListener(new ActionListener() {</p><p>  public void actionPerformed(ActionEvent ae) {</p>

106、<p>  Color newFrontColor =</p><p>  JColorChooser.showDialog(ErsBlocksGame.this,</p><p>  "Set color for block", canvas.getBlockColor());</p><p>  if (newFrontColor

107、!= null)</p><p>  canvas.setBlockColor(newFrontColor);</p><p><b>  }</b></p><p><b>  });</b></p><p>  miSetBackColor.addActionListener(new Actio

108、nListener() {</p><p>  public void actionPerformed(ActionEvent ae) {</p><p>  Color newBackColor =</p><p>  JColorChooser.showDialog(ErsBlocksGame.this,</p><p>  "

109、Set color for block", canvas.getBackgroundColor());</p><p>  if (newBackColor != null)</p><p>  canvas.setBackgroundColor(newBackColor);</p><p><b>  }</b></p>

110、<p><b>  });</b></p><p>  miTurnHarder.addActionListener(new ActionListener() {</p><p>  public void actionPerformed(ActionEvent ae) {</p><p>  int curLevel = get

111、Level();</p><p>  if (curLevel < MAX_LEVEL) setLevel(curLevel + 1);</p><p><b>  }</b></p><p><b>  });</b></p><p>  miTurnEasier.addActionList

112、ener(new ActionListener() {</p><p>  public void actionPerformed(ActionEvent ae) {</p><p>  int curLevel = getLevel();</p><p>  if (curLevel > 1) setLevel(curLevel - 1);</p>

113、;<p><b>  }</b></p><p><b>  });</b></p><p>  miExit.addActionListener(new ActionListener() {</p><p>  public void actionPerformed(ActionEvent ae) {<

114、;/p><p>  System.exit(0);</p><p><b>  }</b></p><p><b>  });</b></p><p>  miPlay.addActionListener(new ActionListener() {</p><p>  publ

115、ic void actionPerformed(ActionEvent ae) {</p><p>  playGame();</p><p><b>  }</b></p><p><b>  });</b></p><p>  miPause.addActionListener(new Acti

116、onListener() {</p><p>  public void actionPerformed(ActionEvent ae) {</p><p>  pauseGame();</p><p><b>  }</b></p><p><b>  });</b></p><

117、;p>  miResume.addActionListener(new ActionListener() {</p><p>  public void actionPerformed(ActionEvent ae) {</p><p>  resumeGame();</p><p><b>  }</b></p><

118、p><b>  });</b></p><p>  miStop.addActionListener(new ActionListener() {</p><p>  public void actionPerformed(ActionEvent ae) {</p><p>  stopGame();</p><p&g

119、t;<b>  }</b></p><p><b>  });</b></p><p>  miAsWindows.addActionListener(new ActionListener() {</p><p>  public void actionPerformed(ActionEvent ae) {</p&g

120、t;<p>  String plaf = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";</p><p>  setWindowStyle(plaf);</p><p>  canvas.fanning();</p><p>  ctrlPanel.fanning();&

121、lt;/p><p>  miAsWindows.setState(true);</p><p>  miAsMetal.setState(false);</p><p>  miAsMotif.setState(false);</p><p><b>  }</b></p><p><b>

122、  });</b></p><p>  miAsMotif.addActionListener(new ActionListener() {</p><p>  public void actionPerformed(ActionEvent ae) {</p><p>  String plaf = "com.sun.java.swing.pl

123、af.motif.MotifLookAndFeel";</p><p>  setWindowStyle(plaf);</p><p>  canvas.fanning();</p><p>  ctrlPanel.fanning();</p><p>  miAsWindows.setState(false);</p>

124、<p>  miAsMetal.setState(false);</p><p>  miAsMotif.setState(true);</p><p><b>  }</b></p><p><b>  });</b></p><p>  miAsMetal.addActionLis

125、tener(new ActionListener() {</p><p>  public void actionPerformed(ActionEvent ae) {</p><p>  String plaf = "javax.swing.plaf.metal.MetalLookAndFeel";</p><p>  setWindowSty

126、le(plaf);</p><p>  canvas.fanning();</p><p>  ctrlPanel.fanning();</p><p>  miAsWindows.setState(false);</p><p>  miAsMetal.setState(true);</p><p>  miAsMo

127、tif.setState(false);</p><p><b>  }</b></p><p><b>  });</b></p><p><b>  }</b></p><p><b>  /**</b></p><p>  *

128、 根據(jù)字串設(shè)置窗口外觀</p><p>  * @param plaf String, 窗口外觀的描述</p><p><b>  */</b></p><p>  private void setWindowStyle(String plaf) {</p><p><b>  try {</b>&

129、lt;/p><p>  UIManager.setLookAndFeel(plaf);</p><p>  SwingUtilities.updateComponentTreeUI(this);</p><p>  } catch (Exception e) {</p><p><b>  }</b></p>

130、<p><b>  }</b></p><p>  private class Game implements Runnable {</p><p>  public void run() {</p><p>  int col = (int) (Math.random() * (canvas.getCols() - 3)),<

131、/p><p>  style = ErsBlock.STYLES[(int) (Math.random() * 7)][(int) (Math.random() * 4)];</p><p>  while (playing) {</p><p>  if (block != null) { //第一次循環(huán)時(shí),block為空</p><p>

132、;  if (block.isAlive()) {</p><p><b>  try {</b></p><p>  Thread.currentThread().sleep(100);</p><p>  } catch (InterruptedException ie) {</p><p>  ie.printSt

133、ackTrace();</p><p><b>  }</b></p><p><b>  continue;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  checkF

134、ullLine(); //檢查是否有全填滿的行</p><p>  if (isGameOver()) { //檢查游戲是否應(yīng)該結(jié)束了</p><p>  miPlay.setEnabled(true);</p><p>  miPause.setEnabled(true);</p><p>  miResume.set

135、Enabled(false);</p><p>  ctrlPanel.setPlayButtonEnable(true);</p><p>  ctrlPanel.setPauseButtonLabel(true);</p><p>  reportGameOver();</p><p><b>  return;</b&g

溫馨提示

  • 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)論