Java課程設(shè)計(jì)掃雷_第1頁
Java課程設(shè)計(jì)掃雷_第2頁
Java課程設(shè)計(jì)掃雷_第3頁
Java課程設(shè)計(jì)掃雷_第4頁
Java課程設(shè)計(jì)掃雷_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、目錄1 課程設(shè)計(jì)目的12 功能描述12.1 設(shè)計(jì)背景12.2 需求分析13 設(shè)計(jì)方案論證23.1 概要設(shè)計(jì)23.2設(shè)計(jì)流程圖44 詳細(xì)設(shè)計(jì)54.1 MineGame類54.2 MineArea類54.3 Block類64.4 BlockView類64.5 LayMines類74.6 Record類74.7 ShowRecord類85 運(yùn)行結(jié)果分析96 設(shè)計(jì)體會(huì)11參考文獻(xiàn)131 課程設(shè)計(jì)目的本次課程設(shè)計(jì)是用Java語言及相關(guān)知識(shí)設(shè)計(jì)一個(gè)掃雷游戲系統(tǒng),完成掃雷游戲的基本功能,并在此基礎(chǔ)上,自行完善和優(yōu)化系統(tǒng)功能。理解掌握選擇游戲級(jí)別,記錄游戲時(shí)間和保存游戲成績(jī)的方法,學(xué)習(xí)程序設(shè)計(jì)的基本思路和方法

2、,培養(yǎng)計(jì)算機(jī)專業(yè)學(xué)生運(yùn)用所學(xué)知識(shí)解決計(jì)算機(jī)應(yīng)用領(lǐng)域內(nèi)實(shí)際問題能力,進(jìn)一步提高自身動(dòng)手操作能力和用Java語言綜合編程能力,程序調(diào)試技能。2 功能描述2.1 設(shè)計(jì)背景圖形用戶界面簡(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包來創(chuàng)建圖形界面的方法,包括AWT組件、窗口和菜單設(shè)計(jì)、布局管理期以及繪圖操作等。AWT既抽象窗口工具集,用于圖形用戶界面的開發(fā)。AWT的功能包括以下方面:(1)豐富的圖形界面組件。(2)強(qiáng)大的事件處理模型圖

3、形和圖形工具,暴扣形狀、顏色和字體。(3)布局管理器,可以進(jìn)行靈活的窗口布局,設(shè)計(jì)特定窗口的尺寸和屏幕分率。(4)無關(guān)數(shù)據(jù)傳送類,可以通過本地平臺(tái)的剪貼板來進(jìn)行剪切和粘貼操作。打印和無鼠標(biāo)操作。Java.awt是java基本包中最大的一個(gè),其中定義了所有的GUI組件類,以及其他用于構(gòu)造圖形界面的類。2.2 需求分析(1)掃雷游戲分為初級(jí)、中級(jí)和高級(jí)三個(gè)級(jí)別,掃雷英雄榜存儲(chǔ)每個(gè)級(jí)別的最好成績(jī),即挖出全部的地雷且用時(shí)最少者。單擊游戲菜單可以選擇“初級(jí)”、“中級(jí)”和“高級(jí)”或查看“英雄榜”。(2)選擇級(jí)別后將出現(xiàn)相應(yīng)級(jí)別的掃雷區(qū)域,這時(shí)用戶使用鼠標(biāo)左鍵單擊雷區(qū)中的任何一個(gè)方塊便啟動(dòng)計(jì)時(shí)器。(3)用戶

4、要揭開某個(gè)方塊,可單擊它。若所揭方塊下有雷,用戶便輸了這一局,若所揭方塊下無雷,則顯示一個(gè)數(shù)字,該數(shù)字代表方塊的周圍的8個(gè)方塊中共有多少顆雷。(4)如果用戶認(rèn)為某個(gè)方塊下埋著雷,單擊右鍵可以在方塊上表示一個(gè)用戶認(rèn)為是雷的圖標(biāo),即給出一個(gè)掃雷標(biāo)記。用戶每標(biāo)記一個(gè)掃雷標(biāo)記(無論用戶的標(biāo)記是否正確),程序?qū)@示的剩余雷數(shù)減少一個(gè)。(5)掃雷勝利后(用時(shí)最少者),程序彈出保存成績(jī)的對(duì)話框。3 設(shè)計(jì)方案論證3.1 概要設(shè)計(jì)在設(shè)計(jì)掃雷游戲時(shí),需要編寫7個(gè)Java源程序:MineGame.java、MineArea.java、Block.java、BlockView.java、LayMines.java、R

5、ecord.java和ShowRecord.java。掃雷游戲除了需要編寫上述7個(gè)Java源文件所給出的類外,還需要Java系統(tǒng)提供的一些重要的類,如File、JButton和JLabel等類。掃雷游戲所用到的一些重要的類以及之間的組合關(guān)系如圖31所示。圖31 類之間的組與關(guān)系MineGameFileMineAreaShowRecordLayMinesRecordBlockViewBlockJButtonJLabel3.1.1 MineGame.java(主類)MineGame類負(fù)責(zé)創(chuàng)建掃雷游戲機(jī)主窗口,該文件含有main方法,掃雷游戲從該類開始執(zhí)行。MineGame類主要有三種類型的成員:F

6、ile、MineArea和ShowRecord對(duì)象。3.1.2 MineArea.javaMineArea類創(chuàng)建的對(duì)象是MineArea類最重要的成員之一,代表“掃雷區(qū)域”。該類的成員變量中有5個(gè)重要類型的對(duì)象:Block、BlockView、LayMines和Record。3.1.3 Block.javaBlock類是雷區(qū)中“方塊”的類封裝,含有關(guān)于“方塊”的屬性以及操作,即負(fù)責(zé)為雷區(qū)創(chuàng)建代表“方塊”的Block對(duì)象。3.1.4 BlockView.javaBlockView是JPanel容器的子類,BlockView創(chuàng)建的對(duì)象負(fù)責(zé)為Block對(duì)象提供視圖,以便用戶通過該視圖與Block對(duì)象

7、交互。BlockView對(duì)象使用一個(gè)標(biāo)簽和按鈕為Block對(duì)象提供視圖,標(biāo)簽和按鈕按著卡片布局(CardLayout)層疊在一起,默認(rèn)狀態(tài)下按鈕遮擋住標(biāo)簽。當(dāng)用戶單擊按鈕后,如果Block對(duì)象是雷,BlockView對(duì)象中的標(biāo)簽顯示的是雷的圖標(biāo);如果Block對(duì)象不是是雷,標(biāo)簽顯示的是當(dāng)前Block對(duì)象周圍雷的總數(shù)。3.1.5 LayMines.javaLayMines類對(duì)象不需要視圖,在游戲中不需要看見該對(duì)象。LayMines對(duì)象使用隨機(jī)算法指定MineArea對(duì)象中的哪些Block對(duì)象是雷,哪些Block對(duì)象不是雷。3.1.6 Record.javaRecord類是JDialog對(duì)話框的子

8、類,當(dāng)用戶掃雷成功時(shí),Record對(duì)象負(fù)責(zé)保存用戶的成績(jī)到文件。3.1.7 ShowRecord.javaShowRecord類是JDialog對(duì)話框的子類,當(dāng)用戶查看掃雷的最好成功時(shí),ShowRecord對(duì)象負(fù)責(zé)讀取文件數(shù)據(jù)的界面。3.2設(shè)計(jì)流程圖該游戲的整體設(shè)計(jì)流程圖如圖32所示:圖32 游戲設(shè)計(jì)流程圖開始左鍵點(diǎn)擊掃雷該處是雷是數(shù)值表示周圍雷數(shù)確定此處是雷右鍵標(biāo)記所有雷都找 出是優(yōu)勝結(jié)束否否4 詳細(xì)設(shè)計(jì)4.1 MineGame類MineGame類是javax.swing包中JFrame的一個(gè)子類,并實(shí)現(xiàn)了ActionListener接口,該類的主要成員變量和方法: 成員變量1) bar 和

9、fileMenu提供菜單操作,單擊游戲菜單中的選項(xiàng)為“初級(jí)”、“中級(jí)”和“高級(jí)”或“掃雷英雄榜”。2)mineArea是掃雷區(qū)域,提供有關(guān)掃雷的主要功能。3)“英雄榜”負(fù)責(zé)存放三個(gè)級(jí)別的掃雷最好的成績(jī)。4) showHeroRecord負(fù)責(zé)顯示英雄榜中的數(shù)據(jù)。 方法1) MineGame( )是構(gòu)造方法,負(fù)責(zé)完成窗口的初始化。2)actionPerformed(ActionEvent)方法是MineGame類實(shí)現(xiàn)的ActionListener接口中的方法,該方法負(fù)責(zé)執(zhí)行菜單發(fā)出的有關(guān)命令。用戶選擇菜單中項(xiàng)可觸發(fā)ActionListener事件,導(dǎo)致actionPerformed(ActionE

10、vent)方法執(zhí)行相應(yīng)的操作,例如將創(chuàng)建的雷區(qū)設(shè)置為初級(jí)、中級(jí)或高級(jí)等。3) main(String )方法是程序運(yùn)行的入口方法。4.2 MineArea類MineArea類是javax.swing包中JPanel容器的子類,實(shí)現(xiàn)了ActionListener和MouseListener接口,所創(chuàng)建的對(duì)象:mineArea是MineArea類中最重要的成員之一,作為一個(gè)容器添加到窗口的中心。MineArea類的主要成員變量、方法: 成員變量1)block是Block類型的數(shù)組,用來確定雷區(qū)有多少需進(jìn)行掃雷的方塊。2)blockView是BlockView類型的數(shù)組,負(fù)責(zé)為block數(shù)組中的Bl

11、ock對(duì)象提供視圖。3)lay是LayMines類型的對(duì)象,負(fù)責(zé)設(shè)置block數(shù)組中的哪些方塊是雷或不是雷。4)record負(fù)責(zé)提供保存成績(jī)的界面,是一個(gè)對(duì)話框,默認(rèn)不可見。用戶只有掃雷成功后(用時(shí)最少者),才可以看見該對(duì)話框。6)reStart是一個(gè)按鈕對(duì)象,用戶單擊它重新開始游戲。7)time是計(jì)時(shí)器對(duì)象,負(fù)責(zé)計(jì)算用戶的用時(shí)。 方法1)initMineArea(int,int,int,int)方法可根據(jù)參數(shù)提供的數(shù)據(jù)設(shè)置雷區(qū)的寬度、高度、雷的數(shù)量以及雷區(qū)的級(jí)別。2)actionPerformed(ActionEvent)是MineArea類實(shí)現(xiàn)的ActionListener接口中的方法。當(dāng)

12、用戶單擊blockView中的某個(gè)方塊時(shí),actionPerformed(ActionEvent)方法負(fù)責(zé)執(zhí)行有關(guān)算法,例如,當(dāng)用鼠標(biāo)左鍵單擊方塊上的按鈕后,若方塊下有雷,actionPerformed(ActionEvent)方法將使用戶輸?shù)舯揪?,若該方塊下無雷,actionPerformed(ActionEvent)方法將顯示BlockView對(duì)象中的標(biāo)簽,該標(biāo)簽上是一個(gè)數(shù)字,該數(shù)字代表當(dāng)前方塊的周圍的8個(gè)方塊中共有多少顆雷。3)Show( )方法是一個(gè)遞歸方法。actionPerformed(ActionEvent)方法執(zhí)行時(shí)將調(diào)用方法進(jìn)行掃雷。4)mousePressed(MouseE

13、vent)方法是MineArea類實(shí)現(xiàn)的MouseListener接口中的方法,當(dāng)用戶按下鼠標(biāo)右鍵時(shí),actionPerformed(ActionEvent)方法負(fù)責(zé)讓方塊上線是一個(gè)探雷標(biāo)記。5)inquireWin( )方法用來判斷用戶是否掃雷成功,如果成功該方法負(fù)責(zé)讓record對(duì)話框可見。所謂掃雷成功是指不僅找到全部的雷而且用時(shí)最少。4.3 Block類Block類創(chuàng)建的對(duì)象是數(shù)組block的單元中的對(duì)象。Block型數(shù)組block是MineArea類的重要成員之一。Block類的主要成員變量和方法: 成員變量1)name是方塊上的名字。2)aroundMineNumber是方塊周圍雷的

14、數(shù)目。3)mineIcon是方塊上雷的圖標(biāo)。4)isMine用來表示方塊是否是雷。5)isMark用來表示方塊是否被標(biāo)記。6)isOpen用來表示方塊是否被挖開。 方法1)setAroundMineNumber(int)方法用來設(shè)置aroundMineNumber的值。2)getAroundMineNumber()方法用來獲取aroundMineNumber的值。4.4 BlockView類BlockView類是javax.swing包中JPanel類的子類,創(chuàng)建的對(duì)象是數(shù)組blockView的單元中的對(duì)象。blockView是BlockView類的最重要的成員之一。BlockView類的主要

15、成員變量和方法: 成員變量1)blockNameOrIcon用來顯示Block對(duì)象的name、number和mineIcon屬性。2)blockCover用來遮擋card卡片式布局。 方法1)giveView(Block block)方法給參數(shù)指定的Block對(duì)象提供視圖,如果Block對(duì)象的isMine屬性為true,即方塊是雷,那么blockNameOrIcon標(biāo)簽上設(shè)置的文本就是Block對(duì)象的name屬性的值,同時(shí)blockNameOrIcon標(biāo)簽上設(shè)置的圖標(biāo)就是Block對(duì)象的mineIcon制定的圖標(biāo)。如果Block對(duì)象的isMine屬性為false,blockNameOrIcon

16、標(biāo)簽上設(shè)置的文本是Block對(duì)象的aroundMineNumber屬性的值,即周圍雷的數(shù)目。2)seeBlockNameOrIcon( )方法讓用戶看見視圖中的標(biāo)簽,無法看見按鈕。3)seeBlockCover( )方法讓用戶看見視圖中的按鈕,無法看見標(biāo)簽。4.5 LayMines類LayMines類創(chuàng)建的對(duì)象lay是MineArea中最重要的成員。該類的主要成員變量和方法: 成員變量mineIcon用來存放一個(gè)格式gif的圖像。 方法layMinesForBlock(Block,int)方法對(duì)參數(shù)指定的Block數(shù)組進(jìn)行設(shè)置,其中int參數(shù)制定雷的數(shù)目。當(dāng)指定Block數(shù)組中某個(gè)單元中的方塊

17、是雷時(shí),就將該方塊上的圖標(biāo)設(shè)置為mineIcon。當(dāng)指定Block數(shù)組中某個(gè)單元中的方塊不是雷時(shí),就將該方塊上的名字設(shè)置為周圍的雷的數(shù)目。4.6 Record類Record是javax.swing包中JDialog對(duì)話框的子類,并實(shí)現(xiàn)了ActionListener接口。Record創(chuàng)建的對(duì)象:record是MineArea類的成員之一,當(dāng)用戶掃雷成功時(shí),該對(duì)象提供了保存成績(jī)到文件的界面。Record類的主要成員變量、方法: 成員變量1)textName提供用戶掃雷優(yōu)勝者輸出姓名。2)用戶單擊“確定”按鈕,可以保存成績(jī)。 方法1)actionPerformed(ActionEvent)方法是Re

18、cord類實(shí)現(xiàn)的ActionListener接口中的方法,當(dāng)用戶單擊“確定”按鈕后,該方法被執(zhí)行,所執(zhí)行的操作就是獲取用戶輸入的名字和用時(shí),然后調(diào)用writeRecord(String,String)方法將信息寫入到“英雄榜”中。2)writeRecord(String,String)負(fù)責(zé)將有關(guān)信息,例如掃雷的用時(shí)、掃雷的級(jí)別以及掃雷優(yōu)勝者的姓名等信息寫入到“英雄榜”文件。4.7 ShowRecord類ShowRecord是javax.swing包中JDialog對(duì)話框的子類,并實(shí)現(xiàn)了ActionListener接口。ShowRecord創(chuàng)建的對(duì)象showHeroRecord是MineGame

19、類(主類)的成員之一,當(dāng)用戶查看“英雄榜”菜單項(xiàng)時(shí),該對(duì)畫框可見,提供了查看掃雷的最好成績(jī)的界面。ShowRecord類的主要成員變量、方法: 成員變量1)File存放文件的引用。2)用戶單擊“顯示成績(jī)”按鈕,可以查看各個(gè)級(jí)別掃雷的最好成績(jī)。3)用戶單擊“重新記分”按鈕,可以將“英雄榜”中的成績(jī)恢復(fù)為初始值。 方法1)actionPerformed(ActionEvent)方法是ShowRecord類實(shí)現(xiàn)的ActionListener接口中的方法,當(dāng)用戶單擊“顯示成績(jī)”按鈕后,該方法被執(zhí)行,所執(zhí)行的操作就是調(diào)用readAndShow( )方法。2)readAndShow( )方法負(fù)責(zé)讀取存放在

20、文件中的各個(gè)級(jí)別的掃雷最好成績(jī)以及掃雷者姓名,并顯示這些先關(guān)信息。5 運(yùn)行結(jié)果分析掃雷游戲主界面的運(yùn)行效果如圖51所示:圖51 游戲主界面通過MineGame創(chuàng)建的窗口可以選擇游戲的級(jí)別,例如選擇初級(jí),選擇后的窗口界面如圖52所示: 圖52 初級(jí)游戲界 MineArea創(chuàng)建的掃雷區(qū)域效果如圖53和圖54所示。其中圖53為掃雷進(jìn)行中的效果,圖54為掃雷失敗效果:圖53 掃雷進(jìn)行效果圖圖54 掃雷失敗效果圖ShowRecord創(chuàng)建的對(duì)象負(fù)責(zé)提供顯示成績(jī)的界面,效果如圖55所示:圖55 成績(jī)結(jié)果圖6 設(shè)計(jì)體會(huì)通過這次的課程設(shè)計(jì),我對(duì)Java這門語言有了更深刻的理解。其中包括類、對(duì)象、接口、繼承、方法以及Java語言中的常用包等的使用方法,特別是圖形用戶界面里各種組件的創(chuàng)建,事件處理等相關(guān)知識(shí)。使我對(duì)Java語言是一種非常難懂的語言的思想有了極大的改觀。我認(rèn)為Java語言是一門很基礎(chǔ)的語言,所有的計(jì)算機(jī)語言都是相通的,只要一門學(xué)會(huì)了,其他語言就會(huì)很容易學(xué)會(huì)。我之前對(duì)c語言的基礎(chǔ)掌握的并不是很好,所以導(dǎo)致我在學(xué)習(xí)JAVA的時(shí)候有些吃力,通過Java的學(xué)習(xí)也使我翻回去重新學(xué)習(xí)和鞏固了c語言的相關(guān)知識(shí),使我的基礎(chǔ)更加的扎實(shí)。雖然學(xué)會(huì)了Java語言的大部分基礎(chǔ)知識(shí),但要掌握好Java并不是一件簡(jiǎn)單的事情。僅僅把基礎(chǔ)知識(shí)掌握牢固是不夠的,主演是對(duì)程序

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論