




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 課 程 設(shè) 計(jì) 報(bào) 告 課程名稱: 計(jì)算機(jī)技術(shù)綜合課程設(shè)計(jì) 題 目: 基于java語言的掃雷游戲設(shè)計(jì) 學(xué) 院: 信息工程 系: 計(jì)算機(jī) 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 班 級: 學(xué) 號: 學(xué)生姓名: 時(shí) 間: 2008年1月11日至1月25日 基于java語言的掃雷游戲設(shè)計(jì)摘 要:本文介紹的是掃雷游戲的設(shè)計(jì)方法。該游戲使用的是java語言編寫,主要是用了java的程序界面設(shè)計(jì)的方法和各種事件監(jiān)聽和處理的方法。關(guān)鍵字:掃雷 界面設(shè)計(jì) java 事件監(jiān)聽 事件處理1 前言掃雷游戲的目標(biāo)是盡快找到雷區(qū)中的所有地雷,而不許踩到地雷。如果挖開的是地雷,您將輸?shù)粲螒?。掃雷游戲在程序運(yùn)行后生成指定的地雷,在鼠
2、標(biāo)左鍵點(diǎn)擊下尋找地雷,右鍵點(diǎn)擊下標(biāo)記地雷,點(diǎn)擊笑臉的標(biāo)記開始重新游戲,并給出勝利和失敗的條件:標(biāo)出所有的地雷和左鍵點(diǎn)中地雷。點(diǎn)擊鍵盤q鍵將推出游戲。在游戲菜單上,單擊開局。單擊游戲區(qū)中的任何方塊,要啟動(dòng)計(jì)時(shí)器。通過單擊即可挖開方塊。如果挖開的是地雷,則您輸?shù)粲螒?。如果方塊上出現(xiàn)數(shù)字,則表示在其周圍的八個(gè)方塊中共有多少顆地雷。要標(biāo)記您認(rèn)為可能有地雷的方塊,請右鍵單擊它。游戲區(qū)包括雷區(qū)、地雷計(jì)數(shù)器和計(jì)時(shí)器。2 本課程設(shè)計(jì)的定位2.1 問題定義和內(nèi)容簡介本課程設(shè)計(jì)是用java編寫一個(gè)掃雷游戲。程序的功能是生成指定數(shù)目的地雷,通過鼠標(biāo)操作玩游戲。點(diǎn)擊屏幕上的笑臉重新開始游戲;標(biāo)出所有地雷后勝出;當(dāng)鼠標(biāo)
3、左鍵擊中地雷失?。话磓鍵退出游戲。2.2 論文研究內(nèi)容的意義掃雷游戲是windows系統(tǒng)自帶的一個(gè)娛樂性的小游戲,在玩掃雷游戲的過程中 也可以很好的培養(yǎng)耐心和細(xì)心,同時(shí)在無聊得時(shí)候可以用以休閑娛樂,如果我們自己也能動(dòng)手做一個(gè)小程序來實(shí)現(xiàn)這個(gè)功能,自然能樂在其中。3 掃雷游戲的相關(guān)知識點(diǎn)3.1 java的圖形界面圖形界面簡稱gui,是用圖形的方式,借助菜單、按紐等標(biāo)準(zhǔn)界面元素和鼠標(biāo)操作,幫助用戶方便地想計(jì)算機(jī)系統(tǒng)發(fā)出指令、啟動(dòng)操作,并將系統(tǒng)的運(yùn)行結(jié)果同樣以圖形方式顯示給用戶的技術(shù)。java的圖形界面技術(shù)既為使用java.awt包來創(chuàng)建圖形界面的方法,包括awt組件、窗口和菜單設(shè)計(jì)、布局管理器以及
4、繪圖操作等。3.2 awt概述awt既抽象窗口工具集,用于圖形用戶界面的開發(fā)。awt的功能包括以下方面:(1)豐富的圖形界面組件。(2)強(qiáng)大的事件處理模型圖形和圖形工具,包括形狀、顏色和字體。(3)布局管理器,可以進(jìn)行靈活的的窗口布局,設(shè)計(jì)特定窗口的尺寸和和屏幕分辨率。(4)無關(guān)數(shù)據(jù)傳送類,可以通過本地平臺的剪貼板來進(jìn)行剪切和粘貼操作。(5)打印和無鼠標(biāo)操作。java.awt是java基本包中最大的一個(gè),其中定義了所有的gui組件類,以及其他用于構(gòu)造圖形界面的類。3.3 awt基本組件(1)標(biāo)簽組件(label)標(biāo)簽組件顯示的是靜態(tài)文本,在通常情況下是不能編輯的,能起到提示的作用label組件
5、有三種構(gòu)造函數(shù):label(): 創(chuàng)建空的標(biāo)簽label(string):創(chuàng)建一個(gè)帶初始字符串的標(biāo)簽。label(string,int):創(chuàng)建一個(gè)帶初始字符串及指定對齊方式的標(biāo)簽。(2)文本域文本域一般用來讓用戶輸入姓名、信用卡號等這樣的信息,它是一個(gè)能夠接收用戶的鍵盤輸入的小塊區(qū)域。textfield():創(chuàng)建空的文本域(3)按鈕(button)幾乎所有的交互式程序中都會(huì)有按紐,它是一種交互能力強(qiáng)且交互方便的控件,這個(gè)控件提供了“按下并動(dòng)作”的基本用戶界面。按紐的構(gòu)造方法有:button():建立一個(gè)沒有標(biāo)示字符串的新按紐類對象。button(string label):建立一個(gè)標(biāo)示字符串為
6、label的新按紐類的對象(4)畫板組件(panel)我們在界面上安排各種組件時(shí),有時(shí)會(huì)需要將組件成組放置,這時(shí)就可以使用面板組件。panel是最簡單的容器組件,本身是一個(gè)矩形區(qū)域,可以在其中放入各種組件。但它僅僅是安排各種組件的一種結(jié)構(gòu),需要最后加入到別的容器中才能實(shí)現(xiàn)gui的功能。面板組件的創(chuàng)建panel():用默認(rèn)的布局管理器創(chuàng)建面板組件。panel(layoutmanager layout):用指定的布局管理器創(chuàng)建面板組件。(5)框架窗口組件(frame)frame是獨(dú)立于瀏覽器的可獨(dú)立運(yùn)行的主窗口,通常用于進(jìn)行開發(fā)桌面應(yīng)用程序。frame擁有邊界和標(biāo)題欄設(shè)置,其大小可以進(jìn)行設(shè)置調(diào)整。
7、frame里面需要加入組件,也可以加入菜單,或在上面繪圖。frame的創(chuàng)建frame():創(chuàng)建一個(gè)沒有窗口標(biāo)題的窗口框架。frame(string):創(chuàng)建一個(gè)指定窗口標(biāo)題的窗口框架。(6)布局管理器flowlayout布局管理器flowlayout布局管理是一種最簡單的布局管理方法,是panel的默認(rèn)布局。它以流式的方式,自左向右,自上而下地放置容器中的組件,即組件按每行先后自左向后放置,一行放不下再換行。flowlayout布局管理器的創(chuàng)建flowlayout():創(chuàng)建默認(rèn)的flowlayout布局管理器flowlayout(int):以指定的對齊方式創(chuàng)建flowlayout布局管理器。其中
8、的參數(shù)有flowlayout.left、flowlayout.right、flowlayout.centerflowlayout(int,int,int):以指定的對齊方式及間距創(chuàng)建flowlayout布局管理器。其中第一個(gè)參數(shù)為對齊方式,第二個(gè)參數(shù)為組件間間距,第三個(gè)參數(shù)為列間距。(7)事件處理事件處理是一個(gè)接受事件、解釋事件并處理用戶交互的方法。事件處理有三個(gè)要素:事件源 事件源是一個(gè)時(shí)間的產(chǎn)生者,如按牛、窗口及文本域等。事件類型 java中所有的事件都封裝成一個(gè)類,這些事件類被集中在java.awt.exent包和java.swing.event包中,所有的事件類均繼承了awtevent
9、類和一個(gè)方法getsouce()方法,該方法返回發(fā)生事件的對象。事件監(jiān)聽器 不同的類型事件發(fā)生后,由事件監(jiān)聽器接受事件并調(diào)用響應(yīng)的事件處理方法,所有的事件監(jiān)聽器實(shí)際上都是一個(gè)java.awt.exent包中的借口,繼承了java.util.eventlistener接口。不同的事件有不同的處理方法,(8)鍵盤事件處理該程序使用的是鍵盤監(jiān)聽事件,鍵盤事件對應(yīng)的事件類是keyevent類,使用的該類的方法是getkeycode()獲得按下或釋放的鍵代碼getkeytext()獲得按下或釋放的鍵的字符串。鍵盤事件對應(yīng)的事件監(jiān)聽器為:keylistener或keyadapter實(shí)現(xiàn)鍵盤事件的操作步驟是
10、:第一步,注冊keylistener監(jiān)聽器addkeylistener().當(dāng)事件源所在的類已經(jīng)實(shí)現(xiàn)keylistener的接口時(shí),參數(shù)可用this,否則需創(chuàng)建或繼承一個(gè)keylistener第二步,實(shí)現(xiàn)keylistener接口的所有方法,即keypressed(keyevent e)、keyreleased(keyevent e)、keytyped(mouseevent e)。4 功能模塊描述本掃雷游戲的實(shí)現(xiàn),共分為五個(gè)模塊,分別表述為:模塊1 定義雷的類,鼠標(biāo)左鍵點(diǎn)擊不是雷,右鍵點(diǎn)擊是雷,數(shù)字表示周圍有多少個(gè)雷,具體實(shí)現(xiàn)函數(shù)如下示:class min extends jpanel /雷的
11、類 /備注:鼠標(biāo)的左鍵 = 1;右鍵 = 3;中鍵 = 2 private int flag = 0,statu = 0; /定義雷的屬性 0:沒有打開 1:打開 2:標(biāo)示為雷 3:不確定 /flag = 0 不是雷 ; flag = 1是雷 private int but,count = 0; /but:哪一個(gè)鼠標(biāo)鍵被按下去了 count:這個(gè)區(qū)域周圍有多少個(gè)雷 private int mx = 0,my = 0,mw = 10; /定義雷的坐標(biāo)和寬度 public min() /構(gòu)造函數(shù) statu = 0; public min(int f,int x,int y,int w) /構(gòu)造函
12、數(shù) flag = f; mx = x; my = y; mw = w; public int getflag()return flag; public int getstatu()return statu; public int getmx()return mx; public int getmy()return my; public int getmw()return mw; public int getcount()return count; public void setflag(int f)flag = f; public void setcount(int c)count = c;
13、public void setdata(int f,int x,int y,int w,int s) /傳遞值 flag = f; mx = (x-1)*w; my = (y-1)*w; mw = w-1; statu = s; /根據(jù)你點(diǎn)擊鼠標(biāo)的不同來改變雷的屬性模塊2:雷的分布和雷的畫法具體實(shí)現(xiàn)函數(shù)的核心代碼如下示:class drawpanel extends jpanel private int i,j; private int f = 0; /if f = 1 then game over ,if f =2 then win private int chx = 0,chy = 0;
14、/專門記錄坐標(biāo)x,y的值 private int msum = 6,ksum = 0; /msum:雷的個(gè)數(shù),ksum:標(biāo)示雷的個(gè)數(shù) private int bx = 10,by = 10,bw = 40; /bx,by:棋盤的大小,bw:棋子的大小 public min board = new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new m
15、in(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),new
16、 min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),ne
17、w min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),
18、new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min()
19、,new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min
20、(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new mi
21、n(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new
22、min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new
23、 min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),n
24、ew min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),
25、new min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(
26、),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min
27、(),new min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(), ; /畫坐標(biāo)為ax,ay區(qū)域的雷的狀態(tài) public void dra
28、w(graphics g,int ax,int ay) int x,y,w; /坐標(biāo)x,y;和寬度:w int s,c,flag; /狀態(tài);雷的個(gè)數(shù); int cx = bw/2 - 4; int cy = bw/2 + 4; x = boardaxay.getmx(); y = boardaxay.getmy(); w = boardaxay.getmw(); s = boardaxay.getstatu(); c = boardaxay.getcount(); flag= boardaxay.getflag();public int getcount(int ai,int aj) int
29、sum = 0; if(boardaiaj.getflag() = 1) return sum; if(ai1&aj1&aibx&aj1&aj1&aj1&ai1&aibx&aj=by) sum = boardai-1aj-1.getflag()+ boardaiaj-1.getflag()+ boardai+1aj-1.getflag()+ boardai-1aj .getflag()+ boardai+1aj .getflag(); return sum; /傳入?yún)?shù):幾列,幾行,寬度,雷數(shù) public void initmin(int ax,int ay,int aw,int as) i
30、nt k = 1; /表明產(chǎn)生的第幾個(gè)雷 random r; /隨機(jī)數(shù) f = 0; /f=0表示游戲還沒有結(jié)束 ksum = 0; bx = ax; by = ay; bw = aw; msum = as; r = new random(); /初始化底盤的值 for(i = 1;i = bx;i+) for(j=1;j=by;j+) boardij.setdata(0,i,j,bw,0); /隨機(jī)產(chǎn)生雷 while(k = msum) i = r.nextint(bx)+1; j = r.nextint(by)+1; if(boardij.getflag() != 1) boardij.s
31、etflag(1); k+; /非雷區(qū)的周圍有幾個(gè)雷,初始化其值 for(i = 1;i = bx;i+) for(j=1;j=by;j+) boardij.setcount(getcount(i,j); setbackground(color.white); repaint(); 模塊3 圖形界面的設(shè)計(jì),具體實(shí)現(xiàn)函數(shù)如下示:public class mine extends jframe implements actionlistener container cp = getcontentpane(); jbutton bt = new jbutton(_); label l1 = new
32、label(列:); label l2 = new label(行:); label l3 = new label(寬度:); label l4 = new label(雷的個(gè)數(shù):); textfield tf1 = new textfield(10,2); /列 textfield tf2 = new textfield(10,2); /行 textfield tf3 = new textfield(40,2); /寬度 textfield tf4 = new textfield(15,2); /雷的個(gè)數(shù) int x=10,y=10,w=40,sum=15; drawpanel dp = n
33、ew drawpanel(x,y,w,sum); public mine() setbackground(color.white); cp.setlayout(null); cp.add(dp); cp.add(bt); cp.add(tf1); cp.add(tf2); cp.add(tf3); cp.add(tf4); cp.add(l1); cp.add(l2); cp.add(l3); cp.add(l4); l1.setbounds(20 ,10,20,20); tf1.setbounds(40,10,20,20); l2.setbounds(70,10,20,20); tf2.se
34、tbounds(90,10,20,20); l3.setbounds(120,10,40,20); tf3.setbounds(160,10,20,20); l4.setbounds(190,10,60,20); tf4.setbounds(250,10,20,20); bt.setbounds(300,10,80,20); dp.setbounds(20,40,x*w,y*w); setresizable(false); setsize(x*w+40,y*w+80); settitle(掃雷); show(); bt.addactionlistener(this); addwindowlis
35、tener(new windowadapter() public void windowclosing(windowevent e) system.exit(0); ); public void actionperformed(actionevent e) if(e.getsource() = bt) /x = integer.parseint(tf1.gettext(); /y = integer.parseint(tf2.gettext(); /w = integer.parseint(tf3.gettext(); sum = integer.parseint(tf4.gettext();
36、 setsize(x*w+40,y*w+80); dp.setbounds(20,40,x*w,y*w); show(); dp.initmin(x,y,w,sum); 模塊4 游戲勝利和失敗的條件創(chuàng)建,當(dāng)所有雷都被找出時(shí)勝利,當(dāng)左鍵點(diǎn)擊到雷時(shí)失敗,具體實(shí)現(xiàn)函數(shù)如下示:public void paint(graphics g) int x,y,w; int s; int cx = bw/2 - 4; int cy = 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 =
37、 1) font f = new font(11,1,70); font fo = g.getfont(); g.setcolor(color.white); g.setfont(f); /g.setsize(); g.drawstring(game over,0,200); g.setfont(fo); if( f = 2 ) font f = new font(11,1,70); font fo = g.getfont(); g.setcolor(color.white); g.setfont(f); /g.setsize(); g.drawstring(you win!,0,200);
38、g.setfont(fo); 模塊5 鍵盤事件的監(jiān)聽,使用q鍵退出圖形界面,具體實(shí)現(xiàn)函數(shù)如下示:public void getq() int keycode; tf1.addkeylistener(new keyadapter() public void keypressed(keyevent e) if(e.getkeychar()=q|e.getkeychar()=q) system.exit(0); ); public static void main(string args) mine nowmine=new mine(); nowmine.getq();5 程序流程圖的設(shè)計(jì)6 運(yùn)行結(jié)
39、果1 運(yùn)行程序,生成指定行列數(shù)的掃雷游戲的圖形界面,運(yùn)行結(jié)果如圖所示2 鼠標(biāo)左鍵點(diǎn)擊到雷時(shí),失敗,游戲結(jié)束,運(yùn)行結(jié)果如圖所示:3 改變雷的個(gè)數(shù),從15個(gè)雷改為20個(gè)雷,開始游戲,運(yùn)行結(jié)果如圖所示:4 所有雷都被找出時(shí),游戲勝利,運(yùn)行結(jié)果如圖所示:7總結(jié)這不是我第一次做課程設(shè)計(jì),但這個(gè)掃雷游戲我平常也會(huì)經(jīng)常的玩,所以對于做這個(gè)掃雷游戲的課程設(shè)計(jì)我也是很興奮,雖然這設(shè)計(jì)過程中遇到很多困難,但都在盡力的克服,對于我自己做出的這個(gè)程序我還是比較滿意的,基本功能基本都實(shí)現(xiàn)了,圖形界面雖然不能說是非常友好,但好象也至少能看的過去,通過這個(gè)課程設(shè)計(jì)我學(xué)到了很多的東西,把以前所學(xué)的課本知識很好的用到了實(shí)踐當(dāng)中
40、,并且通過實(shí)踐,重新發(fā)現(xiàn)了很多問題和很多以前不理解的沒掌握的知識點(diǎn),并且通過完成這個(gè)設(shè)計(jì),很好的重新的理解并掌握了各種知識點(diǎn)。以下是我對掃雷游戲的設(shè)計(jì)的總結(jié):在這個(gè)設(shè)計(jì)過程中,雷的分布是一個(gè)關(guān)鍵,我是這樣做的,首先我們在雷區(qū)上隨機(jī)地放上雷,這可以用random類來實(shí)現(xiàn)。當(dāng)沒有雷的地方被點(diǎn)擊后就會(huì)顯示一個(gè)數(shù)字表示它周圍有幾個(gè)雷,這是怎么實(shí)現(xiàn)的呢?我們可以把整個(gè)雷區(qū)看成一個(gè)二維數(shù)組ai j ,如雷區(qū):11 12 13 14 15 16 17 1821 22 23 24 25 26 27 2831 32 33 34 35 36 37 3841 42 43 44 45 46 47 4851 52 53
41、 54 55 56 57 58我們可以發(fā)現(xiàn)a i j 周圍存在著如下關(guān)系:a i 1 j 1 a i 1 j a i 1 j + 1 a i j 1 a i j a i j + 1 a i + 1 j - 1 a i + 1 j a i + 1 j + 1 于是 ,可以從a i j 的左上角順時(shí)針開始檢測。當(dāng)然,如果超出邊界,要用約束條件再加以判斷!掃雷程序還會(huì)自動(dòng)展開已確定沒有雷的雷區(qū)。如果a34周圍雷數(shù)為1,a23已被標(biāo)示為地雷,那么a24,a25,a33,a35,a43,a44,a45將被展開,一直波及到不可確定的雷區(qū)。這也是實(shí)現(xiàn)的關(guān)鍵。我們可以把數(shù)組的元素設(shè)定為一個(gè)類對象,它們所屬的類
42、設(shè)定這樣的一個(gè)事件:在被展開時(shí),檢查周圍的雷數(shù)是否與周圍標(biāo)示出來的雷數(shù)相等,如果相等則展開周圍未標(biāo)示的雷區(qū)。這樣新的雷區(qū)展開又觸發(fā)這個(gè)事件,就這樣遞歸下去,一直蔓延到不可展開的雷區(qū)。在了解以上兩個(gè)關(guān)鍵要點(diǎn)后,然后在雷區(qū)這個(gè)類編寫完全,如添加是否有雷標(biāo)記,是否展開標(biāo)記,周圍雷數(shù)等,左右單擊的鼠標(biāo)事件等。這個(gè)程序還存在這一些問題:1、 當(dāng)改變行列數(shù)時(shí),無法實(shí)現(xiàn)圖形界面的改變;2、 當(dāng)使用右鍵標(biāo)記時(shí),在點(diǎn)擊右鍵成旗幟標(biāo)記,再點(diǎn)擊一次右鍵成問號標(biāo)記,然后就不能把問號標(biāo)記點(diǎn)擊回?zé)o標(biāo)記。參考資料1耿祥義.java大學(xué)實(shí)用教程.電子工業(yè)出版社.2005.032朱戰(zhàn)立,沈偉編著java程序設(shè)計(jì)實(shí)用指南電子工業(yè)
43、出版社,2005.13美cay s.horstmann.程峰等譯. java2核心技術(shù).機(jī)械工業(yè)出版社.2003.06附錄:源代碼選摘import java.awt.*;import javax.swing.*;import java.util.random;import java.awt.event.*;class min extends jpanel /雷的類 /備注:鼠標(biāo)的左鍵 = 1;右鍵 = 3;中鍵 = 2 private int flag = 0,statu = 0; /定義雷的屬性 0:沒有打開 1:打開 2:標(biāo)示為雷 3:不確定 /flag = 0 不是雷 ; flag =
44、1是雷 private int but,count = 0; /but:哪一個(gè)鼠標(biāo)鍵被按下去了 count:這個(gè)區(qū)域周圍有多少個(gè)雷 private int mx = 0,my = 0,mw = 10; /定義雷的坐標(biāo)和寬度 public min() /構(gòu)造函數(shù) statu = 0; public min(int f,int x,int y,int w) /構(gòu)造函數(shù) flag = f; mx = x; my = y; mw = w; public int getflag()return flag; public int getstatu()return statu; public int get
45、mx()return mx; public int getmy()return my; public int getmw()return mw; public int getcount()return count; public void setflag(int f)flag = f; public void setcount(int c)count = c; public void setdata(int f,int x,int y,int w,int s) /傳遞值 flag = f; mx = (x-1)*w; my = (y-1)*w; mw = w-1; statu = s; /根據(jù)
46、你點(diǎn)擊鼠標(biāo)的不同來改變雷的屬性 public int sendkey(int key) /返回值,如果游戲結(jié)束則返回-1 int rtn = 1; if(key = 3) switch(statu) case 1: break; case 2: statu = 3; break; case 3: statu = 0; break; case 0: statu = 2; break; rtn = 1; if(key = 1 & statu = 0) switch(flag) case 0: statu = 1; rtn = 2; break; case 1: statu = 1; rtn = -
47、1; break; return rtn; class drawpanel extends jpanel private int i,j; private int f = 0; /if f = 1 then game over ,if f =2 then win private int chx = 0,chy = 0; /專門記錄坐標(biāo)x,y的值 private int msum = 6,ksum = 0; /msum:雷的個(gè)數(shù),ksum:標(biāo)示雷的個(gè)數(shù) private int bx = 10,by = 10,bw = 40; /bx,by:棋盤的大小,bw:棋子的大小 public min bo
48、ard = new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(),new min(), new min(),new min(),new min(),new min(),new min(),new min(),new min(),new
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 精密設(shè)備租賃合同范本
- 房地產(chǎn)營銷代理合同標(biāo)準(zhǔn)
- 換熱器供應(yīng)合同文本
- 豬肉采購合同范本
- 標(biāo)準(zhǔn)施工合同范本2008
- 窗簾制作合同范本簡易
- 貨代業(yè)務(wù)合同范本
- 鄉(xiāng)間小院租賃合同范本
- 保潔部合同范本
- 加工出售糕團(tuán)合同范例
- 塑料模具設(shè)計(jì)制造培訓(xùn)
- 2024年LED手電筒行業(yè)分析報(bào)告及未來發(fā)展趨勢
- 漁業(yè)政策與法規(guī)
- 《原生質(zhì)體育種》課件
- Ⅰ類切口手術(shù)預(yù)防使用抗菌藥物原因分析品管圈魚骨圖柏拉圖
- 慢性疼痛的藥物治療:慢性疼痛的藥物治療方案
- 科技輔導(dǎo)員認(rèn)證筆試初級試題
- 量具能力準(zhǔn)則Cg-Cgk評價(jià)報(bào)告
- 九十年代生活
- 精神發(fā)育遲滯的護(hù)理查房
- 呂蒙白衣渡江
評論
0/150
提交評論