基于java的掃雷游戲課程設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  基于JAVA的掃雷小游戲</p><p><b>  引言</b></p><p>  本次課程設(shè)計(jì)目的在于設(shè)計(jì)開(kāi)發(fā)一個(gè)類似windows自帶掃雷游戲的小游戲,實(shí)現(xiàn)基本的掃雷面板及掃雷的游戲功能、游戲數(shù)據(jù)存儲(chǔ)、游戲計(jì)時(shí)等功能。設(shè)計(jì)采用Windows下的eclipse開(kāi)發(fā)工具由本人獨(dú)立完成。</p><p><b>

2、;  系統(tǒng)設(shè)計(jì)</b></p><p>  本游戲采用快速原型模型的軟件開(kāi)發(fā)方法設(shè)計(jì),總共經(jīng)歷了八個(gè)版本的修改最終完成設(shè)計(jì)要求。</p><p>  在第一個(gè)版本中,實(shí)現(xiàn)如下功能:</p><p>  基于JFrame的掃雷框架的建立:</p><p>  使用JFrame建立起如圖的所示的程序框架,雷區(qū)為12*12,添加JPan

3、el和JButton,采用setBounds的布局方式而非內(nèi)置的布局方法。</p><p>  基于Random方法的虛擬雷盤的建立和動(dòng)態(tài)修改:</p><p>  通過(guò)Random產(chǎn)生出一個(gè)14*14的數(shù)組,其中,二維數(shù)組邊緣對(duì)應(yīng)邊框標(biāo)記值為2,產(chǎn)生的雷點(diǎn)標(biāo)記為1,普通點(diǎn)標(biāo)記為0。再次建立一個(gè)12*12的數(shù)組對(duì)應(yīng)實(shí)際的游戲面板,初始值為0,遍歷14*14的數(shù)組中非邊緣的元素,將每個(gè)格子周

4、圍的地雷數(shù)目賦值給對(duì)應(yīng)的12*12數(shù)組,地雷仍然用-1來(lái)表示,最后遍歷12*12的數(shù)組同時(shí)把數(shù)組中非0非-1的數(shù)繪制到JPanel上,值為-1的元素向面板對(duì)應(yīng)位置添加一個(gè)地雷的圖片(注:地雷圖片來(lái)自Windows7自帶掃雷游戲的截圖)。</p><p>  基于Button的雷區(qū)覆蓋面板建立以及虛擬雷盤的ActionListener的連接:</p><p>  將生成好的底板覆蓋上12*1

5、2的Button并且為每個(gè)Button添加ActionListener,實(shí)現(xiàn)點(diǎn)擊后隱藏對(duì)應(yīng)的Button功能。結(jié)果如下圖:</p><p>  重新開(kāi)始及其按鍵功能的實(shí)現(xiàn):</p><p>  通過(guò)“重新開(kāi)始”按鍵重新生成雷區(qū)以及重新覆蓋Button到所有格子。</p><p><b>  關(guān)于按鍵及其功能:</b></p>&l

6、t;p>  通過(guò)“關(guān)于”按鍵彈出一個(gè)MessageDialog。</p><p>  在第二個(gè)版本中,實(shí)現(xiàn)如下功能:</p><p>  新增利用遞歸算法實(shí)現(xiàn)的一次點(diǎn)開(kāi)一片區(qū)域功能:</p><p>  通過(guò)數(shù)據(jù)結(jié)構(gòu)中的走迷宮算法在按鍵監(jiān)聽(tīng)中加入了連鎖點(diǎn)亮的算法,點(diǎn)亮該格,然后依次遍歷12*12表的周圍9格,發(fā)現(xiàn)為空格即遞歸調(diào)用遍歷算法,發(fā)現(xiàn)數(shù)字即點(diǎn)亮該格并r

7、eturn,初步實(shí)現(xiàn)了如圖所示的功能:</p><p>  新增虛擬訪問(wèn)判定表的建立和刷新及修改:</p><p>  即通過(guò)查找已標(biāo)記的正確的雷并且計(jì)數(shù),如果達(dá)到了設(shè)定了雷的最大值即執(zhí)行游戲結(jié)束的方法。</p><p>  新增失敗提示框和自動(dòng)刷新功能:</p><p>  即點(diǎn)亮了地雷的區(qū)域后,自動(dòng)彈出對(duì)話框提示失敗并且執(zhí)行游戲結(jié)束的方法

8、。</p><p>  對(duì)原boom表進(jìn)行了改動(dòng),解決了虛擬表和實(shí)際表的下標(biāo)錯(cuò)位問(wèn)題</p><p>  將原12*12的數(shù)組擴(kuò)充到14*14。</p><p>  在第三個(gè)版本中,實(shí)現(xiàn)如下功能:</p><p>  修復(fù)了一個(gè)導(dǎo)致重新開(kāi)始后第一行雷點(diǎn)位置不變的BUG:</p><p>  重寫游戲結(jié)束的算法,改變循環(huán)

9、的起始點(diǎn),使其可以正確生成虛擬的雷點(diǎn)。</p><p>  新增了右鍵標(biāo)記、取消雷點(diǎn)的功能:</p><p>  為每個(gè)Button添加了MouseListener從而實(shí)現(xiàn)了當(dāng)點(diǎn)擊鼠標(biāo)右鍵時(shí)可以修改Button上文字,顯示為雷,并且當(dāng)該Button已經(jīng)顯示了雷的時(shí)候再次右鍵該Button可以取消文字顯示。</p><p>  在第四個(gè)版本中,實(shí)現(xiàn)如下功能:</

10、p><p>  調(diào)整了按鍵監(jiān)聽(tīng)的點(diǎn)亮區(qū)域算法,當(dāng)且僅當(dāng)點(diǎn)擊處周圍沒(méi)有地雷時(shí)才會(huì)觸發(fā)openButton()算法,否則僅顯示當(dāng)前區(qū)域,提高了游戲性:</p><p>  重寫了Button的ActionListener,按條件區(qū)分是否執(zhí)行遞歸點(diǎn)亮算法,當(dāng)且僅當(dāng)單擊區(qū)域?yàn)榭盏臅r(shí)候才執(zhí)行點(diǎn)亮算法,否則僅點(diǎn)亮該區(qū)域。</p><p>  新增了基于System.currentT

11、imeMillis()的計(jì)時(shí)器功能,計(jì)時(shí)器與重新開(kāi)始游戲?qū)?yīng)同步更新:</p><p>  通過(guò)在游戲開(kāi)始時(shí)獲取一個(gè)currentTimeMillis()以及實(shí)時(shí)監(jiān)控并刷新計(jì)時(shí)器窗口的值為當(dāng)前時(shí)間減去初始時(shí)間除以1000,為節(jié)約內(nèi)存,單獨(dú)為計(jì)時(shí)器開(kāi)辟了一個(gè)線程,每工作一次該線程休息0.5秒。</p><p>  在第五個(gè)版本中,實(shí)現(xiàn)如下功能:</p><p>  更

12、改了獲勝和失敗后的提示信息:</p><p>  將本次游戲時(shí)間加入了游戲結(jié)束時(shí)的提示窗口。</p><p>  新增了“記錄”窗體的框架和面板:</p><p>  增加了一個(gè)新的JFrame,對(duì)應(yīng)“記錄”按鈕。</p><p>  在第六個(gè)版本中,實(shí)現(xiàn)如下功能:</p><p>  再次改進(jìn)了按鍵監(jiān)聽(tīng)的點(diǎn)亮區(qū)域算法

13、:</p><p>  進(jìn)行遞歸遍歷時(shí)將正相鄰和斜相鄰兩種情況分開(kāi),使斜相鄰的地雷值為0的格子不再會(huì)被自動(dòng)點(diǎn)亮,提高了游戲性,至此版本為止,該算法已經(jīng)完全符合預(yù)期要求。</p><p>  游戲后臺(tái)新加入了recordlist類,用來(lái)存儲(chǔ)和處理光榮榜的數(shù)據(jù):</p><p>  該類擁有10條記錄以及插入新數(shù)據(jù)到對(duì)應(yīng)位置的功能。</p><p&g

14、t;<b>  對(duì)記錄窗體的改動(dòng):</b></p><p>  通過(guò)取消設(shè)定recordFrame類的mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);以及設(shè)定recFrame.hide();方法解決了關(guān)閉窗口時(shí)導(dǎo)致的程序異常終止的錯(cuò)誤。</p><p>  在第七個(gè)版本中,實(shí)現(xiàn)如下功能:</p&g

15、t;<p><b>  記錄的讀取與存儲(chǔ):</b></p><p>  通過(guò)ObjectOutputStream和ObjectInputStream成功實(shí)現(xiàn)了對(duì)光榮榜文件的存取功能。并且重新定義了上一版本的光榮榜信息控件,增加了獲勝時(shí)修改光榮榜并且自動(dòng)保存文件的功能,同時(shí)新增nameInput窗口類到游戲結(jié)束時(shí)并且成績(jī)足以進(jìn)入光榮榜時(shí)調(diào)用的方法中,用于輸入獲取進(jìn)入光榮榜的玩家信

16、息。</p><p>  在最終版本中,實(shí)現(xiàn)如下功能:</p><p>  記錄與游戲的同步措施:</p><p>  通過(guò)更改FileOutputStream的實(shí)現(xiàn)位置到nameInputer中的actionListener中并且將recordlist和usedTime以參數(shù)形式通過(guò)構(gòu)造函數(shù)傳入nameInputer類中成功實(shí)現(xiàn)了光榮榜數(shù)據(jù)文件的存取。</p

17、><p><b>  系統(tǒng)實(shí)現(xiàn)</b></p><p><b>  Sweeper類:</b></p><p>  import java.awt.event.*;</p><p>  import javax.swing.*;</p><p>  import java.awt

18、.*;</p><p>  import java.util.Random;</p><p>  import java.io.*;</p><p>  public class sweeper{</p><p>  Button boom[][] = new Button[14][14];</p><p>  int

19、 visualBoom[][] = new int[14][14];</p><p>  int visitTest[][] = new int[14][14];</p><p>  int numOfBoom = 0;</p><p>  Label timeLabel = new Label();</p><p>  timeRunnab

20、le runnable = new timeRunnable();</p><p>  Thread timeThread = new Thread(runnable);</p><p>  long startTime;</p><p>  long usedTime;</p><p>  JFrame mainframe;</p&g

21、t;<p>  myPanel panel;</p><p>  Image boomImage = new ImageIcon("boom.jpg").getImage();</p><p>  recordlist list = new recordlist();</p><p>  JButton startButton;&l

22、t;/p><p>  JButton aboutButton;</p><p>  JButton recordButton;//類的屬性</p><p>  void createWindow(){//創(chuàng)建基礎(chǔ)框架</p><p>  mainframe = new JFrame("掃雷");<

23、/p><p>  panel = new myPanel();//框架及面板</p><p>  startButton = new JButton();</p><p>  startButton.setText("重新開(kāi)始");</p><p>  startButton.setFont(new Font("

24、;楷書",Font.ITALIC,15));</p><p>  startButton.setFocusPainted(false);</p><p>  startButton.addActionListener(new startListener());</p><p>  aboutButton = new JButton();</p>

25、<p>  aboutButton.setText("關(guān)于");</p><p>  aboutButton.setFont(new Font("楷書",Font.ITALIC,15));</p><p>  aboutButton.setFocusPainted(false);</p><p>  aboutB

26、utton.addActionListener(new aboutListener());</p><p>  recordButton = new JButton();</p><p>  recordButton.setText("記錄");</p><p>  recordButton.setFont(new Font("楷書&q

27、uot;,Font.ITALIC,15));</p><p>  recordButton.addActionListener(new recordListener());</p><p>  recordButton.setFocusPainted(false);//按鈕</p><p>  timeLabel.setBounds(350, 220, 30, 3

28、0);</p><p>  timeLabel.setBackground(Color.white);</p><p>  startTime = System.currentTimeMillis();</p><p>  timeThread.start();</p><p>  panel.setLayout(null);</p&g

29、t;<p>  panel.setBackground(Color.BLACK);</p><p>  startButton.setBounds(320, 40, 100, 30);</p><p>  panel.add(startButton);</p><p>  recordButton.setBounds(320,100,100,30);&

30、lt;/p><p>  panel.add(recordButton);</p><p>  aboutButton.setBounds(320,160,100,30);</p><p>  panel.add(aboutButton);</p><p>  panel.add(timeLabel);</p><p>  

31、mainframe.setSize(450, 340);</p><p>  mainframe.setVisible(true);</p><p>  mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p>  mainframe.add(panel);//框架布局</p

32、><p><b>  }</b></p><p>  void setBoom()//生成虛擬雷盤的雷區(qū)</p><p><b>  {</b></p><p>  for(int row = 0;row<14;row++)</p><p>  for(in

33、t col = 0;col<14;col++)</p><p><b>  {</b></p><p>  boom[row][col] = new Button();</p><p>  visualBoom[row][col] = 0;</p><p>  }//初始化雷區(qū)</p>

34、<p>  for(int i = 0;i<14;i++)</p><p><b>  {</b></p><p>  visualBoom[0][i] = -2;</p><p>  visualBoom[i][0] = -2;</p><p>  visualBoom[i][13] = -2;&l

35、t;/p><p>  visualBoom[13][i] = -2;</p><p>  }//虛擬雷盤封邊</p><p><b>  int x,y;</b></p><p>  Random r = new Random();</p><p>  for(int count

36、= 0;count<16;)</p><p><b>  {</b></p><p>  x = r.nextInt(12);</p><p>  y = r.nextInt(12);</p><p>  if(visualBoom[x+1][y+1] == 0)</p><p><b

37、>  {</b></p><p>  visualBoom[x+1][y+1] = -1;</p><p><b>  count++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p&

38、gt;  }//生成地雷,邊緣:-2 雷點(diǎn):-1 正常點(diǎn):0</p><p>  void handleBoom(){//炸彈信息轉(zhuǎn)化</p><p>  int temp[][] = new int[14][14];</p><p>  for(int row = 0;row<14;row++)<

39、/p><p>  for(int col = 0;col<14;col++)</p><p><b>  {</b></p><p>  temp[row][col] = visualBoom[row][col];</p><p><b>  }</b></p><p> 

40、 for(int row = 1;row<13;row++)</p><p>  for(int col = 1;col<13;col++)</p><p><b>  {</b></p><p>  temp[row][col] = countBoom(row,col);</p><p><b>

41、  }</b></p><p>  numOfBoom = 0;</p><p>  visualBoom = temp;</p><p><b>  }</b></p><p>  int countBoom(int x,int y){//周圍炸彈計(jì)數(shù)器</p><p> 

42、 int count = 0;</p><p>  if(visualBoom[x][y] != -1)</p><p><b>  {</b></p><p>  if(visualBoom[x-1][y-1] == -1)</p><p><b>  count++;</b></p>

43、<p>  if(visualBoom[x][y-1] == -1)</p><p><b>  count++;</b></p><p>  if(visualBoom[x+1][y-1] == -1)</p><p><b>  count++;</b></p><p>  if(

44、visualBoom[x+1][y] == -1)</p><p><b>  count++;</b></p><p>  if(visualBoom[x+1][y+1] == -1)</p><p><b>  count++;</b></p><p>  if(visualBoom[x][y+

45、1] == -1)</p><p><b>  count++;</b></p><p>  if(visualBoom[x-1][y+1] == -1)</p><p><b>  count++;</b></p><p>  if(visualBoom[x-1][y] == -1)</p&

46、gt;<p><b>  count++;</b></p><p><b>  }else</b></p><p>  count = -1;</p><p>  return count;</p><p>  }//雷:-1 雷數(shù):(int) </

47、p><p>  void showButton()//加入雷區(qū)按鈕到面板上</p><p><b>  {</b></p><p>  for(int row = 1;row<13;row++)</p><p>  for(int col = 1;col<13;col++)</p>&

48、lt;p><b>  {</b></p><p>  boom[row][col].setBounds((row-1)*25, (col-1)*25, 25, 25);</p><p>  boom[row][col].setFocusable(false);</p><p>  boom[row][col].addActionListe

49、ner(new buttomListener(row,col));</p><p>  boom[row][col].addMouseListener(new rightClick(row,col));</p><p>  panel.add(boom[row][col]);</p><p><b>  }</b></p><

50、;p><b>  }</b></p><p>  class myPanel extends JPanel{//面板內(nèi)部類</p><p>  public void paintComponent(Graphics g)</p><p><b>  {</b></p><p>

51、  g.setColor(Color.gray);</p><p>  g.fillRect(0, 0, 300, 300);</p><p>  g.setColor(Color.black);</p><p>  for(int line = 0;line<=300;line+=25)</p><p>  g.drawLine(li

52、ne, 0, line, 300);</p><p>  for(int row = 0;row<=300;row+=25)</p><p>  g.drawLine(0, row, 300, row);//繪制基本格</p><p>  g.setFont(new Font("楷書",Font.ITALIC,13));</p

53、><p>  g.drawString("MineSweeper Ver 3.0", 305, 20);//繪制版本信息</p><p>  g.drawString("時(shí)間",310,240);</p><p>  for(int row = 1;row<13;row++)</p><p>  f

54、or(int col = 1;col<13;col++)</p><p><b>  {</b></p><p>  if(visualBoom[row][col]!=-1 && visualBoom[row][col]!=0)</p><p>  g.drawString(Integer.toString(visualB

55、oom[row][col]), (row-1)*25+8, (col-1)*25+20);</p><p>  else if(visualBoom[row][col]==-1) </p><p><b>  {</b></p><p>  g.drawImage(boomImage,(row-1)*25,(col-1)*25,25,25,th

56、is);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  }//面板繪圖</p><p>  class buttomListener impl

57、ements ActionListener{//各種監(jiān)聽(tīng)器</p><p>  int row,col;</p><p>  buttomListener(int x,int y)</p><p><b>  {</b></p><p><b>  row = x;</b></p>

58、<p><b>  col = y;</b></p><p><b>  }</b></p><p>  public void actionPerformed(ActionEvent e) {</p><p>  if(visualBoom[row][col]==0)</p><p>&

59、lt;b>  {</b></p><p>  refreshVisitTest();</p><p>  openButton(row,col);</p><p>  }else if(visualBoom[row][col] != -1)</p><p><b>  {</b></p>

60、<p>  boom[row][col].setVisible(false);</p><p><b>  }else</b></p><p><b>  {</b></p><p>  boom[row][col].setVisible(false);</p><p>  gameOve

61、r(0);</p><p><b>  }</b></p><p>  numOfBoom = 0;</p><p>  for(int row = 1;row<13;row++)</p><p>  for(int col = 1;col<13;col++)</p><p>  i

62、f(boom[row][col].getLabel() == "雷")</p><p>  numOfBoom++;</p><p>  if(numOfBoom == 16)</p><p>  gameOver(1);</p><p><b>  }</b></p><p>

63、;<b>  }</b></p><p>  class rightClick implements MouseListener{</p><p>  int row,col;</p><p>  rightClick(int x,int y)</p><p><b>  {</b></p&g

64、t;<p><b>  row = x;</b></p><p><b>  col = y;</b></p><p><b>  }</b></p><p><b>  @Override</b></p><p>  public void

65、 mouseClicked(MouseEvent e) {</p><p>  // TODO Auto-generated method stub</p><p>  if(e.getButton() == MouseEvent.BUTTON3)</p><p><b>  {</b></p><p>  if(boo

66、m[row][col].getLabel() != "雷")</p><p><b>  {</b></p><p>  boom[row][col].setLabel("雷");</p><p>  numOfBoom = 0;</p><p>  for(int row = 1

67、;row<13;row++)</p><p>  for(int col = 1;col<13;col++)</p><p>  if(boom[row][col].getLabel() == "雷")</p><p>  numOfBoom++;</p><p>  if(numOfBoom == 16)&l

68、t;/p><p>  gameOver(1);</p><p><b>  }</b></p><p><b>  else</b></p><p>  boom[row][col].setLabel("");</p><p><b>  }<

69、/b></p><p><b>  }</b></p><p><b>  @Override</b></p><p>  public void mouseEntered(MouseEvent e) {</p><p>  // TODO Auto-generated method stub

70、</p><p><b>  }</b></p><p><b>  @Override</b></p><p>  public void mouseExited(MouseEvent e) {</p><p>  // TODO Auto-generated method stub</p&

71、gt;<p><b>  }</b></p><p><b>  @Override</b></p><p>  public void mousePressed(MouseEvent e) {</p><p>  // TODO Auto-generated method stub</p>&

72、lt;p><b>  }</b></p><p><b>  @Override</b></p><p>  public void mouseReleased(MouseEvent e) {</p><p>  // TODO Auto-generated method stub</p><p&

73、gt;<b>  }</b></p><p><b>  }</b></p><p>  void refreshVisitTest(){//重置訪問(wèn)標(biāo)記表</p><p>  for(int row = 1;row<13;row++)</p><p>  for(int col

74、 = 1;col<13;col++)</p><p><b>  {</b></p><p>  visitTest[row][col] = 0;</p><p>  }//訪問(wèn)標(biāo)記置0</p><p>  for(int i = 0;i<14;i++)</p>

75、<p><b>  {</b></p><p>  visualBoom[0][i] = 1;</p><p>  visualBoom[i][0] = 1;</p><p>  visualBoom[i][13] = 1;</p><p>  visualBoom[13][i] = 1;</p>

76、<p>  }//邊緣訪問(wèn)標(biāo)記置1</p><p><b>  }</b></p><p>  class startListener implements ActionListener{</p><p>  public void actionPerformed(ActionEvent e) {</p&

77、gt;<p>  for(int row = 1;row<13;row++)</p><p>  for(int col = 1;col<13;col++)</p><p><b>  {</b></p><p>  boom[row][col].setVisible(true);</p><p&g

78、t;  boom[row][col].setLabel("");</p><p>  visualBoom[row][col] = 0;</p><p><b>  }</b></p><p><b>  int x,y;</b></p><p>  Random r = new

79、 Random();</p><p>  for(int count = 0;count<16;)</p><p><b>  {</b></p><p>  x = r.nextInt(12);</p><p>  y = r.nextInt(12);</p><p>  if(visua

80、lBoom[x+1][y+1] == 0)</p><p><b>  {</b></p><p>  visualBoom[x+1][y+1] = -1;</p><p><b>  count++;</b></p><p><b>  }</b></p>&l

81、t;p><b>  }</b></p><p>  handleBoom();</p><p>  startTime = System.currentTimeMillis();</p><p>  panel.repaint();</p><p>  System.out.println(""

82、);</p><p>  System.out.println("");</p><p>  System.out.println("");</p><p>  System.out.println("");</p><p>  for(int row = 1;row<13;r

83、ow++)</p><p><b>  {</b></p><p>  System.out.println(" ");</p><p>  for(int col = 1;col<13;col++)</p><p><b>  {</b></p><p

84、>  if(visualBoom[col][row]!=-1)</p><p>  System.out.print(visualBoom[col][row]+" ");</p><p><b>  else</b></p><p>  System.out.print("* ");</p

85、><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  class recordListener implement

86、s ActionListener{</p><p><b>  @Override</b></p><p>  public void actionPerformed(ActionEvent arg0) {</p><p>  recordFrame rec = new recordFrame();</p><p>  

87、rec.createWindow();</p><p><b>  }</b></p><p><b>  }</b></p><p>  class aboutListener implements ActionListener{</p><p>  public void actionPerfo

88、rmed(ActionEvent e) {</p><p>  JOptionPane.showMessageDialog(mainframe.getContentPane(),"制作人: 濱江學(xué)院2011級(jí)軟件工程1班 王琢", "關(guān)于", JOptionPane.INFORMATION_MESSAGE);</p><p><b> 

89、 }</b></p><p><b>  }</b></p><p>  void openButton(int x,int y){//響應(yīng)鼠標(biāo)事件</p><p>  visitTest[x][y] = 1;//訪問(wèn)標(biāo)記置1</p><p>  boom[x][y].setVi

90、sible(false);</p><p>  if(visualBoom[x][y] != -1)</p><p><b>  {</b></p><p>  if(visualBoom[x-1][y-1] != -1)</p><p>  boom[x-1][y-1].setVisible(false);</p

91、><p>  if(visualBoom[x][y-1] == 0 && visitTest[x][y-1] == 0)</p><p>  openButton(x,y-1);</p><p>  else if(visualBoom[x][y-1] != -1)</p><p>  boom[x][y-1].setVisibl

92、e(false);</p><p>  if(visualBoom[x+1][y-1] != -1)</p><p>  boom[x+1][y-1].setVisible(false);</p><p>  if(visualBoom[x+1][y] == 0 && visitTest[x+1][y] == 0)</p><p&

93、gt;  openButton(x+1,y);</p><p>  else if(visualBoom[x+1][y] != -1)</p><p>  boom[x+1][y].setVisible(false);</p><p>  if(visualBoom[x+1][y+1] != -1)</p><p>  boom[x+1][y

94、+1].setVisible(false);</p><p>  if(visualBoom[x][y+1] == 0 && visitTest[x][y+1] == 0)</p><p>  openButton(x,y+1);</p><p>  else if(visualBoom[x][y+1] != -1)</p><p

95、>  boom[x][y+1].setVisible(false);</p><p>  if(visualBoom[x-1][y+1] != -1)</p><p>  boom[x-1][y+1].setVisible(false);</p><p>  if(visualBoom[x-1][y] == 0 && visitTest[x-1

96、][y] == 0)</p><p>  openButton(x-1,y);</p><p>  else if(visualBoom[x-1][y] != -1)</p><p>  boom[x-1][y].setVisible(false);</p><p><b>  }else{</b></p>

97、<p>  gameOver(0);</p><p><b>  }</b></p><p><b>  }</b></p><p>  class timeRunnable implements Runnable{//計(jì)時(shí)器專用線程</p><p><b>  @O

98、verride</b></p><p>  public void run() {</p><p>  while(true)</p><p><b>  {</b></p><p>  timeLabel.setText(Long.toString((System.currentTimeMillis()-s

99、tartTime)/1000));</p><p>  usedTime = (System.currentTimeMillis()-startTime)/1000 + 1;</p><p><b>  try{</b></p><p>  Thread.sleep(500);</p><p>  }catch(Exce

100、ption ex){</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void gameOver(i

101、nt isWin){//游戲結(jié)束</p><p>  if(isWin == 0)</p><p><b>  {</b></p><p>  JOptionPane.showMessageDialog(mainframe.getContentPane()," 勝敗乃兵家常事,大俠請(qǐng)重新來(lái)過(guò)!\n 本

102、次游戲用時(shí):" + usedTime + "秒", "YouLose!", JOptionPane.INFORMATION_MESSAGE);</p><p>  startButton.doClick();</p><p><b>  }else{</b></p><p>  JOptionP

103、ane.showMessageDialog(mainframe.getContentPane()," 恭喜您!沒(méi)有什么地雷能逃過(guò)您的火眼金睛\n 本次游戲用時(shí):" + usedTime + "秒", "YouWin!", JOptionPane.INFORMATION_MESSAGE);</p><p><b>  tr

104、y</b></p><p><b>  {</b></p><p>  ObjectInputStream in = new ObjectInputStream(new FileInputStream("record.wz"));</p><p>  list = (recordlist)in.readObjec

105、t();</p><p>  in.close();</p><p>  if(usedTime<=list.getLowestScore());</p><p>  nameInputer nameinputer = new nameInputer(list,usedTime);</p><p>  }catch(Exception

106、e)</p><p><b>  {</b></p><p><b>  }</b></p><p>  startButton.doClick();</p><p><b>  }</b></p><p><b>  }</b>&

107、lt;/p><p>  public static void main(String [] args){</p><p>  sweeper main = new sweeper();</p><p>  main.setBoom();</p><p>  main.handleBoom();</p><p>  main

108、.createWindow();</p><p>  main.showButton();</p><p>  for(int row = 1;row<13;row++)</p><p><b>  {</b></p><p>  System.out.println(" ");</p&g

109、t;<p>  for(int col = 1;col<13;col++)</p><p><b>  {</b></p><p>  if(main.visualBoom[col][row]!=-1)</p><p>  System.out.print(main.visualBoom[col][row]+"

110、");</p><p><b>  else</b></p><p>  System.out.print("* ");</p><p><b>  }</b></p><p><b>  }</b></p><p>&

111、lt;b>  }</b></p><p><b>  }</b></p><p>  recordFrame類:</p><p>  import java.awt.Graphics;</p><p>  import java.awt.event.ActionEvent;</p><

112、;p>  import java.awt.event.ActionListener;</p><p>  import java.io.*;</p><p>  import javax.swing.*;</p><p>  public class recordFrame implements Serializable{</p><p&g

113、t;  JFrame recFrame;</p><p>  recPanel recpanel;</p><p>  JButton close = new JButton("關(guān)閉");</p><p>  recordlist list;</p><p>  void createWindow(){</p>

114、<p>  recFrame = new JFrame("光榮榜");</p><p>  recpanel = new recPanel();</p><p>  recpanel.setLayout(null);</p><p>  close.addActionListener(new closeListener());<

115、;/p><p>  close.setBounds(50, 230, 80, 20);</p><p>  recpanel.add(close);</p><p>  recFrame.setSize(200, 300);</p><p>  recFrame.setVisible(true);</p><p>  re

116、cFrame.add(recpanel);</p><p><b>  }</b></p><p>  class closeListener implements ActionListener{</p><p><b>  @Override</b></p><p>  public void

117、actionPerformed(ActionEvent arg0) {</p><p>  recFrame.hide();</p><p><b>  }</b></p><p><b>  }</b></p><p>  class recPanel extends JPanel{</p&

118、gt;<p>  public void paintComponent(Graphics g){</p><p>  g.drawString("姓名", 25, 20);</p><p>  g.drawString("耗時(shí)", 125, 20);</p><p><b>  try{</b&g

119、t;</p><p>  ObjectInputStream in = new ObjectInputStream(new FileInputStream("record.wz"));</p><p>  list = (recordlist)in.readObject();</p><p>  in.close();</p>&l

120、t;p>  for(int pos = 0;pos<10;pos++)</p><p><b>  {</b></p><p>  g.drawString(list.name[pos], 25, 20*(pos+2));</p><p>  g.drawString(Long.toString(list.score[pos]),

121、125, 20*(pos+2));</p><p><b>  }</b></p><p>  }catch(Exception e){</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p><b> 

122、 }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  recordList類:</p><p>  import java.io.*;</p><p>  public class recordlist

123、implements Serializable{//光榮榜存儲(chǔ)類</p><p>  public String name[];</p><p>  public long score[];</p><p>  public recordlist(){//構(gòu)造函數(shù)</p><p>  name = new

124、String[10];</p><p>  score = new long[10];</p><p>  for(int i = 0;i<10;i++)</p><p><b>  {</b></p><p>  name[i] = "王琢";</p><p>  sc

125、ore[i] = 999;</p><p><b>  }</b></p><p><b>  }</b></p><p>  long getLowestScore(){//返回榜內(nèi)最長(zhǎng)時(shí)間</p><p>  return score[9];</p><p&

126、gt;<b>  }</b></p><p>  long getHighestScore(){</p><p>  return score[0];</p><p><b>  }</b></p><p>  void insertValue(String n,long s){//插入

127、新元素</p><p>  int i = 0;</p><p>  long temp;</p><p>  String ntemp;</p><p>  while(s>score[i]){</p><p><b>  i++;</b></p><p><

128、b>  }</b></p><p><b>  do{</b></p><p>  temp = score[i];</p><p>  ntemp = name[i];</p><p>  score[i] = s;</p><p>  name[i] = n;</p&g

129、t;<p><b>  s = temp;</b></p><p>  n = ntemp;</p><p><b>  i++;</b></p><p>  }while(i<10);</p><p><b>  }</b></p><

130、p><b>  }</b></p><p>  nameInputer類:</p><p>  import java.awt.event.ActionEvent;</p><p>  import java.awt.event.ActionListener;</p><p>  import java.io.Fi

131、leOutputStream;</p><p>  import java.io.ObjectOutputStream;</p><p>  import javax.swing.*;</p><p>  public class nameInputer {</p><p>  JFrame frame;</p><p&g

132、t;  JPanel panel;</p><p>  JTextField text;</p><p>  JButton button;</p><p>  JLabel label;</p><p>  String name;</p><p>  recordlist mylist;</p>&l

133、t;p>  long usedtime;</p><p>  nameInputer(recordlist list,long time){</p><p>  frame = new JFrame("新紀(jì)錄");</p><p>  frame.setSize(300, 180);</p><p>  panel

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論