Java掃雷游戲的設(shè)計與實現(xiàn)-課程設(shè)計報告報告.doc_第1頁
Java掃雷游戲的設(shè)計與實現(xiàn)-課程設(shè)計報告報告.doc_第2頁
Java掃雷游戲的設(shè)計與實現(xiàn)-課程設(shè)計報告報告.doc_第3頁
Java掃雷游戲的設(shè)計與實現(xiàn)-課程設(shè)計報告報告.doc_第4頁
Java掃雷游戲的設(shè)計與實現(xiàn)-課程設(shè)計報告報告.doc_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

java應(yīng)用技術(shù)實訓(xùn)報告題 目 起訖日期 所在院系 學(xué)生姓名 專 業(yè) 班 級 學(xué) 號 指導(dǎo)教師 職稱 所在單位 年 月 日一總體設(shè)計本系統(tǒng)共包括14個java源文件和6個圖象文件。1類之間的關(guān)系如圖1所示。2java源文件及其功能如表1所示。3.圖象文件地雷.gif:地雷方塊上的圖標(biāo)。無雷.gif:無雷方塊上的圖標(biāo)。觸雷.gif:觸雷時方塊上的圖標(biāo)。探雷錯誤.gif:游戲結(jié)束時,指出標(biāo)雷錯誤的圖標(biāo)。微笑臉.gif:按鈕上的通常圖標(biāo)??弈?gif:觸雷時按鈕上圖標(biāo)。二、詳細(xì)設(shè)計1主類game(1)成員變量(見表2.11)(2)方法(見表2.12)(3)源代碼見文件game.java2方塊block(1)成員變量(見表2.21)(2)方法(見表2.22)(3)源代碼見文件block.java3雷區(qū) minesquare(1)成員變量(見表2.31)(2)方法(見表2.32)(3)源代碼見文件minesquare.java4雷標(biāo)數(shù)目 findaroundminemarknumber.java(1)方法(見表2.41)(2)源代碼見文件findaroundminemarknumber.java5雷標(biāo)判斷 determineminemarkisrightorwrong(1)成員變量(見表2.51)(2)方法(見表2.52)(3)源代碼見文件determineminemarkisrightorwrong.java6成片挖開區(qū)域 determinedigarea(1)成員變量(見表2.61)(2)方法(見表2.62)(3)源代碼見文件determinedigarea.java7無雷連通區(qū) findsafearea(1)方法(見表2.71)(2)源代碼見文件findsafearea.java8隨機(jī)布雷 randomsetmine(1)成員變量(見表2.81)(2)方法(見表2.82)(3)源代碼見文件randomsetmine.java9周圍地雷個數(shù) findaroundminenumber(1)方法見表(見表2.91) (2)源代碼見文件findaroundminenumber.java10顯示剩余雷數(shù) countmine(1)成員變量(見表2.101)(2)方法(見表2.102)(3)源代碼見文件countmine.java11計時器 timecount(1)成員變量(見表2.111)(2)方法(見表2.112)(3)源代碼見文件timecount.java12英雄榜錄入對話框 record(1)成員變量(見表2.121)(2)方法(見表2.122)(3)源代碼見文件record.java13顯示英雄榜對話框 showrecord(1)成員變量(見表2.131)(2)方法(見表2.132)(3)源代碼見文件showrecord.java14挖雷成功 decidewinner(1)方法見表(見表2.141)(2)源代碼見文件decidewinner.java源代碼game.javaimport java.awt.event.*;import java.awt.*;import javax.swing.*;import javax.swing.border.*;import java.util.*;import java.io.*;public class game extends jframe implements actionlistener jmenubar bar; jmenu filemenu; jmenuitem 初級,中級,高級,掃雷英雄榜; int grade=2; minesquare 雷陣; jbutton buttonperson; container con; jpanel box; file 英雄榜=new file(英雄榜.txt); hashtable hashtable=null; record 記錄對話框=null; showrecord 顯示英雄榜對話框=null; game() buttonperson=new jbutton(new imageicon(微笑臉.gif); 雷陣=new minesquare(中級,40,16,16,buttonperson,記錄對話框); buttonperson.addactionlistener(this); con=getcontentpane(); con.add(雷陣,borderlayout.center); box=new jpanel(); box.setlayout(new gridlayout(1,3); box.add(雷陣.count.textshowmine); box.add(buttonperson); box.add(雷陣.time.textshowtime); con.add(box,borderlayout.north); setvisible(true); addwindowlistener(new windowadapter() public void windowclosing(windowevent e) system.exit(0); ); setbounds(100,50,360,380); bar=new jmenubar(); filemenu=new jmenu(游戲); 初級=new jmenuitem(初級); 中級=new jmenuitem(中級); 高級=new jmenuitem(高級); filemenu.setmnemonic(g); 初級.setmnemonic(b); 中級.setmnemonic(i); 高級.setmnemonic(e); 掃雷英雄榜=new jmenuitem(掃雷英雄榜); 初級.setmnemonic(t); filemenu.add(初級); filemenu.add(中級); filemenu.add(高級); filemenu.add(掃雷英雄榜); bar.add(filemenu); setjmenubar(bar); 初級.addactionlistener(this); 中級.addactionlistener(this); 高級.addactionlistener(this); 掃雷英雄榜.addactionlistener(this); hashtable=new hashtable(); hashtable.put(初級,初級#+999+#匿名); hashtable.put(中級,中級#+999+#匿名); hashtable.put(高級,高級#+999+#匿名); 記錄對話框=new record(this,hashtable); 記錄對話框.setgrade(高級); if(!英雄榜.exists() try fileoutputstream out=new fileoutputstream(英雄榜); objectoutputstream object_out=new objectoutputstream(out); object_out.writeobject(hashtable); object_out.close(); out.close(); catch(ioexception e) 顯示英雄榜對話框=new showrecord(this,hashtable); validate(); public void newgame(string grade,int number,int rows,int cols,int w,int h) buttonperson.seticon(new imageicon(微笑臉.gif); 記錄對話框.setgrade(grade); 雷陣=new minesquare(grade,number,rows,cols,buttonperson,記錄對話框); con.removeall(); box.removeall(); box.add(雷陣.count.textshowmine); box.add(buttonperson); box.add(雷陣.time.textshowtime); con.add(box,borderlayout.north); con.add(雷陣,borderlayout.center); setbounds(10,10,w,h); validate(); public void actionperformed(actionevent e) if(e.getsource()=初級) grade=1; newgame(初級,10,8,8,180,220); if(e.getsource()=中級) grade=2; newgame(中級,40,16,16,360,380); if(e.getsource()=高級) grade=3; newgame(高級,99,22,22,500,520); if(e.getsource()=掃雷英雄榜) 顯示英雄榜對話框.顯示記錄(); 顯示英雄榜對話框.setvisible(true); if(e.getsource()=buttonperson) if(grade=1) newgame(初級,10,8,8,180,220); if(grade=2) newgame(中級,40,16,16,360,380); if(grade=3) newgame(高級,99,22,22,500,520); public static void main(string args) new game(); block.javaimport java.awt.event.*;import java.awt.*;import javax.swing.*;import javax.swing.border.*;public class block extends jbutton implements mouselistener boolean 雷=false, 周圍無雷=true; int 周圍的雷數(shù)=0; int 探雷標(biāo)記=-1; jlabel label; point p; public block() label=new jlabel(); setborder(borderfactory.creatematteborder(1, 1, 0, 0, color.lightgray); label.setborder(borderfactory.creatematteborder(1, 1, 0, 0, color.lightgray); label.sethorizontalalignment(jlabel.center); label.setlayout(new borderlayout(); label.add(this,borderlayout.center); p=new point(0,0);addmouselistener(this); public void 設(shè)置是否是雷(boolean b) 雷=b; public boolean 判斷是否是雷() return 雷; public void 設(shè)置是雷時的圖標(biāo)(icon icon) label.seticon(icon); public void 設(shè)置周圍無雷時的圖標(biāo)(icon icon) label.seticon(icon); public void 設(shè)置周圍有雷時的名字(string name) label.settext(name); public string 獲取名字() return label.gettext(); public void 設(shè)置周圍的雷數(shù)(int n) 周圍的雷數(shù)=n; public int 獲取周圍的雷數(shù)() return 周圍的雷數(shù); public void 設(shè)置在雷區(qū)中的位置(int i,int j) p=new point(i,j); public point 獲取在雷區(qū)中的位置() return p; public int 獲取探雷標(biāo)記() return 探雷標(biāo)記; public void mousepressed(mouseevent e) boolean right=swingutilities.isrightmousebutton(e); if(right=true)&(this.isopaque()=true) 探雷標(biāo)記=(探雷標(biāo)記+1)%3; repaint(); public void paintcomponent(graphics g) super.paintcomponent(g); if(探雷標(biāo)記=0) g.setcolor(color.red); g.fillrect(6,4,8,6); g.drawline(13,10,14,18); if(探雷標(biāo)記=1) g.setcolor(color.blue); g.drawstring(?,6,15); public void mouseentered(mouseevent e) public void mousereleased(mouseevent e) public void mouseexited(mouseevent e) public void mouseclicked(mouseevent e) minesquare.javaimport java.awt.event.*;import java.awt.*;import javax.swing.*;import java.util.*;import java.io.*;public class minesquare extends jpanel implements mouselistener int rows=10,cols=10,雷數(shù)=10; jbutton buttonface=null; block block; timecount time; countmine count; string grade=null; randomsetmine 隨機(jī)布雷者; findaroundminenumber 確定周圍雷數(shù)者; findsafearea 找出無雷連通區(qū)者; determinedigarea 成片挖開者; determineminemarkisrightorwrong 確定雷標(biāo)記是否正確者; findaroundminemarknumber 確定周圍雷標(biāo)數(shù)目者; decidewinner 判斷是否勝利者; record 記錄對話框=null; public minesquare(string grade,int minenumber,int rows, int cols,jbutton b,jdialog dialog) this.grade=grade; this.rows=rows; this.cols=cols; 雷數(shù)=minenumber; 判斷是否勝利者=new decidewinner(); 記錄對話框=(record)dialog; block=new blockrows+1cols+1; buttonface=b; time=new timecount(); count=new countmine(雷數(shù)); count.textshowmine.settext(+雷數(shù)); setlayout(new gridlayout(rows,cols); for(int i=1;i=rows;i+) for(int j=1;j=cols;j+) blockij=new block(); blockij.設(shè)置在雷區(qū)中的位置(i,j); for(int i=1;i=rows;i+) for(int j=1;j=cols;j+) add(blockij.label); blockij.addmouselistener(this); 隨機(jī)布雷者=new randomsetmine(); 隨機(jī)布雷者.隨機(jī)布雷(雷數(shù),block,rows,cols); 確定周圍雷數(shù)者=new findaroundminenumber(); for(int i=1;i=rows;i+) for(int j=1;j=cols;j+) 確定周圍雷數(shù)者.設(shè)置周圍的雷數(shù)(i,j,block,rows,cols); public void gameover() errupt(); buttonface.seticon(new imageicon(哭臉.gif); for(int i=1;i=rows;i+) for(int j=1;j=cols;j+) blockij.removemouselistener(this); if(blockij.判斷是否是雷()&blockij.isopaque()&blockij.探雷標(biāo)記!=0) blockij.requestfocus(); blockij.setopaque(false); if(blockij.探雷標(biāo)記=0&!blockij.判斷是否是雷() blockij.requestfocus(); blockij.探雷標(biāo)記=-1; blockij.repaint(); blockij.seticon(new imageicon(探雷錯誤.gif); public void mousepressed(mouseevent e) boolean left=swingutilities.isleftmousebutton(e); boolean right=swingutilities.isrightmousebutton(e); block blocksource=(block)e.getsource(); boolean 雷=blocksource.判斷是否是雷(); if(left=true&blocksource.isopaque()=true&blocksource.獲取探雷標(biāo)記()!=0) trytime.start(); catch(exception ee) if(雷=true) blocksource.requestfocus(); blocksource.setopaque(false); blocksource.探雷標(biāo)記=-1; blocksource.repaint(); blocksource.seticon(new imageicon(觸雷.gif); gameover(); else buttonface.seticon(new imageicon(微笑臉.gif); if(blocksource.周圍無雷=false&blocksource.獲取探雷標(biāo)記()!=0) blocksource.setopaque(false); blocksource.探雷標(biāo)記=-1; blocksource.repaint(); if(blocksource.周圍無雷=true&blocksource.isopaque() blocksource.setopaque(false); point blockpoint=(point)blocksource.獲取在雷區(qū)中的位置(); int i=blockpoint.x; int j=blockpoint.y; 找出無雷連通區(qū)者=new findsafearea(); vector tree=找出無雷連通區(qū)者.確定無雷連通區(qū)(i,j,block,rows,cols); for(int index=0;indextree.size();index+) point p=(point)tree.elementat(index); int m=p.x,n=p.y; for(int k=math.max(m-1,1);k=math.min(m+1,rows);k+) for(int t=math.max(n-1,1);t=math.min(n+1,cols);t+) if(blockkt.探雷標(biāo)記=0) gameover(); else blockkt.requestfocus(); blockkt.setopaque(false); blockkt.探雷標(biāo)記=-1; blockkt.repaint(); tree.removeallelements(); if(right) if(blocksource.探雷標(biāo)記=0&blocksource.isopaque() count.countminesub(); if(blocksource.探雷標(biāo)記=1&blocksource.isopaque() count.countmineadd(); public void mouseentered(mouseevent e) public void mousereleased(mouseevent e) boolean success=判斷是否勝利者.判斷是否成功(雷數(shù),block,rows,cols); if(success=true) errupt(); 記錄對話框.setgrade(grade); int spendtime=integer.parseint(time.textshowtime.gettext(); 記錄對話框.settime(spendtime); file f=new file(英雄榜.txt); tryfileinputstream in=new fileinputstream(f); objectinputstream object_in=new objectinputstream(in); hashtable hashtable=(hashtable)object_in.readobject(); object_in.close(); in.close(); string temp=(string)hashtable.get(grade); stringtokenizer fenxi=new stringtokenizer(temp,#); fenxi.nexttoken(); int recordtime=integer.parseint(fenxi.nexttoken(); if(spendtime0&correct) 成片挖開者=new determinedigarea(); vector tree=成片挖開者.確定成片挖開區(qū)域(i,j,block,rows,cols); for(int index=0;indextree.size();index+) point p=(point)tree.elementat(index); int m=p.x,n=p.y; for(int k=math.max(m-1,1);k=math.min(m+1,rows);k+) for(int t=math.max(n-1,1);t=math.min(n+1,cols);t+) if(blockkt.isopaque()&!blockkt.判斷是否是雷()& blockkt.探雷標(biāo)記!=0) blockkt.requestfocus(); blockkt.setopaque(false); blockkt.探雷標(biāo)記=-1; blockkt.repaint(); repaint(); tree.removeallelements(); if(blocksource.isopaque()=false&周圍雷標(biāo)數(shù)=周圍雷數(shù)&!correct) gameover(); if(blocksource.isopaque()=false&(周圍雷標(biāo)數(shù)!=周圍雷數(shù)) findaroundminenumber.javaimport java.awt.color;import javax.swing.icon;import javax.swing.imageicon;public class findaroundminenumbericon 周圍無雷的圖標(biāo); public findaroundminenumber() 周圍無雷的圖標(biāo)=new imageicon(無雷.gif); public void 設(shè)置周圍的雷數(shù)(int i,int j,block block,int 行數(shù), int 列數(shù)) int 雷數(shù)=0; if(blockij.判斷是否是雷()=false) for(int k=math.max(i-1,1);k=math.min(i+1,行數(shù));k+) for(int t=math.max(j-1,1);t0) blockij.周圍無雷=false; blockij.設(shè)置周圍有雷時的名字(+雷數(shù)); blockij.設(shè)置周圍的雷數(shù)(雷數(shù)); if(雷數(shù)=1) blockij.label.setforeground(color.blue); if(雷數(shù)=2) blockij.label.setforeground(new color(0,100,0); if(雷數(shù)=3) blockij.label.setforeground(color.red); if(雷數(shù)=4) blockij.label.setforeground(new color(0,0,100); else blockij.周圍無雷=true; blockij.設(shè)置周圍有雷時的名字(); blockij.設(shè)置周圍的雷數(shù)(0); blockij.設(shè)置周圍無雷時的圖標(biāo)(周圍無雷的圖標(biāo)); determineminemarkisrightorwrong.javapublic class determineminemarkisrightorwrongfindaroundminemarknumber 確定周圍雷標(biāo)數(shù)目者=new findaroundminemarknumber(); int 周圍雷標(biāo)數(shù)=0; int 周圍雷數(shù)=0; public determineminemarkisrightorwrong() public boolean 判斷雷標(biāo)記是否正確(int i,int j,block block,int 行數(shù), int 列數(shù)) int 錯誤=0; boolean correct=false; 周圍雷標(biāo)數(shù)=確定周圍雷標(biāo)數(shù)目者.獲取周圍雷標(biāo)記的數(shù)目(i,j,block,行數(shù),列數(shù)); 周圍雷數(shù)=blockij.獲取周圍的雷數(shù)(); for(int k=math.max(i-1,1);k=math.min(i+1,行數(shù));k+) for(int t=math.max(j-1,1);t0) correct=false; else if(錯誤=0&周圍雷標(biāo)數(shù)=周圍雷數(shù)) correct=true; return correct; determinedigarea.javaimport java.awt.point;import java.util.vector;public class determin

溫馨提示

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

最新文檔

評論

0/150

提交評論