Java掃雷游戲的設(shè)計(jì)與實(shí)現(xiàn)-課程設(shè)計(jì)報(bào)告報(bào)告.doc_第1頁(yè)
Java掃雷游戲的設(shè)計(jì)與實(shí)現(xiàn)-課程設(shè)計(jì)報(bào)告報(bào)告.doc_第2頁(yè)
Java掃雷游戲的設(shè)計(jì)與實(shí)現(xiàn)-課程設(shè)計(jì)報(bào)告報(bào)告.doc_第3頁(yè)
Java掃雷游戲的設(shè)計(jì)與實(shí)現(xiàn)-課程設(shè)計(jì)報(bào)告報(bào)告.doc_第4頁(yè)
Java掃雷游戲的設(shè)計(jì)與實(shí)現(xiàn)-課程設(shè)計(jì)報(bào)告報(bào)告.doc_第5頁(yè)
已閱讀5頁(yè),還剩32頁(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)介

java應(yīng)用技術(shù)實(shí)訓(xùn)報(bào)告題 目 起訖日期 所在院系 學(xué)生姓名 專(zhuān) 業(yè) 班 級(jí) 學(xué) 號(hào) 指導(dǎo)教師 職稱(chēng) 所在單位 年 月 日一總體設(shè)計(jì)本系統(tǒng)共包括14個(gè)java源文件和6個(gè)圖象文件。1類(lèi)之間的關(guān)系如圖1所示。2java源文件及其功能如表1所示。3.圖象文件地雷.gif:地雷方塊上的圖標(biāo)。無(wú)雷.gif:無(wú)雷方塊上的圖標(biāo)。觸雷.gif:觸雷時(shí)方塊上的圖標(biāo)。探雷錯(cuò)誤.gif:游戲結(jié)束時(shí),指出標(biāo)雷錯(cuò)誤的圖標(biāo)。微笑臉.gif:按鈕上的通常圖標(biāo)??弈?gif:觸雷時(shí)按鈕上圖標(biāo)。二、詳細(xì)設(shè)計(jì)1主類(lèi)game(1)成員變量(見(jiàn)表2.11)(2)方法(見(jiàn)表2.12)(3)源代碼見(jiàn)文件game.java2方塊block(1)成員變量(見(jiàn)表2.21)(2)方法(見(jiàn)表2.22)(3)源代碼見(jiàn)文件block.java3雷區(qū) minesquare(1)成員變量(見(jiàn)表2.31)(2)方法(見(jiàn)表2.32)(3)源代碼見(jiàn)文件minesquare.java4雷標(biāo)數(shù)目 findaroundminemarknumber.java(1)方法(見(jiàn)表2.41)(2)源代碼見(jiàn)文件findaroundminemarknumber.java5雷標(biāo)判斷 determineminemarkisrightorwrong(1)成員變量(見(jiàn)表2.51)(2)方法(見(jiàn)表2.52)(3)源代碼見(jiàn)文件determineminemarkisrightorwrong.java6成片挖開(kāi)區(qū)域 determinedigarea(1)成員變量(見(jiàn)表2.61)(2)方法(見(jiàn)表2.62)(3)源代碼見(jiàn)文件determinedigarea.java7無(wú)雷連通區(qū) findsafearea(1)方法(見(jiàn)表2.71)(2)源代碼見(jiàn)文件findsafearea.java8隨機(jī)布雷 randomsetmine(1)成員變量(見(jiàn)表2.81)(2)方法(見(jiàn)表2.82)(3)源代碼見(jiàn)文件randomsetmine.java9周?chē)乩讉€(gè)數(shù) findaroundminenumber(1)方法見(jiàn)表(見(jiàn)表2.91) (2)源代碼見(jiàn)文件findaroundminenumber.java10顯示剩余雷數(shù) countmine(1)成員變量(見(jiàn)表2.101)(2)方法(見(jiàn)表2.102)(3)源代碼見(jiàn)文件countmine.java11計(jì)時(shí)器 timecount(1)成員變量(見(jiàn)表2.111)(2)方法(見(jiàn)表2.112)(3)源代碼見(jiàn)文件timecount.java12英雄榜錄入對(duì)話框 record(1)成員變量(見(jiàn)表2.121)(2)方法(見(jiàn)表2.122)(3)源代碼見(jiàn)文件record.java13顯示英雄榜對(duì)話框 showrecord(1)成員變量(見(jiàn)表2.131)(2)方法(見(jiàn)表2.132)(3)源代碼見(jiàn)文件showrecord.java14挖雷成功 decidewinner(1)方法見(jiàn)表(見(jiàn)表2.141)(2)源代碼見(jiàn)文件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 初級(jí),中級(jí),高級(jí),掃雷英雄榜; int grade=2; minesquare 雷陣; jbutton buttonperson; container con; jpanel box; file 英雄榜=new file(英雄榜.txt); hashtable hashtable=null; record 記錄對(duì)話框=null; showrecord 顯示英雄榜對(duì)話框=null; game() buttonperson=new jbutton(new imageicon(微笑臉.gif); 雷陣=new minesquare(中級(jí),40,16,16,buttonperson,記錄對(duì)話框); 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(游戲); 初級(jí)=new jmenuitem(初級(jí)); 中級(jí)=new jmenuitem(中級(jí)); 高級(jí)=new jmenuitem(高級(jí)); filemenu.setmnemonic(g); 初級(jí).setmnemonic(b); 中級(jí).setmnemonic(i); 高級(jí).setmnemonic(e); 掃雷英雄榜=new jmenuitem(掃雷英雄榜); 初級(jí).setmnemonic(t); filemenu.add(初級(jí)); filemenu.add(中級(jí)); filemenu.add(高級(jí)); filemenu.add(掃雷英雄榜); bar.add(filemenu); setjmenubar(bar); 初級(jí).addactionlistener(this); 中級(jí).addactionlistener(this); 高級(jí).addactionlistener(this); 掃雷英雄榜.addactionlistener(this); hashtable=new hashtable(); hashtable.put(初級(jí),初級(jí)#+999+#匿名); hashtable.put(中級(jí),中級(jí)#+999+#匿名); hashtable.put(高級(jí),高級(jí)#+999+#匿名); 記錄對(duì)話框=new record(this,hashtable); 記錄對(duì)話框.setgrade(高級(jí)); 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) 顯示英雄榜對(duì)話框=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); 記錄對(duì)話框.setgrade(grade); 雷陣=new minesquare(grade,number,rows,cols,buttonperson,記錄對(duì)話框); 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()=初級(jí)) grade=1; newgame(初級(jí),10,8,8,180,220); if(e.getsource()=中級(jí)) grade=2; newgame(中級(jí),40,16,16,360,380); if(e.getsource()=高級(jí)) grade=3; newgame(高級(jí),99,22,22,500,520); if(e.getsource()=掃雷英雄榜) 顯示英雄榜對(duì)話框.顯示記錄(); 顯示英雄榜對(duì)話框.setvisible(true); if(e.getsource()=buttonperson) if(grade=1) newgame(初級(jí),10,8,8,180,220); if(grade=2) newgame(中級(jí),40,16,16,360,380); if(grade=3) newgame(高級(jí),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, 周?chē)鸁o(wú)雷=true; int 周?chē)睦讛?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è)置是雷時(shí)的圖標(biāo)(icon icon) label.seticon(icon); public void 設(shè)置周?chē)鸁o(wú)雷時(shí)的圖標(biāo)(icon icon) label.seticon(icon); public void 設(shè)置周?chē)欣讜r(shí)的名字(string name) label.settext(name); public string 獲取名字() return label.gettext(); public void 設(shè)置周?chē)睦讛?shù)(int n) 周?chē)睦讛?shù)=n; public int 獲取周?chē)睦讛?shù)() return 周?chē)睦讛?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 確定周?chē)讛?shù)者; findsafearea 找出無(wú)雷連通區(qū)者; determinedigarea 成片挖開(kāi)者; determineminemarkisrightorwrong 確定雷標(biāo)記是否正確者; findaroundminemarknumber 確定周?chē)讟?biāo)數(shù)目者; decidewinner 判斷是否勝利者; record 記錄對(duì)話框=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(); 記錄對(duì)話框=(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); 確定周?chē)讛?shù)者=new findaroundminenumber(); for(int i=1;i=rows;i+) for(int j=1;j=cols;j+) 確定周?chē)讛?shù)者.設(shè)置周?chē)睦讛?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(探雷錯(cuò)誤.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.周?chē)鸁o(wú)雷=false&blocksource.獲取探雷標(biāo)記()!=0) blocksource.setopaque(false); blocksource.探雷標(biāo)記=-1; blocksource.repaint(); if(blocksource.周?chē)鸁o(wú)雷=true&blocksource.isopaque() blocksource.setopaque(false); point blockpoint=(point)blocksource.獲取在雷區(qū)中的位置(); int i=blockpoint.x; int j=blockpoint.y; 找出無(wú)雷連通區(qū)者=new findsafearea(); vector tree=找出無(wú)雷連通區(qū)者.確定無(wú)雷連通區(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(); 記錄對(duì)話框.setgrade(grade); int spendtime=integer.parseint(time.textshowtime.gettext(); 記錄對(duì)話框.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) 成片挖開(kāi)者=new determinedigarea(); vector tree=成片挖開(kāi)者.確定成片挖開(kāi)區(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&周?chē)讟?biāo)數(shù)=周?chē)讛?shù)&!correct) gameover(); if(blocksource.isopaque()=false&(周?chē)讟?biāo)數(shù)!=周?chē)讛?shù)) findaroundminenumber.javaimport java.awt.color;import javax.swing.icon;import javax.swing.imageicon;public class findaroundminenumbericon 周?chē)鸁o(wú)雷的圖標(biāo); public findaroundminenumber() 周?chē)鸁o(wú)雷的圖標(biāo)=new imageicon(無(wú)雷.gif); public void 設(shè)置周?chē)睦讛?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.周?chē)鸁o(wú)雷=false; blockij.設(shè)置周?chē)欣讜r(shí)的名字(+雷數(shù)); blockij.設(shè)置周?chē)睦讛?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.周?chē)鸁o(wú)雷=true; blockij.設(shè)置周?chē)欣讜r(shí)的名字(); blockij.設(shè)置周?chē)睦讛?shù)(0); blockij.設(shè)置周?chē)鸁o(wú)雷時(shí)的圖標(biāo)(周?chē)鸁o(wú)雷的圖標(biāo)); determineminemarkisrightorwrong.javapublic class determineminemarkisrightorwrongfindaroundminemarknumber 確定周?chē)讟?biāo)數(shù)目者=new findaroundminemarknumber(); int 周?chē)讟?biāo)數(shù)=0; int 周?chē)讛?shù)=0; public determineminemarkisrightorwrong() public boolean 判斷雷標(biāo)記是否正確(int i,int j,block block,int 行數(shù), int 列數(shù)) int 錯(cuò)誤=0; boolean correct=false; 周?chē)讟?biāo)數(shù)=確定周?chē)讟?biāo)數(shù)目者.獲取周?chē)讟?biāo)記的數(shù)目(i,j,block,行數(shù),列數(shù)); 周?chē)讛?shù)=blockij.獲取周?chē)睦讛?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(錯(cuò)誤=0&周?chē)讟?biāo)數(shù)=周?chē)讛?shù)) correct=true; return correct; determinedigarea.javaimport java.awt.point;import java.util.vector;public class determin

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論