版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
學(xué)院課程設(shè)計(jì)(實(shí)訓(xùn))報(bào)告系部_信息工程系__專業(yè)_軟件技術(shù)班級(jí)__學(xué)號(hào)姓名課題掃雷指導(dǎo)教師_報(bào)告成績(jī)_____________日期:2011年12月29日摘要本次課程設(shè)計(jì)是用java語(yǔ)言及相關(guān)知識(shí)設(shè)計(jì)一個(gè)掃雷游戲系統(tǒng),完成掃雷的基本功能。并在此基礎(chǔ)上,自行完善和優(yōu)化系統(tǒng)功能。理解和掌握選擇游戲級(jí)別,記錄游戲時(shí)間和保存游戲成績(jī)的方法,學(xué)習(xí)程序設(shè)計(jì)的基本思路和方法,培養(yǎng)計(jì)算機(jī)專業(yè)學(xué)生運(yùn)用所學(xué)知識(shí)解決計(jì)算機(jī)應(yīng)用領(lǐng)域內(nèi)實(shí)際問(wèn)題能力,進(jìn)一步提高動(dòng)手操作能力和用java語(yǔ)言綜合編成能力,程序調(diào)試技能。目錄一、前言…………………4二、正文…………………52.1設(shè)計(jì)題目及要求…………52.2概要(總體)設(shè)計(jì)………62.3詳細(xì)設(shè)計(jì)…………………62.4程序的核心代碼…………72.5調(diào)試中出現(xiàn)的問(wèn)題………92.6運(yùn)行結(jié)果…………………10三、總結(jié)………………12四、參考文獻(xiàn)………12五、附錄………………12
一、前言掃雷最原始的版本可以追溯到1973年一款名為“方塊”的游戲。不久之后,“方塊”被改寫(xiě)成了游戲“Rlogic”。在“Rlogic”里,玩家的任務(wù)是作為美國(guó)海軍陸戰(zhàn)隊(duì)隊(duì)員,為指揮中心探出一條沒(méi)有地雷的安全路線,如果路全被地雷堵死就算輸。兩年后,湯姆·安德森在“Rlogic”的基礎(chǔ)上又編寫(xiě)出了游戲“地雷”,由此奠定了現(xiàn)代掃雷游戲的雛形。1981年,微軟公司的羅伯特·杜爾和卡特·約翰遜兩位工程師在Windows3.1系統(tǒng)上加載了該游戲,掃雷游戲才正式在全世界推廣開(kāi)來(lái)。這款游戲的玩法是在一個(gè)9*9(初級(jí)),16*16(中級(jí)),16*30(高級(jí)),或自定義大小的方塊矩陣中隨機(jī)布置一定量的地雷(初級(jí)為10個(gè),中級(jí)為40個(gè),高級(jí)為99個(gè))。由玩家逐個(gè)翻開(kāi)方塊,以找出所有地雷為最終游戲目標(biāo)。如果玩家翻開(kāi)的方塊有地雷,則游戲結(jié)束。二、正文2.1設(shè)計(jì)題目及要求(需求分析)1設(shè)計(jì)題目:基于Java的掃雷游戲2游戲的描述:本產(chǎn)品是一個(gè)簡(jiǎn)單的游戲軟件,目的是盡快找到雷區(qū)中的所有地雷,而不許踩到地雷。如果挖開(kāi)的是地雷,您將輸?shù)粲螒颉?實(shí)現(xiàn)的功能:可以實(shí)現(xiàn)簡(jiǎn)單的游戲功能開(kāi)始游戲、改變雷數(shù)。4游戲的界面:游戲的菜單欄中有‘開(kāi)始游戲’和‘列’‘行’‘寬’選項(xiàng),游戲的顯示界面中有游戲的主界面和信息界面(列、行、寬和雷的個(gè)數(shù))。5軟件可實(shí)現(xiàn)掃雷游戲的簡(jiǎn)單操作:1)、游戲功能:點(diǎn)擊鼠標(biāo)左鍵點(diǎn)擊下尋找地雷右鍵點(diǎn)擊下標(biāo)記地雷點(diǎn)擊笑臉的標(biāo)記開(kāi)始重新游戲計(jì)雷功能:游戲當(dāng)前雷數(shù)2)、設(shè)置功能:設(shè)置掃雷的行、寬、列和改變雷數(shù)6用戶的操作:在游戲菜單上,單擊開(kāi)局。單擊游戲區(qū)中的任何方塊,要啟動(dòng)計(jì)時(shí)器。通過(guò)單擊即可挖開(kāi)方塊。如果挖開(kāi)的是地雷,則您輸?shù)粲螒?。如果方塊上出現(xiàn)數(shù)字,則表示在其周圍的八個(gè)方塊中共有多少顆地雷。要標(biāo)記您認(rèn)為可能有地雷的方塊,請(qǐng)右鍵單擊它。
2.2概要(總體)設(shè)計(jì)1流程圖
2掃雷概述(類)JAVA的圖形界面圖形界面簡(jiǎn)稱GUI,是用圖形的方式,借助菜單、按紐等標(biāo)準(zhǔn)界面元素和鼠標(biāo)操作,幫助用戶方便地想計(jì)算機(jī)系統(tǒng)發(fā)出指令、啟動(dòng)操作,并將系統(tǒng)的運(yùn)行結(jié)果同樣以圖形方式顯示給用戶的技術(shù)。JAVA的圖形界面技術(shù)既為使用java.awt包來(lái)創(chuàng)建圖形界面的方法,包括AWT組件、窗口和菜單設(shè)計(jì)、布局管理器以及繪圖操作等。AWT概述 AWT既抽象窗口工具集,用于圖形用戶界面的開(kāi)發(fā)。AWT的功能包括以下方面:(1)豐富的圖形界面組件。(2)強(qiáng)大的事件處理模型圖形和圖形工具,包括形狀、顏色和字體。(3)布局管理器,可以進(jìn)行靈活的的窗口布局,設(shè)計(jì)特定窗口的尺寸和和屏幕分辨率。(4)無(wú)關(guān)數(shù)據(jù)傳送類,可以通過(guò)本地平臺(tái)的剪貼板來(lái)進(jìn)行剪切和粘貼操作。(5)打印和無(wú)鼠標(biāo)操作。Java.awt是java基本包中最大的一個(gè),其中定義了所有的GUI組件類,以及其他用于構(gòu)造圖形界面的類。AWT基本組件(1)標(biāo)簽組件(Label)標(biāo)簽組件顯示的是靜態(tài)文本,在通常情況下是不能編輯的,能起到提示的作用Label組件有三種構(gòu)造函數(shù):Label():創(chuàng)建空的標(biāo)簽Label(String):創(chuàng)建一個(gè)帶初始字符串的標(biāo)簽。Label(String,int):創(chuàng)建一個(gè)帶初始字符串及指定對(duì)齊方式的標(biāo)簽。(2)文本域文本域一般用來(lái)讓用戶輸入姓名、信用卡號(hào)等這樣的信息,它是一個(gè)能夠接收用戶的鍵盤(pán)輸入的小塊區(qū)域。TextField():創(chuàng)建空的文本域(3)按鈕(Button) 幾乎所有的交互式程序中都會(huì)有按紐,它是一種交互能力強(qiáng)且交互方便的控件,這個(gè)控件提供了“按下并動(dòng)作”的基本用戶界面。按紐的構(gòu)造方法有:Button():建立一個(gè)沒(méi)有標(biāo)示字符串的新按紐類對(duì)象。Button(StringLabel):建立一個(gè)標(biāo)示字符串為L(zhǎng)abel的新按紐類的對(duì)象(4)畫(huà)板組件(Panel)我們?cè)诮缑嫔习才鸥鞣N組件時(shí),有時(shí)會(huì)需要將組件成組放置,這時(shí)就可以使用面板組件。Panel是最簡(jiǎn)單的容器組件,本身是一個(gè)矩形區(qū)域,可以在其中放入各種組件。但它僅僅是安排各種組件的一種結(jié)構(gòu),需要最后加入到別的容器中才能實(shí)現(xiàn)GUI的功能。面板組件的創(chuàng)建Panel():用默認(rèn)的布局管理器創(chuàng)建面板組件。Panel(LayoutManagerlayout):用指定的布局管理器創(chuàng)建面板組件。(5)框架窗口組件(Frame) Frame是獨(dú)立于瀏覽器的可獨(dú)立運(yùn)行的主窗口,通常用于進(jìn)行開(kāi)發(fā)桌面應(yīng)用程序。Frame擁有邊界和標(biāo)題欄設(shè)置,其大小可以進(jìn)行設(shè)置調(diào)整。Frame里面需要加入組件,也可以加入菜單,或在上面繪圖。 Frame的創(chuàng)建Frame():創(chuàng)建一個(gè)沒(méi)有窗口標(biāo)題的窗口框架。Frame(String):創(chuàng)建一個(gè)指定窗口標(biāo)題的窗口框架。2.3詳細(xì)設(shè)計(jì)游戲勝利和失敗的條件創(chuàng)建,當(dāng)所有雷都被找出時(shí)勝利,當(dāng)左鍵點(diǎn)擊到雷時(shí)失敗,具體實(shí)現(xiàn)函數(shù)如下示:publicvoidpaint(Graphicsg)勝利失敗條件g.clearRect(0,0,600,600);g.drawString("GameOver",0,200);2.4程序的核心代碼publicvoidpaint(Graphicsg){intx,y,w;ints;intcx=bw/2-4;intcy=bw/2+4;g.clearRect(0,0,600,600);for(i=1;i<=bx;i++){for(j=1;j<=by;j++){draw(g,i,j);}}if(f==1){Fontf=newFont("11",1,70);Fontfo=g.getFont();g.setColor(Color.white);g.setFont(f);//g.setSize();g.drawString("GameOver",0,200);g.setFont(fo);}if(f==2){Fontf=newFont("11",1,70);Fontfo=g.getFont();g.setColor(Color.white);g.setFont(f);//g.setSize();g.drawString("Youwin!",0,200);g.setFont(fo);}}2.5調(diào)試中出現(xiàn)的問(wèn)題1.類定義未找到錯(cuò)誤java.lang.NoClassDefFoundError。原因分析⑴由于該程序調(diào)用到的JAVA類文件沒(méi)有正確上傳。⑵JAVA類文件已經(jīng)上傳,但應(yīng)用服務(wù)器并未檢測(cè)到,建議將JSP頁(yè)面重新更新。解決方案⑴將JAVA類文件重新上傳。⑵將JSP頁(yè)面更新并上傳;或?qū)?yīng)用程序服務(wù)器進(jìn)行重新啟動(dòng)。2.解決java.lang.StackOverflowError錯(cuò)誤。錯(cuò)誤信息嚴(yán)重:Exceptioninitializingpagecontextjava.lang.StackOverflowError原因分析運(yùn)行一個(gè)程序,JVM會(huì)開(kāi)辟一塊內(nèi)存空間去儲(chǔ)存程序進(jìn)行時(shí)的某些信息,當(dāng)程序運(yùn)行時(shí)需要儲(chǔ)存的信息超過(guò)了分配的空間,就會(huì)出現(xiàn)那樣的問(wèn)題.比如死循環(huán),遞歸次數(shù)過(guò)多,等等。解決方案首先從程序代碼優(yōu)化方面著手,檢查是否有死循環(huán)、遞歸等程序,如果有,修正、優(yōu)化相關(guān)代碼。
2.6運(yùn)行結(jié)果1運(yùn)行程序,生成指定行列數(shù)的掃雷游戲的圖形界面,運(yùn)行結(jié)果如圖所示2鼠標(biāo)左鍵點(diǎn)擊到雷時(shí),失敗,游戲結(jié)束,運(yùn)行結(jié)果如圖所示:3改變雷的個(gè)數(shù),從15個(gè)雷改為20個(gè)雷,開(kāi)始游戲,運(yùn)行結(jié)果如圖所示:4所有雷都被找出時(shí),游戲勝利,運(yùn)行結(jié)果如圖所示:
三、總結(jié)這不是我第一次做課程設(shè)計(jì),但這個(gè)掃雷游戲我平常也會(huì)經(jīng)常的玩,所以對(duì)于做這個(gè)掃雷游戲的課程設(shè)計(jì)我也是很興奮,雖然這設(shè)計(jì)過(guò)程中遇到很多困難,但都在盡力的克服,對(duì)于我自己做出的這個(gè)程序我還是比較滿意的,基本功能基本都實(shí)現(xiàn)了,圖形界面雖然不能說(shuō)是非常友好,但好象也至少能看的過(guò)去,通過(guò)這個(gè)課程設(shè)計(jì)我學(xué)到了很多的東西,把以前所學(xué)的課本知識(shí)很好的用到了實(shí)踐當(dāng)中,并且通過(guò)實(shí)踐,重新發(fā)現(xiàn)了很多問(wèn)題和很多以前不理解的沒(méi)掌握的知識(shí)點(diǎn),并且通過(guò)完成這個(gè)設(shè)計(jì),很好的重新的理解并掌握了各種知識(shí)點(diǎn)。四、參考文獻(xiàn)[1]耿祥義.JAVA大學(xué)實(shí)用教程.電子工業(yè)出版社.2005.03[2]朱戰(zhàn)立,沈偉編著.Java程序設(shè)計(jì)實(shí)用指南.電子工業(yè)出版社,2005.1[3][美]CayS.Horstmann.程峰等譯.JAVA2核心技術(shù).機(jī)械工業(yè)出版社.2003.06[4]陳占偉,劉旭,陳文霞《Java程序設(shè)計(jì)》武昌,武漢大學(xué)出版社,2011年7月第一版[5]朱慶生,古平,《java程序設(shè)計(jì)》北京,清華大學(xué)出版社,2011[6]包海山,李占玲,《java程序設(shè)計(jì)案例教程》,北京,機(jī)械工業(yè)出版社[7]劉瑞挺,侯冬梅,《java程序設(shè)計(jì)實(shí)用教程》,北京,清華大學(xué)出版社,2009五、附錄全部程序代碼importjava.awt.*;importjavax.swing.*;importjava.util.Random;importjava.awt.event.*;classMinextendsJPanel//雷的類{//備注:鼠標(biāo)的左鍵=1;右鍵=3;中鍵=2privateintflag=0,statu=0;//定義雷的屬性0:沒(méi)有打開(kāi)1:打開(kāi)2:標(biāo)示為雷3:不確定//flag=0不是雷;flag=1是雷privateintbut,count=0;//but:哪一個(gè)鼠標(biāo)鍵被按下去了count:這個(gè)區(qū)域周圍有多少個(gè)雷privateintmx=0,my=0,mw=10;//定義雷的坐標(biāo)和寬度publicMin()//構(gòu)造函數(shù){statu=0;}publicMin(intf,intx,inty,intw)//構(gòu)造函數(shù){flag=f;mx=x;my=y;mw=w;}publicintgetFlag(){returnflag;}publicintgetStatu(){returnstatu;}publicintgetMx(){returnmx;}publicintgetMy(){returnmy;}publicintgetMw(){returnmw;}publicintgetCount(){returncount;}publicvoidsetFlag(intf){flag=f;}publicvoidsetCount(intc){count=c;}publicvoidsetData(intf,intx,inty,intw,ints)//傳遞值{flag=f;mx=(x-1)*w;my=(y-1)*w;mw=w-1;statu=s;}//根據(jù)你點(diǎn)擊鼠標(biāo)的不同來(lái)改變雷的屬性publicintsendKey(intkey){//返回值,如果游戲結(jié)束則返回-1intrtn=1;if(key==3){switch(statu){case1:break;case2:statu=3;break;case3:statu=0;break;case0:statu=2;break;}rtn=1;}if(key==1&&statu==0){switch(flag){case0:statu=1;rtn=2;break;case1:statu=1;rtn=-1;break;}}returnrtn;}}classDrawPanelextendsJPanel{privateinti,j;privateintf=0;//iff=1thengameover,iff=2thenwinprivateintchx=0,chy=0;//專門(mén)記錄坐標(biāo)x,y的值privateintmsum=6,ksum=0;//msum:雷的個(gè)數(shù),ksum:標(biāo)示雷的個(gè)數(shù)privateintbx=10,by=10,bw=40;//bx,by:棋盤(pán)的大小,bw:棋子的大小publicMinboard[][]={{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},};//畫(huà)坐標(biāo)為ax,ay區(qū)域的雷的狀態(tài)publicvoiddraw(Graphicsg,intax,intay){intx,y,w;//坐標(biāo)x,y;和寬度:wints,c,flag;//狀態(tài);雷的個(gè)數(shù);intcx=bw/2-4;intcy=bw/2+4;x=board[ax][ay].getMx();y=board[ax][ay].getMy();w=board[ax][ay].getMw();s=board[ax][ay].getStatu();c=board[ax][ay].getCount();flag=board[ax][ay].getFlag();switch(s){case0://沒(méi)有打開(kāi)狀態(tài){g.setColor(Color.black);g.fillRect(x,y,w,w);break;}case1://打開(kāi)狀態(tài){g.setColor(Color.blue);g.fillRect(x,y,w,w);if(c!=0&&flag==0)//此處沒(méi)有雷{g.setColor(Color.red);g.drawString(String.valueOf(c),x+cx,y+cy);}if(flag==1)//此處有雷{g.setColor(Color.red);g.fillRect(x,y,w,w);g.setColor(Color.blue);g.drawString("雷",x+cx,y+cy);}break;}case2://標(biāo)雷狀態(tài){g.setColor(Color.green);g.fillRect(x,y,w,w);g.setColor(Color.blue);g.drawString("旗",x+cx,y+cy);break;}case3://不確定狀態(tài){g.setColor(Color.black);g.fillRect(x,y,w,w);g.setColor(Color.red);g.drawString("?",x+cx,y+cy);break;}default:break;}}//沒(méi)有圖形器的繪圖函數(shù):畫(huà)出坐標(biāo)ax,ay的雷的狀態(tài)和圖形publicvoiddraw(intax,intay){Graphicsg;g=this.getGraphics();draw(g,ax,ay);}//打開(kāi)周圍沒(méi)有雷的地方,并且繪畫(huà)所在區(qū)域點(diǎn)擊左鍵觸發(fā)publicintopenNoMin(intax,intay){inti,j;if(ax<1||ay<1||ax>bx||ay>by)return0;//鼠標(biāo)點(diǎn)擊的區(qū)域出界了if(board[ax][ay].getStatu()!=0)return0;//如果此區(qū)域打開(kāi)了,返回board[ax][ay].sendKey(1);//如果返回值等于-1,就說(shuō)明游戲結(jié)束draw(ax,ay);if(board[ax][ay].getFlag()==1)//如果游戲結(jié)束,把所有的雷都顯示出來(lái){for(i=1;i<=bx;i++){for(j=1;j<=by;j++){if(board[i][j].getFlag()==1){board[i][j].sendKey(1);draw(i,j);}}}return-1;}//如果游戲沒(méi)有結(jié)束if(board[ax][ay].getCount()>0){ksum++;return1;//周圍有雷,就不用打開(kāi)周圍地區(qū)}if(board[ax][ay].getCount()==0&&board[ax][ay].getFlag()==0)//周圍沒(méi)有雷,打開(kāi)周圍地區(qū),直到有雷的地區(qū){openNoMin(ax-1,ay-1);openNoMin(ax,ay-1);openNoMin(ax+1,ay-1);openNoMin(ax-1,ay);openNoMin(ax+1,ay);openNoMin(ax-1,ay+1);openNoMin(ax,ay+1);openNoMin(ax+1,ay+1);}ksum++;return1;}//計(jì)算坐標(biāo)x,y的周圍雷的個(gè)數(shù)publicintgetCount(intai,intaj){intsum=0;if(board[ai][aj].getFlag()==1){returnsum;}if(ai>1&&aj>1&&ai<bx&&aj<by){sum=board[ai-1][aj-1].getFlag()+board[ai][aj-1].getFlag()+board[ai+1][aj-1].getFlag()+board[ai-1][aj].getFlag()+board[ai+1][aj].getFlag()+board[ai-1][aj+1].getFlag()+board[ai][aj+1].getFlag()+board[ai+1][aj+1].getFlag();}if(ai==1&&aj==1){sum=board[ai+1][aj].getFlag()+board[ai][aj+1].getFlag()+board[ai+1][aj+1].getFlag();}if(ai==1&&aj==by){sum=board[ai][aj-1].getFlag()+board[ai+1][aj-1].getFlag()+board[ai+1][aj].getFlag();}if(ai==bx&&aj==1){sum=board[ai-1][aj].getFlag()+board[ai-1][aj+1].getFlag()+board[ai][aj+1].getFlag();}if(ai==bx&&aj==by){sum=board[ai-1][aj-1].getFlag()+board[ai][aj-1].getFlag()+board[ai-1][aj].getFlag();}if(ai==1&&aj>1&&aj<by){sum=board[ai][aj-1].getFlag()+board[ai+1][aj-1].getFlag()+board[ai+1][aj].getFlag()+board[ai][aj+1].getFlag()+board[ai+1][aj+1].getFlag();}if(ai==bx&&aj>1&&aj<by){sum=board[ai-1][aj-1].getFlag()+board[ai][aj-1].getFlag()+board[ai-1][aj].getFlag()+board[ai-1][aj+1].getFlag()+board[ai][aj+1].getFlag();}if(ai>1&&ai<bx&&aj==1){sum=board[ai-1][aj].getFlag()+board[ai+1][aj].getFlag()+board[ai-1][aj+1].getFlag()+board[ai][aj+1].getFlag()+board[ai+1][aj+1].getFlag();}if(ai>1&&ai<bx&&aj==by){sum=board[ai-1][aj-1].getFlag()+board[ai][aj-1].getFlag()+board[ai+1][aj-1].getFlag()+board[ai-1][aj].getFlag()+board[ai+1][aj].getFlag();}returnsum;}//傳入?yún)?shù):幾列,幾行,寬度,雷數(shù)publicvoidinitMin(intax,intay,intaw,intas){intk=1;//表明產(chǎn)生的第幾個(gè)雷R(shí)andomr;//隨機(jī)數(shù)f=0;//f=0表示游戲還沒(méi)有結(jié)束ksum=0;bx=ax;by=ay;bw=aw;msum=as;r=newRandom();//初始化底盤(pán)的值for(i=1;i<=bx;i++){for(j=1;j<=by;j++){board[i][j].setData(0,i,j,bw,0);}}//隨機(jī)產(chǎn)生雷while(k<=msum){i=r.nextInt(bx)+1;j=r.nextInt(by)+1;if(board[i][j].getFlag()!=1){board[i][j].setFlag(1);k++;}}//非雷區(qū)的周圍有幾個(gè)雷,初始化其值for(i=1;i<=bx;i++){for(j=1;j<=by;j++){board[i][j].setCount(getCount(i,j));}}setBackground(Color.white);repaint();}//構(gòu)造函數(shù)publicDrawPanel(intax,intay,intaw,intas){initMin(ax,ay,aw,as);addMouseListener(newMouseAdapter(){publicvoidmousePressed(MouseEventme){intr;if(f!=0)return;//如果游戲結(jié)束,返回chx=me.getX();chy=me.getY();if(me.getButton()!=1){board[chx/bw+1][chy/bw+1].sendKey(me.getButton());draw(chx/bw+1,chy/bw+1);}elseif(me.getButton()==1){if(openNoMin(chx/bw+1,chy/bw+1)==-1){f=1;repaint();}elseif(ksum+msum==bx*by){f=2;repaint();}}}});}//重畫(huà)所有的圖形,包括一些修飾的圖形publicvoidpaint(Graphicsg){intx,y,w;ints;intcx=bw/2-4;intcy=bw/2+4;g.clearRect(0,0,600,600);for(i=1;i<=bx;i++){for(j=1;j<=by;j++){draw(g,i,j);}}if(f==1){Fontf=newFont("11",1,70);Fontfo=g.getFont();g.setColor(Color.white);g.setFont(f);//g.setSize();g.drawString("GameOver",0,200);g.setFont(fo);}if(f==2){Fontf=newFont("11",1,70);Fontfo=g.getFont();g.setColor(Color.white);g.setFont(f);//g.setSize();g.drawString("Youwin!",0,200);g.setFont(fo);}}};//主類和程序的入口publicclassMineextendsJFrameimplementsActionListener{Containercp=getContentPane();JButtonbt=newJButton("^_^");
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中華女子學(xué)院《傳統(tǒng)及現(xiàn)代手工藝制作》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州信息工程職業(yè)學(xué)院《工業(yè)控制網(wǎng)絡(luò)》2023-2024學(xué)年第一學(xué)期期末試卷
- 長(zhǎng)沙航空職業(yè)技術(shù)學(xué)院《數(shù)字電路設(shè)計(jì)及實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 云南國(guó)防工業(yè)職業(yè)技術(shù)學(xué)院《品牌形象專項(xiàng)設(shè)計(jì)一》2023-2024學(xué)年第一學(xué)期期末試卷
- 新型材料在電池儲(chǔ)能中的應(yīng)用
- 共建文化 發(fā)展未來(lái)模板
- 市場(chǎng)營(yíng)銷領(lǐng)導(dǎo)力實(shí)踐述職
- 業(yè)務(wù)操作-房地產(chǎn)經(jīng)紀(jì)人《業(yè)務(wù)操作》模擬試卷4
- 房地產(chǎn)交易制度政策-《房地產(chǎn)基本制度與政策》預(yù)測(cè)試卷4
- 農(nóng)學(xué)成果答辯報(bào)告模板
- 物業(yè)項(xiàng)目服務(wù)進(jìn)度保證措施
- (隱蔽)工程現(xiàn)場(chǎng)收方計(jì)量記錄表
- DB22T 5005-2018 注塑夾芯復(fù)合保溫砌塊自保溫墻體工程技術(shù)標(biāo)準(zhǔn)
- 醫(yī)院手術(shù)室醫(yī)院感染管理質(zhì)量督查評(píng)分表
- 稱量與天平培訓(xùn)試題及答案
- 超全的超濾與納濾概述、基本理論和應(yīng)用
- 2020年醫(yī)師定期考核試題與答案(公衛(wèi)專業(yè))
- 2022年中國(guó)育齡女性生殖健康研究報(bào)告
- 各種靜脈置管固定方法
- 消防報(bào)審驗(yàn)收程序及表格
- 教育金規(guī)劃ppt課件
評(píng)論
0/150
提交評(píng)論