版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> Java 課程設(shè)計(jì)</p><p> 題目: 掃 雷 游 戲</p><p> 系 別 信息與計(jì)算科學(xué)</p><p> 專業(yè)班級(jí) 信息與計(jì)算科學(xué)091班</p><p> 學(xué)生姓名 </p><p> 指導(dǎo)教師
2、 </p><p> 提交日期 2012年5月25日 </p><p><b> 目 錄</b></p><p> 一、設(shè)計(jì)目的(一級(jí)標(biāo)題,用黑體小三)3</p><p> 二、設(shè)計(jì)要求和設(shè)計(jì)指標(biāo)3</p><p><b> 三、設(shè)計(jì)內(nèi)容3&l
3、t;/b></p><p> 3.1 總體設(shè)計(jì)..............................................................................................................3</p><p> 3.2 MineGame類................................
4、.........................................................................4</p><p> 3.3 MineArea..............................................................................................................
5、5</p><p> 3.4 Block類………………………………………………………………………………………………………………………………………………… 7</p><p> 3.5 BlockView類……………………………………………………………………………………………………………………………………… 7</p><p> 3.6 LayMines類
6、………………………………………………………………………………………………………………………………………… 9</p><p> 3.7 Record類……………………………………………………………………………………………………………………………………………… 9</p><p> 3.8 ShowRecord類………………………………………………………………………………………………
7、……………………………………10</p><p> 3.9 userDefine 類………………………………………………………………………………………………………………………………… 11</p><p> 3.10 voiceShow類……………………………………………………………………………………………………………………………………..13</p><p>
8、; 3.11 ruleShow 類……………………………………………………………………………………………………………………………………….14</p><p> 3.12 authorShow 類………………………………………………………………………………………………………………………………….16</p><p> 3.13所需圖像…………………………………………………………………
9、…………………………………………………………………………….17</p><p> 3.14所需音頻…………………………………………………………………………………………………………………………………………… 17</p><p> 3.15 整體效果…………………………………………………………………………………………………………………………………………… 17</p>
10、<p> 四、本設(shè)計(jì)改進(jìn)和建議20</p><p> 五、總結(jié)(感想和心得等)20</p><p> 六、主要參考文獻(xiàn)20</p><p><b> 附錄20</b></p><p><b> 一、設(shè)計(jì)目的</b></p><p> 通過(guò)選擇
11、《Java課程設(shè)計(jì)(第二版)》中掃雷游戲,這個(gè)綜合性的題目作為本次的課程設(shè)計(jì)。可以讓我們更加熟悉Java程序設(shè)計(jì)這門課程,學(xué)會(huì)熟練使用Jcreator這個(gè)軟件,加深對(duì)Java語(yǔ)言的掌握,提高編程水平。同時(shí)培養(yǎng)獨(dú)立思考和同學(xué)間團(tuán)結(jié)合作的能力,為畢業(yè)設(shè)計(jì)以及將來(lái)的工作打下堅(jiān)實(shí)的基礎(chǔ)。</p><p> 二、設(shè)計(jì)要求和設(shè)計(jì)指標(biāo)</p><p> 參考Windows 2000/XP系統(tǒng)提供的掃
12、雷游戲,改進(jìn)掃雷游戲程序, 增加以下功能:在主界面中添加一個(gè)菜單欄,菜單欄中包括游戲和幫助兩個(gè)菜單,其中游戲菜單中設(shè)置初級(jí)、中級(jí)、高級(jí)、自定義、聲音、掃雷英雄榜這幾個(gè)菜單項(xiàng),幫助菜單中設(shè)置游戲規(guī)則和制作人員兩個(gè)菜單項(xiàng)。</p><p><b> 設(shè)計(jì)內(nèi)容</b></p><p><b> 3.1總體設(shè)計(jì)</b></p><
13、p> 在設(shè)計(jì)掃雷游戲時(shí),需要編寫 個(gè)Java源文件:MineGame.java、MineArea.java、Block.java、BlockView.java、LayMines.Java、Record.java、ShowRecord.java、voiceShow.java、userDefine.java、autherShow.java、ruleShow</p><p> 掃雷游戲除了需要編寫上述java
14、 源文件所給出的類外,還需要Java 系統(tǒng)提供的一些重要的類,如File、JButton、和Jlabel等類。掃雷游戲所用到的一些重要的類以及之間的組合關(guān)系如圖1所示:</p><p> 圖1 類之間的組合關(guān)系</p><p> 3.2 MineGame類 </p><p> 3.2.1. 效果圖(如下圖2)</p><p> 圖
15、2 MineGame創(chuàng)建的窗口</p><p> 3.2.2 UML類圖</p><p> MineGame類是javax.swing 包中Jframe的一人子類,并實(shí)現(xiàn)了ActionListener接中,標(biāo)明該類的主要成員變量和方法的UML圖如圖3所示</p><p> 圖3 MineGame類的UML圖</p><p>
16、以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說(shuō)明。</p><p><b> 成員變量</b></p><p> · bar和fileMenu提供菜單操作,單擊游戲菜單中的選項(xiàng)為“初級(jí)”“中級(jí)”“高級(jí)”“自定義”“掃雷英雄榜”“背景聲音”“退出”“游戲規(guī)則”“制作人”等</p><p> ·MineArea 是掃雷區(qū)域,提供有
17、關(guān)掃雷的主要功能。</p><p> ·“英雄榜”負(fù)責(zé)存放三個(gè)級(jí)別的掃雷最好成績(jī)。</p><p> ·showheroRecord負(fù)責(zé)顯示英雄榜中的數(shù)據(jù)</p><p> ·userdefine負(fù)責(zé)用戶自定義功能</p><p> ·VoiceShow 負(fù)責(zé)背景音樂(lè)功能</p>
18、<p> ·ruleshow負(fù)責(zé)顯示游戲規(guī)則功能</p><p> ·authorshow負(fù)責(zé)顯示作者功能</p><p><b> 2)</b></p><p> ·MineGame()是橘色造方法,負(fù)責(zé)完成窗口的主要功能</p><p> ·actionPe
19、rformed(ActionEvent)方法是MineGame類實(shí)現(xiàn)的ActionListerer接口中的方法,該方法負(fù)責(zé)執(zhí)行菜單發(fā)出的有關(guān)命令。用戶選擇菜單項(xiàng)可以觸發(fā)ActionEvent事件,導(dǎo)致actionPerformed(ActionEvent)方法執(zhí)行相應(yīng)的操作,例如將mineAreaw創(chuàng)建的雷區(qū)設(shè)置為初級(jí) 中級(jí) 高級(jí)等</p><p> ·Main(String[])方法是程序的入口方法
20、</p><p> 3.2.3代碼(見(jiàn)附錄1)</p><p> 3.3 MineArea</p><p> 3.3.1 效果圖:(見(jiàn)下圖4)</p><p> 圖4 MineArea創(chuàng)建的掃雷區(qū)域效果圖</p><p> 3.3.2 UML圖</p><p> MineArea
21、類是javax.swing包中JPanel容器的子類,實(shí)現(xiàn)了ActionListener和MouserListener接口,所創(chuàng)建的對(duì)象:mineArea是MineGame類中最重要的成員之一,作為一個(gè)容器添加到MineGame窗口的中心。標(biāo)明MineArea類的主要成員變量、方法以及和MineGame類之間組合關(guān)系的UML圖如圖5:</p><p> 圖5 MineGame類之間組合關(guān)系的UML圖</
22、p><p> 以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說(shuō)明。</p><p><b> 成員變量</b></p><p> ·Block是Block類型的數(shù)組,用來(lái)確定雷區(qū)有多少需進(jìn)行掃雷的方塊。</p><p> ·blockView是Blockview類型的數(shù)組,負(fù)責(zé)為block數(shù)組中的Block
23、對(duì)象提供視圖。</p><p> ·Lay是LayMines類型的對(duì)象,負(fù)責(zé)設(shè)置block數(shù)組中的哪些方塊是雷或不是雷。</p><p> ·Record負(fù)責(zé)提供保存成績(jī)的界面,是一個(gè)對(duì)話框,默認(rèn)不可見(jiàn)。用戶只有掃雷成功后(用時(shí)最少),才能看見(jiàn)該對(duì)話框。</p><p> ·reStart是一個(gè)按鈕對(duì)象,用戶單擊它重新開始游戲。&
24、lt;/p><p> ·time是計(jì)時(shí)器對(duì)象,負(fù)責(zé)計(jì)算用戶的用時(shí)。</p><p><b> 2)方法</b></p><p> ·initMineArea(int,int,int,int)方法可根據(jù)參數(shù)提供的數(shù)據(jù)設(shè)置雷區(qū)的寬度,高度,雷的數(shù)目以及雷區(qū)的級(jí)別。</p><p> ·act
25、ionPerformed(ActionEvent)是MIneArea類實(shí)現(xiàn)ActionListener接口中的方法。當(dāng)用戶單擊blockView中的某個(gè)方塊時(shí),actionPerformed(ActionEvent)方法負(fù)責(zé)執(zhí)行有關(guān)算法,例如,當(dāng)用鼠標(biāo)左鍵單擊方塊上的按鈕后,若該方塊下有雷,actionPerformed(ActionEvent)方法將使用戶輸?shù)舯揪?,若該方塊下又雷,actionPerformed(ActionEvent
26、)方法將顯示BlockView對(duì)象中的標(biāo)簽,該標(biāo)簽上是一個(gè)數(shù)字,該數(shù)字代表當(dāng)前方塊的周圍的8個(gè)方塊中總共有多少顆雷</p><p> ·show()方法是一個(gè)遞歸方法。actionPerformed(ActionEvent)方法執(zhí)行時(shí)將調(diào)用show方法進(jìn)行掃雷。</p><p> ·mousePress(MouseEvent)方法是MineArea類實(shí)現(xiàn)的Mouse
27、Listener接口中的方法,當(dāng)用戶按下鼠標(biāo)右鍵時(shí),mousePress(MouseEvent)方法負(fù)責(zé)讓方塊上顯示一個(gè)探雷標(biāo)記。</p><p> ·inquireWin()方法用來(lái)判斷用戶是否掃雷成功,如果成功該方法負(fù)責(zé)讓record對(duì)話框可見(jiàn)。所謂掃雷成功是指不僅找到了全部的雷而且用時(shí)最少。</p><p> 3.3.3代碼(見(jiàn)附錄2)</p><p
28、> 3.4 Block類</p><p><b> 3.4.1.效果圖</b></p><p> Block對(duì)象負(fù)責(zé)封裝雷區(qū)中方塊中的數(shù)據(jù)以及對(duì)這些數(shù)據(jù)的操作,外觀效果由Blockview負(fù)責(zé)提供(見(jiàn)后面的BlockView)。</p><p> 3.4.2.UML圖</p><p> Block類創(chuàng)建
29、的對(duì)象是數(shù)組block的單元的對(duì)象。Block型數(shù)組block是MineArea類的重要成員之一。標(biāo)明Block類的主要成員變量和方法以及和MineArea類之間的組合關(guān)系的UML圖如下圖6:</p><p> 圖6 Block類的UML圖</p><p> 以下是UML圖中有關(guān)數(shù)據(jù)的方法的詳細(xì)說(shuō)明。</p><p><b> 1)成員變量<
30、/b></p><p> ·name是方塊上的名字。</p><p> ·aroundMineNumber是方塊周圍雷的數(shù)目。</p><p> ·mineIcon是方塊上雷的圖標(biāo)。</p><p> ·sMine用來(lái)表示方塊是否是雷。</p><p>
31、3;isMark用來(lái)表示方塊是否被標(biāo)記。</p><p> ·isOpen用來(lái)表示方塊是否被挖開。</p><p><b> 2)方法</b></p><p> ·setAroundMineNumber(int)方法用來(lái)設(shè)置aroundMineNumber的值。</p><p> ·
32、getAroundMineNumber()方法用來(lái)獲取aroundMineNumber的值。</p><p> 3.4.3代碼(見(jiàn)附錄3)</p><p> 3.5 BlockView類</p><p><b> 3.5.1.效果圖</b></p><p> BlockView創(chuàng)建的對(duì)象負(fù)責(zé)為Block對(duì)象提供
33、視圖,以便用戶通過(guò)該視圖與Block對(duì)象交互。BlockView對(duì)象使用一個(gè)標(biāo)簽和按鈕為Block對(duì)象提供視圖,標(biāo)簽和按鈕按著卡片布局層疊在一起,默認(rèn)狀態(tài)按鈕遮擋住標(biāo)簽。當(dāng)用戶單擊按鈕后,如果Block對(duì)象時(shí)雷,BlockView對(duì)象中的標(biāo)簽顯示的事雷的圖標(biāo);如果Block對(duì)象不是雷,標(biāo)簽顯示的是周圍雷的總數(shù)。效果如圖7所示:</p><p> 圖7 BlockView對(duì)象</p><p&
34、gt; 3.5.2.UML圖</p><p> BlockView類是javax。swing包中JPanel類的一個(gè)子類,創(chuàng)建的對(duì)象是數(shù)組blockView的單元中的對(duì)象。BlockView型數(shù)組BlockView是MineArea類的重要成員之一。標(biāo)明BlockView類的主要成員變量和方法以及和MineArea類之間的組合關(guān)系的UML圖如圖8:</p><p> 圖8 Mine
35、Area類的UML圖</p><p> 以下是UML圖中有關(guān)數(shù)據(jù)的方法的詳細(xì)說(shuō)明。</p><p><b> 1)成員變量</b></p><p> ·blockNameOrIcon用來(lái)顯示Block對(duì)象的name,number和mineIcon屬性。</p><p> ·blockCover
36、用來(lái)遮擋blockNameOrIcon。</p><p><b> ·card卡片布局</b></p><p><b> 2)方法</b></p><p> ·giveView(Block block)方法給參數(shù)指定的Block對(duì)象提供視圖,如果Block對(duì)象的isMine屬性為true,即方塊是
37、雷,那么blockNameOrIcon標(biāo)簽上設(shè)置的文本就是Block對(duì)象的name屬性的值,同時(shí)blockNameOrIcon標(biāo)簽上設(shè)置的圖標(biāo)就是Block對(duì)象的mineIcon指定的圖標(biāo)。如果Block對(duì)象的isMine屬性為false,blockNameOrIcon標(biāo)簽上設(shè)置的圖標(biāo)就是Block對(duì)象的aroundMineNumber屬性的值,及周圍雷的數(shù)目</p><p> ·seeblockNa
38、meOrIcon()方法讓用戶看見(jiàn)視圖中的標(biāo)簽,無(wú)法看見(jiàn)按鈕。</p><p> ·seeblockNameOrIcon(0方法讓用戶看見(jiàn)視圖中的按鈕,無(wú)法看見(jiàn)標(biāo)簽。</p><p> 3.5.3代碼(見(jiàn)附錄4)</p><p> 3.6 LayMines類</p><p><b> 3.6.1.效果圖</
39、b></p><p> LayMines對(duì)象使用隨機(jī)算法制定MineArea對(duì)象中的哪些Block對(duì)象是雷,哪些對(duì)象不是雷,沒(méi)有可現(xiàn)實(shí)的效果圖。</p><p> 3.6.2.UML圖</p><p> LayMines創(chuàng)建的對(duì)象Lay是MineArea中的重要成員,表明該類的主要成員變量和方法以及和MineArea類之間組合關(guān)系的UML圖如圖9:<
40、;/p><p> 圖9 LayMines類的UML圖</p><p> 以下是UML圖中有關(guān)數(shù)據(jù)的方法的詳細(xì)說(shuō)明。</p><p><b> 1)成員變量</b></p><p> mineIcon用來(lái)存放一個(gè)格式為gif的圖像。</p><p><b> 2)方法</b&
41、gt;</p><p> layMinesForBlock(Block[][],in)方法對(duì)參數(shù)指定的Block數(shù)組進(jìn)行設(shè)置,其中int參數(shù)指定雷的數(shù)目,當(dāng)指定Block數(shù)組中每個(gè)單元中的方塊是雷時(shí),就將該房快上的圖標(biāo)設(shè)置為mineIcon,當(dāng)指定Block數(shù)組中每個(gè)單元中的方塊不是雷時(shí),就將該方塊的名字設(shè)置為周圍的雷的數(shù)目。</p><p> 3.6.3代碼(見(jiàn)附錄5)</p&
42、gt;<p> 3.7 Record類</p><p><b> 3.7.1.效果圖</b></p><p> Record創(chuàng)建的對(duì)象負(fù)責(zé)提供保存成績(jī)的界面,效果如圖10:</p><p> 圖10 保存創(chuàng)建對(duì)話框</p><p> 3.7.2.UML圖</p><p&g
43、t; Record是javax。swing包中jDialog對(duì)話框的子類,并實(shí)現(xiàn)了ActionListener接口。Record創(chuàng)建的對(duì)象:record是MineArea類的成員之一,當(dāng)用戶掃雷成功時(shí),該對(duì)象提供了保存成績(jī)到文件的界面。標(biāo)明Record類的主要成員變量,方法以及和MineArea類之間組合關(guān)系的UML圖如圖11:</p><p> 圖11 Record類的UML圖</p>&l
44、t;p> 以下是UML圖中有關(guān)數(shù)據(jù)的方法的詳細(xì)說(shuō)明。</p><p><b> 1)成員變量</b></p><p> ·textName提供用戶掃雷優(yōu)勝者輸入姓名</p><p> ·用戶單擊”確定“按鈕,可以保存成績(jī)</p><p><b> 2)方法</b>
45、</p><p> ·actionPerformed(ActionEvent)方法是Record類實(shí)現(xiàn)的ActionListener接口中的方法,當(dāng)用戶單擊”確定“按鈕后,該方法被執(zhí)行,所執(zhí)行的操作就是獲取用戶輸入的名字和用時(shí)然后調(diào)用writeRecord(String,String)方法將信息寫入”英雄榜“中。</p><p> ·writeRecord(Stri
46、ng,String)方法負(fù)責(zé)將有關(guān)信息掃雷用時(shí),掃雷級(jí)別,掃雷優(yōu)勝者姓名等心思寫入到”英雄榜“文件。</p><p> 3.7.3代碼(見(jiàn)附錄6)</p><p> 3.8 ShowRecord類</p><p><b> 3.8.1.效果圖</b></p><p> ShowRecord創(chuàng)建的對(duì)象負(fù)責(zé)提供顯
47、示成績(jī)的界面,效果如圖12:</p><p> 圖12 顯示成績(jī)對(duì)話框</p><p> 3.8.2.UML圖</p><p> ShowRecord是javax。swing包中JDialog對(duì)話框的子類,并實(shí)現(xiàn)了ActionListener接口。ShowReacord創(chuàng)建的對(duì)象showHeroRecord是MineGame類的成員之一,當(dāng)用戶選擇查看&quo
48、t;英雄榜“菜單項(xiàng)時(shí),該對(duì)話框可見(jiàn),提供了查看掃雷的最好成績(jī)的界面。標(biāo)明ShowRecord類的主要成員變量,方法以及和MineGame類之間組合關(guān)系的UML圖如圖13:</p><p> 圖13 ShowRecord類的UML圖</p><p> 以下是UML圖中有關(guān)數(shù)據(jù)的方法的詳細(xì)說(shuō)明。</p><p><b> 成員變量</b>&
49、lt;/p><p> ·File存放文件的引用</p><p> ·用戶單擊”顯示成績(jī)“按鈕,可以查看各個(gè)級(jí)別掃雷的最好成績(jī)。</p><p> ·用戶單擊”重新計(jì)分“按鈕,可以將”英雄榜“中的成績(jī)恢復(fù)為初始值。</p><p><b> 2)方法</b></p><
50、p> ·actionPerformed(ActionEvent)方法是ShowRecord類實(shí)現(xiàn)的ActionListener接口中的方法,當(dāng)用戶單擊”顯示成績(jī)“按鈕后,該方法被執(zhí)行,所執(zhí)行的操作就是調(diào)用readAndShow()方法。</p><p> ·readAndShow()方法負(fù)責(zé)讀取存放在文件中的各個(gè)級(jí)別的掃雷最好成績(jī)以及掃雷者姓名,并顯示這些相關(guān)信息。</p>
51、;<p> 3.8.3代碼(見(jiàn)附錄7)</p><p> 3.9 userDefine 類</p><p> 3.9.1效果圖 (如圖14)</p><p> 圖14 自定義窗口</p><p> 3.9.2 UML圖 </p><p> userDefine是java.awt包中Rame框
52、架的子類,并實(shí)現(xiàn)了ActionListener接口。userDefine創(chuàng)建的對(duì)像:usedefine是MineArea類的成員之一,當(dāng)用戶點(diǎn)擊菜單欄中的游戲->自定義時(shí),彈出界面,在界面的文本框中輸入相應(yīng)的數(shù)字。然后單擊確定即可,或者單擊取消退出界面。標(biāo)明userDefine類的主要成員變量、方法以及和MineArea類之間的組合關(guān)系的UML圖如圖15所示</p><p> 圖15 userDefin
53、e類的UML圖</p><p> 以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說(shuō)明。</p><p><b> 1)成員變量</b></p><p> ·行數(shù),列數(shù),雷數(shù),分?jǐn)?shù):分別用來(lái)顯示行數(shù),列數(shù),雷數(shù),分?jǐn)?shù)</p><p> ·行數(shù)1,列數(shù)1,雷數(shù)1,分?jǐn)?shù)1:用來(lái)自定義雷區(qū)的長(zhǎng)度值,寬度值,所有
54、的雷數(shù)值以及每贏一局所得的分?jǐn)?shù)</p><p> ·說(shuō)明1,說(shuō)明2 說(shuō)明3,說(shuō)明4:用來(lái)說(shuō)明上述內(nèi)容</p><p> ·容器1,容器2,容器3 :用來(lái)裝Label 和TextFiled,以方便布局</p><p> ·確定,取消;單擊“確定”后,如果輸入的內(nèi)容合法,就會(huì)實(shí)現(xiàn)自定義的雷區(qū),如果不合法的話,就會(huì)彈出一個(gè)警告框,提示輸
55、入有誤;單擊“取消”退出自定義窗口。</p><p><b> 2)方法</b></p><p> actionPerformrd(ActonEvent)方法是userDefine類中實(shí)現(xiàn)的ActionListener接口中的方法,當(dāng)用戶單擊界面的“確定”,該方法被執(zhí)行,所執(zhí)行的操作就是,將用戶輸入的信息傳入程序,實(shí)驗(yàn)自定義雷區(qū)的難度級(jí)別。當(dāng)用戶單擊界面的“取消”
56、,該方法被執(zhí)行,所執(zhí)行的操作就是,退出用戶自定義界面。</p><p> 3.9.3 代碼(見(jiàn)附錄8 userDefine.java)</p><p> 3.10 voiceShow類</p><p> 3.10.1 效果圖(如圖16)</p><p> 圖16 背景音樂(lè)窗口</p><p> 3.10.2
57、UML圖 </p><p> voiceShow是java.awt包中Rame框架的子類,并實(shí)現(xiàn)了ActionListener接口。voiceShow創(chuàng)建的對(duì)像:voiceshow是MineArea類的成員之一,當(dāng)用戶點(diǎn)擊菜單欄中的游戲->背景音樂(lè)時(shí),彈出界面,單擊下拉列表,選擇背景音樂(lè),然后單擊一次播放,就可以實(shí)現(xiàn)有背景音樂(lè),循環(huán)播放和停止播放類似。標(biāo)明author類的主要成員變量、方法以及和MineA
58、rea類之間的組合關(guān)系的UML圖如圖17所示</p><p> 圖17 voiceShow類的UML圖</p><p> 以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說(shuō)明。</p><p><b> 1)成員變量</b></p><p> ·la1:用來(lái)顯示“選擇播放曲目”</p><p&g
59、t; ·Ch1:音樂(lè)選擇下拉列表</p><p> ·Bu1,bu2,bu3;分別表示一次播放,循環(huán)播放,停止播放,單擊后實(shí)現(xiàn)相應(yīng)的功能</p><p> ·url;用來(lái)表示所選擇音樂(lè)的URL</p><p> ·clip:音樂(lè)播放中類,用以實(shí)現(xiàn)音樂(lè)的播放功能:</p><p> ·
60、str,str1;表示所選擇音樂(lè)的Itme的值</p><p><b> 2)方法</b></p><p> actionPerformrd(ActonEvent)方法是voiceShow類中實(shí)現(xiàn)的ActionListener接口中的方法,當(dāng)用戶單擊界面的“一次播放”,該方法被執(zhí)行,所執(zhí)行的操作就是,開始播放音樂(lè)。當(dāng)用戶單擊界面的“循環(huán)播放”,該方法被執(zhí)行,所執(zhí)行
61、的操作就是,開始循環(huán)播放音樂(lè)。當(dāng)用戶單擊界面的“停止”,該方法被執(zhí)行,所執(zhí)行的操作就是,停止正在播放音樂(lè)。</p><p> 3.10.3 代碼(見(jiàn)附錄9 voiceShow.java)</p><p> 3.11 ruleShow 類</p><p> 3.11.1 效果圖(如圖18)</p><p><b> 圖18
62、 游戲規(guī)則</b></p><p> 3.11.2 UML圖</p><p> ruleShow是javax.swing包中JRame框架的子類,并實(shí)現(xiàn)了ActionListener接口。ruleShow創(chuàng)建的對(duì)像:ruleshow是MineArea類的成員之一,當(dāng)用戶點(diǎn)擊菜單欄中的幫助->游戲規(guī)則時(shí),彈出界面,說(shuō)明游戲,標(biāo)明author類的主要成員變量、方法以及和M
63、ineArea類之間的組合關(guān)系的UML圖如圖19所示</p><p> 圖19 ruleShow類的UML圖</p><p> 以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說(shuō)明。</p><p><b> 1)成員變量</b></p><p> ·la1:用來(lái)顯示掃雷游戲的規(guī)則如下</p>&l
64、t;p> ·la2,la2………;用來(lái)顯示下面幾條游戲規(guī)則</p><p> ·Con1,Con2,Con3;用來(lái)裝la1,la2 以實(shí)現(xiàn)在JFrame中布局;</p><p> ·bu1;用記單擊bu1,關(guān)閉窗口;</p><p><b> 2)方法</b></p><p>
65、 actionPerformrd(ActonEvent)方法是ruleShow類中實(shí)現(xiàn)的ActionListener接口中的方法,當(dāng)用戶單擊界面的“確定”,該方法被執(zhí)行,所執(zhí)行的操作就是,并關(guān)閉界面。</p><p> 3.11.3 代碼(見(jiàn)附錄10 ruleShow.java)</p><p> 3.12 authorShow 類</p><p> 3.1
66、2.1 效果圖(如圖20)</p><p> 圖20 作者及意見(jiàn)</p><p> 3.12.2 UML圖</p><p> authorShow是javax.swing包中JRame框架的子類,并實(shí)現(xiàn)了ActionListener接口。authorShow創(chuàng)建的對(duì)像:authorshow是MineArea類的成員之一,當(dāng)用戶點(diǎn)擊菜單欄中的幫助->制作
67、人時(shí),彈出界面,說(shuō)明作者信息以及傳入用戶提交的建議,標(biāo)明author類的主要成員變量、方法以及和MineArea類之間的組合關(guān)系的UML圖如下所示</p><p> 以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細(xì)說(shuō)明。</p><p><b> 成員變量</b></p><p> ·bu1:用戶單擊bu1,可以提交用戶輸入的信息以及關(guān)閉窗
68、口</p><p> ·tx1:用來(lái)輸入用戶的建議</p><p> ·la1,la2……:用來(lái)顯示作者信息</p><p><b> 2)方法</b></p><p> actionPerformrd(ActonEvent)方法是authorShow類中實(shí)現(xiàn)的ActionListener接口
69、中的方法,當(dāng)用戶單擊界面的“確定”,該方法被執(zhí)行,所執(zhí)行的操作就是將用戶的建議與意見(jiàn)保存在一個(gè)advice.txt 文檔中,并關(guān)閉界面。</p><p> 3.12.3 代碼(見(jiàn)附錄11 authorShow.java)</p><p><b> 3.13所需圖像</b></p><p> 預(yù)備名字為mark.gif、mine.gif、a
70、.jpg 、b.jpg 、c.jpg圖像文件,其中mark.gif、mine.gif分別是掃雷時(shí)所用的“標(biāo)記”圖像“雷”的圖像,a.jpg 、b.jpg 、c.jpg用于authorShow中作者的圖像。</p><p><b> 3.14 所需音頻</b></p><p> 準(zhǔn)備好 爆炸聲.wav、猜不透.wav、范逸臣 不說(shuō)出的溫柔.wav、林宥嘉 –說(shuō)謊.w
71、av 和我舍不得 弦子.wav 等音頻文件(注意,一定要是wav格式的音頻文件)其中爆炸聲.wav 用于Minearea 中,當(dāng)點(diǎn)到雷就會(huì)發(fā)出聲音,其余用于voiceShow中用來(lái)顯示背景音樂(lè)。</p><p><b> 3.15 整體效果</b></p><p> 3.15.1 初始界面(圖21)</p><p><b> 圖
72、21初始界面</b></p><p> 3.15.2 單擊游戲->自定義->確定(圖22、23)</p><p> 圖 22 自定認(rèn)界面 圖23 自定義游戲難度</p><p> 3.15.3 單擊 游戲->背景聲音->一次播放(圖24、25)</p><p> 圖 24
73、 背景音樂(lè)界面 圖25 播放音樂(lè)</p><p> 3.15.4單擊 幫助->游戲規(guī)則(圖26)</p><p> 圖 26 游戲規(guī)則界面</p><p> 3.15.5 單擊 幫助->制作人(圖27)</p><p> 圖 27 作者及意見(jiàn)</p><p><
74、;b> 本設(shè)計(jì)改進(jìn)建議</b></p><p> 1、界面的美觀性做的不太好,比如說(shuō)布局,顏色搭配有待改進(jìn)</p><p> 2、背景音樂(lè)在播方的時(shí)候有一點(diǎn)小問(wèn)題,比如單擊停止播放,音樂(lè)并沒(méi)有停止,需要單擊2次或多次;另外背景音樂(lè)似乎很占內(nèi)存,運(yùn)行的時(shí)候容易死機(jī)。</p><p> 3、MineGame的初始化界面大小難以控制,特別是在自定
75、義的情況下,需在手動(dòng)改面窗口的大小。</p><p> 五、總結(jié)(感想和心得等)</p><p> 1、做完之后,確實(shí)有一點(diǎn)成就感,這種感覺(jué)激勵(lì)著自已更加努力的學(xué)習(xí)這門課程</p><p> 2、編程的進(jìn)程肯定會(huì)遇到困難,要充分利用現(xiàn)有的資源 比如說(shuō)互聯(lián)網(wǎng),書籍,這次實(shí)驗(yàn)多虧在在網(wǎng)上找的Java API,幫助我解決了不小困難。</p><p
76、> 3、要有團(tuán)隊(duì)合作精神,很感謝我的認(rèn)友在這次實(shí)驗(yàn)給予我的幫助。</p><p><b> 六、主要參考文獻(xiàn)</b></p><p> [1] Java課程設(shè)計(jì)(第二版) 清華大學(xué)出版社 耿祥義 張躍平 </p><p> [2] Java2實(shí)用教程(第三版) 清華大學(xué)出版社 耿祥義 等</p><
77、p> [3]孫衛(wèi)琴. 精通Struts:基于MVC的Java Web設(shè)計(jì)與開發(fā).北京:電子工業(yè)出版社,2004.08</p><p> [4]《JAVA 語(yǔ)言與面向?qū)ο蟪绦蛟O(shè)計(jì)》 . 印 旻 . 清華大學(xué)出版社。[5]《 JavaApplet 實(shí)例編程》,赤金、聶松編著,中國(guó)水利水電出版社 [6]《 Java 開發(fā)利器 ——Eclipse 從入門到精通》張峰科技 編,清華大學(xué)出版社[7]
78、《 Java2 核心》第二版窗體底端 </p><p><b> 附錄</b></p><p><b> 附錄1:</b></p><p> import java.awt.event.*;</p><p> import java.awt.*;</p><p>
79、 import javax.swing.*;</p><p> import javax.swing.border.*;</p><p> import java.util.*;</p><p> import java.io.*;</p><p> import javax.swing.KeyStroke;</p>
80、<p> import java.awt.event.KeyEvent;</p><p> public class MineGame extends JFrame implements ActionListener</p><p><b> {</b></p><p> JMenuBar bar;</p>&l
81、t;p> JMenu fileMenu,fileMenu1;////////////////////////</p><p> JMenuItem 初級(jí),中級(jí),高級(jí),掃雷英雄榜;</p><p> JMenuItem 自定義,背景聲音,游戲規(guī)則,制作人,退出;////////////////////////</p><p> static MineAr
82、ea mineArea=null;</p><p> File 英雄榜=new File("英雄榜.txt");</p><p> Hashtable hashtable=null;</p><p> ShowRecord showHeroRecord=null;</p><p> userDefine userd
83、efine=new userDefine();///////////////</p><p> voiceShow voiceshow;////////////////</p><p> ruleShow ruleshow;////////////////</p><p> authorShow authorshow;////////////////</
84、p><p> MineGame()</p><p><b> {</b></p><p> mineArea=new MineArea(16,16,40,1);</p><p> add(mineArea,BorderLayout.CENTER);</p><p> bar=new JMen
85、uBar();</p><p> fileMenu=new JMenu("游戲");</p><p> fileMenu.setMnemonic(KeyEvent.VK_G);</p><p> fileMenu1=new JMenu("幫助");//////////////////</p><p&g
86、t; fileMenu1.setMnemonic(KeyEvent.VK_H);/////////////////////</p><p> 初級(jí)=new JMenuItem("初級(jí)",KeyEvent.VK_P);////////////////</p><p> 初級(jí).setAccelerator(KeyStroke.getKeyStroke(KeyEvent
87、.VK_P,ActionEvent.CTRL_MASK));/////////////</p><p> 中級(jí)=new JMenuItem("中級(jí)",KeyEvent.VK_M);//////////////</p><p> 中級(jí).setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M,ActionEvent.CTR
88、L_MASK));//////////</p><p> 高級(jí)=new JMenuItem("高級(jí)(H)",KeyEvent.VK_H);//////////</p><p> 高級(jí).setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,ActionEvent.CTRL_MASK));/////////</p&
89、gt;<p> 掃雷英雄榜=new JMenuItem("掃雷英雄榜",KeyEvent.VK_B); //////////////</p><p> 掃雷英雄榜.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,ActionEvent.CTRL_MASK));/////////</p><p>
90、 自定義=new JMenuItem("自定義",KeyEvent.VK_S);///////////////</p><p> 自定義.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,ActionEvent.CTRL_MASK));//////////</p><p> 背景聲音=new JMenuItem
91、("背景聲音",KeyEvent.VK_M);//////////////////</p><p> 背景聲音.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M,ActionEvent.CTRL_MASK));////////</p><p> 游戲規(guī)則=new JMenuItem("游戲規(guī)則"
92、;,KeyEvent.VK_R);////////////////</p><p> 游戲規(guī)則.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M,ActionEvent.CTRL_MASK));////////</p><p> 制作人=new JMenuItem("制作人",KeyEvent.VK_O);///
93、////////////////</p><p> 制作人.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_MASK));//////////</p><p> 退出=new JMenuItem("退出",KeyEvent.VK_E);</p><p>
94、 退出.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,ActionEvent.CTRL_MASK));//////////</p><p> voiceshow=new voiceShow();/////////////</p><p> ruleshow=new ruleShow();//////////////</p
95、><p> authorshow=new authorShow();///////////////</p><p> fileMenu.add(初級(jí));</p><p> fileMenu.add(中級(jí));</p><p> fileMenu.add(高級(jí));</p><p> fileMenu.add(自定義)
96、;///////////////////</p><p> fileMenu.add(掃雷英雄榜);</p><p> fileMenu.add(背景聲音);//////////////////;//////</p><p> fileMenu.add(退出);</p><p> fileMenu1.add(游戲規(guī)則);///////
97、///////////////</p><p> fileMenu1.add(制作人);////////////////////////</p><p> bar.add(fileMenu);</p><p> bar.add(fileMenu1);/////////////////////////////</p><p> setJ
98、MenuBar(bar);</p><p> 初級(jí).addActionListener(this);</p><p> 中級(jí).addActionListener(this);</p><p> 高級(jí).addActionListener(this);</p><p> 掃雷英雄榜.addActionListener(this);<
99、/p><p> 自定義.addActionListener(this);///////////////</p><p> 背景聲音.addActionListener(this);////////////////</p><p> 游戲規(guī)則.addActionListener(this);//////////////</p><p> 制
100、作人.addActionListener(this);/////////////////</p><p> 退出.addActionListener(this);</p><p> hashtable=new Hashtable();</p><p> hashtable.put("初級(jí)","初級(jí)#"+999+"
101、;#匿名"); </p><p> hashtable.put("中級(jí)","中級(jí)#"+999+"#匿名");</p><p> hashtable.put("高級(jí)","高級(jí)#"+999+"#匿名");</p><p> if(!英雄
102、榜.exists()) </p><p><b> {</b></p><p><b> try</b></p><p> { FileOutputStream out=new FileOutputStream(英雄榜);</p><p> ObjectOutputStream object
103、Out=new ObjectOutputStream(out);</p><p> objectOut.writeObject(hashtable);</p><p> objectOut.close();</p><p> out.close();</p><p><b> }</b></p>&
104、lt;p> catch(IOException e){}</p><p><b> }</b></p><p> showHeroRecord=new ShowRecord(this,hashtable);</p><p> setBounds(100,100,280,380);</p><p> set
105、Visible(true);</p><p> setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p> validate();</p><p><b> }</b></p><p> public void actionPerformed(ActionEv
106、ent e)</p><p><b> {</b></p><p> if(e.getSource()==初級(jí)){</p><p> mineArea.initMineArea(8,8,10,1);</p><p> setBounds(100,100,360,340); </p><p>
107、;<b> }</b></p><p> if(e.getSource()==中級(jí)){</p><p> mineArea.initMineArea(16,16,40,2);</p><p> setBounds(100,100,320,420);</p><p><b> }</b>&l
108、t;/p><p> if(e.getSource()==高級(jí)){</p><p> mineArea.initMineArea(22,22,99,3);</p><p> setBounds(100,100,390,450);</p><p><b> }</b></p><p> if(e
109、.getSource()==自定義)////////////////</p><p><b> {</b></p><p> userdefine.setvisible(true);//////////////</p><p><b> }</b></p><p> if(e.getSour
110、ce()==背景聲音)/////////////</p><p><b> {</b></p><p> voiceshow.setVisible(true);////////////</p><p><b> }</b></p><p> if(e.getSource()==游戲規(guī)則)//
111、/////////////</p><p><b> {</b></p><p> ruleshow.setVisible(true);////////////</p><p><b> } </b></p><p> if(e.getSource()==制作人)/////////////
112、/////</p><p><b> {</b></p><p> authorshow.setVisible(true);////////////////</p><p><b> }</b></p><p> if(e.getSource()==掃雷英雄榜){ </p>&
113、lt;p> if(showHeroRecord!=null)</p><p> showHeroRecord.setVisible(true);</p><p><b> }</b></p><p> if(e.getSource()==退出){ </p><p> System.exit(0);<
114、/p><p><b> }</b></p><p><b> }</b></p><p> public static void main(String args[])</p><p><b> {</b></p><p> new MineGam
115、e();</p><p><b> } </b></p><p><b> }</b></p><p><b> 附錄2:</b></p><p> import java.awt.*;</p><p> import java.awt.ev
116、ent.*;</p><p> import javax.swing.*;</p><p> import java.net.*;</p><p> import java.io.*;</p><p> import java.applet.*;</p><p> public class MineArea
117、extends JPanel implements ActionListener,MouseListener{</p><p> JButton reStart;</p><p> Block [][] block;</p><p> BlockView [][] blockView;</p><p> URL url;///////
118、///////</p><p> String str;///////////</p><p> AudioClip clip;</p><p> LayMines lay;</p><p> int row,colum,mineCount,markMount;//雷區(qū)的行數(shù)、列數(shù)以及地雷個(gè)數(shù)和用戶給出的標(biāo)記數(shù)</p>
119、<p> ImageIcon mark;</p><p> int grade; </p><p> JPanel pCenter,pNorth;</p><p> JTextField showTime,showMarkedMineCount; //顯示用時(shí)以及標(biāo)記數(shù)</p><p> Timer time; //計(jì)時(shí)
120、器</p><p> int spendTime=0;</p><p> Record record;</p><p> public MineArea(int row,int colum,int mineCount,int grade) {</p><p> reStart=new JButton("重新開始")
121、;</p><p> //reStart.setSize(4,4);</p><p> mark=new ImageIcon("mark.gif"); //探雷標(biāo)記</p><p> time=new Timer(1000,this);</p><p> showTime=new JTextField(4);&l
122、t;/p><p> str="爆炸聲.wav";</p><p> showMarkedMineCount=new JTextField(4);</p><p> showTime.setHorizontalAlignment(JTextField.CENTER);</p><p> showTime.setForeg
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java掃雷游戲課程設(shè)計(jì)
- java課程設(shè)計(jì)--掃雷游戲報(bào)告
- java課程設(shè)計(jì)報(bào)告-掃雷小游戲
- 基于java的掃雷游戲課程設(shè)計(jì)
- java掃雷課程設(shè)計(jì)
- java 課程設(shè)計(jì) 掃雷
- java課程設(shè)計(jì)--基于java的掃雷游戲軟件設(shè)計(jì)
- java_掃雷游戲課程設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)
- 掃雷游戲課程設(shè)計(jì)報(bào)告
- 掃雷游戲課程設(shè)計(jì)報(bào)告
- 掃雷小游戲課程設(shè)計(jì)
- 基于java的掃雷課程設(shè)計(jì)
- 基于java的掃雷課程設(shè)計(jì)
- android平臺(tái)掃雷游戲課程設(shè)計(jì)
- c程序課程設(shè)計(jì)報(bào)告(掃雷游戲)
- 掃雷游戲程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)--手機(jī)游戲
- vb課程設(shè)計(jì)掃雷游戲的設(shè)計(jì)與開發(fā)
- java課程設(shè)計(jì)-撲克游戲
- java掃雷游戲的設(shè)計(jì)與實(shí)現(xiàn)
評(píng)論
0/150
提交評(píng)論