




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、成績評定表學生姓名班級學號專業課程設計題目基于Java的掃雷游戲軟件設計評語組長簽字:成績日期20142014 年月日課程設計任務書學院專業學生姓名班級學號課程設計題目基于Java的掃雷游戲軟件設計實踐教學要求與任務:米用 java 技術設計掃雷游戲軟件,設計要求如下:(1)掃雷游戲風味初級、中級和高級三個級別,掃雷英雄榜存儲每個級別的最好成績,即挖出全部的地雷且用時最少者。單擊游戲菜單可以選擇“初級”、“中級”和“高級”或“查看英雄榜”。(2)選擇級別后將出現相應級別的掃雷區域,這時用戶使用鼠標左鍵單擊雷區中的任何一個方塊便啟動計時器。(3)用戶要揭開摸個方塊,可以單擊它。若所揭方塊卜后雷,
2、用戶便輸了這一局,若所揭方塊下無雷,則顯十個數字,該數字代表方塊的周圍的 8 個方塊中共有多少顆雷。(4)如果用戶認為某個方塊下埋著雷,單擊右鍵可以在方塊上表十個用戶認為是雷的圖標,即給出一個掃雷標記。用戶每標記出一個掃雷標記(無論用戶是否正確),程序將顯示的剩余需數減少一個。(5)掃雷勝利后(用時最少者),程序將彈出保存成績的對話框。工作計劃與進度安 AE:第 19 周:布置課程設計任務,查閱資料,分組設計,程序調試。第 20 周:程序調試,編寫課程設計報告,驗收,答辯。指導教師:20142014 年月日專業負責人:20142014 年月日學院教學副院長:20142014 年月日1 .設計目
3、的 42 .1 總體設計 42.1 設計需求42.2 程序功能模塊圖43 .關鍵技術 74 .程序流程 85 .主要源代碼 86 .運行結果及結論 277 .參考文獻 29case 1:. .設計目的通過選擇掃雷游戲軟件設計,這個綜合性的題目作為本次的課程設計。可以讓我們更加熟悉 Java程序設計這門課程,學會熟練使用 Java 這個軟件,加深對 Java 語言的掌握,提高編程水平。同時培養獨立思考和同學間團結合作的能力,為畢業設計以及將來的工作打下堅實的基礎。case 2:.總體設計設計需求在設計掃雷游戲時,需要編寫 7 個源文件:MineGame.java,MineArea.java,Bl
4、ock.java,BlockView.java,LayMines.java,ShowRecord.java,Record.java 除了這七個源文件外,還需要Java 系統提供一些重要的類,如 File,JButton 和 JLabel 等類。程序功能模塊圖2.2 程序功能模塊圖MineGame.java(主類):成員變量bar 和 fileMenu 提供菜單操作,單擊菜單操作中的選項為“初級”,“中級”,“高級”或“掃雷英雄榜;mineArea 是掃雷區域,提供有關雷的主要功能;英雄榜”負責存放三個級別的掃雷最好成績;showHeroRecord 負責顯示英雄榜中的數據方法MineGame(
5、)是構造窗口,負責完成窗口的初始化。ActionPerformed(ActionEvent)方法是 MineGame 類實現的 ActionListener 接口中的方法, 該方法負責執行菜單發出的有關命令。用戶選擇菜單中的菜單項可觸發 ActionEvent 事件,導致actionPerformed(ActionEvent)方法執行相應的操作。Main(String)方法是程序運行的入口方法。MineArea.java 成員變量block 和 Block 類型的數組,用來確定雷區有多少需進行掃雷的方塊;blockView 是 BlockView 類型的數組,負責 block 數組中 Bloc
6、k 對象提供視圖;lay 是 LayMines 類型的對象,負責設置 block 數組中的哪些方塊不是雷;record 負責提供保存成績的界面,是一個對話框,默認為不可見,用戶只有掃雷成功后,才可以看見該對話框;reStart 是一個按鈕對象,用戶單擊它重新開始游戲;time 是計時器對象,負責計算用戶用時。方法initMineArea(int,int,int,int)方法可根據參數提供的數據設置雷區的寬度,高度,類的數目以及雷區的級別。actionPerformed(actionEvent)是 MineArea 類實現的 ActionListener 接口中的方法。當用戶單擊 blockVi
7、ew 中的某個方塊時 actionPerformed(actionEvent)執行有關算法。Show()方法是一個遞歸方法,actionPerformed(actionEvent)方法執行將調用 show 方法進行掃雷。mousePressed(mouseEvent)方法是 MineArea 類實現的 MouseListener 接口中的方法, 當用戶按下鼠標右鍵時,mousePressed(mouseEvent)方法負責讓方塊上顯示一個探雷標記。inquireWin()方法用來判斷用戶掃雷是否成功,如果成功該方法負責讓 record 對話框可見。Block.java 成員變量name 方塊上
8、的名字aroundMineNumber 是方塊周圍雷的數目mineicon 是方塊上雷的圖標isMine 用來表示方塊是否是雷isMark 用來表示方塊是否被標記isOpen 用來表本方塊是否被挖開方法setAroundMineNumber(int)方法用來設置 aroundMineNumber 的值;getAroundMineNumber()方法用來獲取 aroundMineNumber 的值。BlockView.java成員變量blockNameOricon 用 來 顯 示 Block 對 象 的 namenumber 和 mineicon 屬 性 ; blockCover 用 來 遮 擋
9、blockNameOricon;card 卡片式布局。方法giveView(Blockblock)方法給參數指定的 Block 對象提供視圖;seeBlockNameOricon()方法讓用戶看見視圖中的標簽,無法看見按鈕;seeBlockCover()方法讓用戶看見視圖中的按鈕,無法看見標簽。LayMines.java成員變量mineicon 用來存放一個格式為 gif 的圖像。方法layMinesForBlock(Block,int)方法對參數指定的 Block 數組進行設置,其中 int 參數指定雷的數目。Record.java成員變量textName 提供用戶掃雷優勝者出入姓名;用戶單
10、擊“確定”按鈕,可以保存成績。方法actionPerformed(ActionEvent)方法是 Record 類實現的 ActionListener 接口中的方法,當用戶單擊“確定”按鈕后,該方法被執行,所執行的操作就是獲取用戶輸入的名字和用時,然后調用writeRecord(String,String)方法將信息寫入英雄榜中;writeRecord(String,String)負責將有關信息寫入“英雄榜”文件。ShowRecord:成員變量file 存放文件的引用,用戶單擊“顯示成績”按鈕,可以查看各個級別的最好成績;用戶單擊“重新計分”按鈕,可以將“英雄榜”中的成績恢復為初始值。方法ac
11、tionPerformed(ActionEvent)方法是 ShowRecord 類實現的 ActionListener 接口中的方法,當用戶單擊“顯示成績”按鈕后,該方法被執行,所執行的操作就是調用 readAndShow()方法;readAndShow()方法負責讀取存放在文件中的各個級別的掃雷最好成績以及掃雷者姓名,并顯示這些相關信息。.關鍵技術實現窗口的初始化:利用 MineGame.java 實現MineGame()是構造窗口,負責完成窗口的初始化。ActionPerformed(ActionEvent)方法是 MineGame 類實現的 ActionListener 接口中的方法,
12、該方法負責執行菜單發出的有關命令。用戶選擇菜單中的菜單項可觸發 ActionEvent 事件,導致actionPerformed(ActionEvent)方法執行相應的操作。利用產生隨機數的方法完成游戲中隨機布雷的要求:利用 MineArea.java 實現initMineArea(int,int,int,int)方法可根據參數提供的數據設置雷區的寬度,高度,類的數目以及雷區的級別。actionPerformed(actionEvent)是 MineArea 類實現的 ActionListener 接口中的方法。當用戶單擊 blockView 中的某個方塊時 actionPerformed(a
13、ctionEvent)執行有關算法。Show()方法是一個遞歸方法,actionPerformed(actionEvent)方法執行將調用 show 方法進行掃雷。mousePressed(mouseEvent)方法是 MineArea 類實現的 MouseListener 接口中的方法, 當用戶按下鼠標右鍵時,mousePressed(mouseEvent)方法負責讓方塊上顯示一個探雷標記。inquireWin()方法用來判斷用戶掃雷是否成功,如果成功該方法負責讓 record 對話框可見。.程序流程4.1 程序流程圖打開程序后點重新開始,游戲定義并初始化,用戶開始進行游戲,計數器開始統計用
14、戶點擊次數并記錄,判斷用戶是否中雷,否繼續游戲,是結束游戲并處理結果.主要源代碼importjava.awt.event.*;importjava.awt.*;importjavax.swing.*;importjavax.swing.border.*;importjava.util.*;importjava.io.*;publicclassMineGameextendsJFrameimplementsActionListenerJMenuBarbar;JMenufileMenu;JMenuItem 初級,中級,高級,掃雷英雄榜;MineAreamineArea=null;File 英雄榜=n
15、ewFile(英雄榜.txt);Hashtablehashtable=null;ShowRecordshowHeroRecord=null;MineGame()mineArea=newMineArea(16,16,40,1);add(mineArea,BorderLayout.CENTER);bar=newJMenuBar();fileMenu=newJMenu(游戲);初級=newJMenuItem(初級);中級=newJMenuItem(中級);高級=newJMenuItem(高級);掃雷英雄榜=newJMenuItem(掃雷英雄榜);fileMenu.add(初級);fileMenu.a
16、dd(中級);fileMenu.add(高級);fileMenu.add(掃雷英雄榜);bar.add(fileMenu);setJMenuBar(bar);初級.addActionListener(this);中級.addActionListener(this);高級.addActionListener(this);掃雷英雄榜.addActionListener(this);hashtable=newHashtable();hashtable.put(初級,初級#+999+#匿名);hashtable.put(中級,中級#+999+#匿名)if(!英雄榜.exists()tryFileOut
17、putStreamout=newFileOutputStream(ObjectOutputStreamobjectOut=newObjectOutputStream(out);objectOut.wr 讓 eObject(hashtable);objectOut.close();out.close();catch(IOExceptione)showHeroRecord=newShowRecord(this,hashtable);setBounds(100,100,280,380);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_
18、CLOSE);validate();publicvoidactionPerformed(ActionEvente)if(e.getSource()=初級)mineArea.initMineArea(8,8,10,1);setBounds(100,100,200,280);if(e.getSource()=中級)mineArea.initMineArea(16,16,40,2);setBounds(100,100,280,380);if(e.getSource()=高級)mineArea.initMineArea(22,22,99,3);setBounds(100,100,350,390);if
19、(e.getSource()=掃雷英雄榜)hashtable.put(高級,高級#+999+#匿名);英雄榜);if(showHeroRecord!=null)showHeroRecord.setVisible(true);)validate();)publicstaticvoidmain(Stringargs兒newMineGame();)importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassMineAreaextendsJPanelimplementsActionListener,MouseListen
20、erJButtonreStart;Blockblock;BlockViewblockView;LayMineslay;introw,colum,mineCount,markMount;雷區的行數、列數以及地雷個數和用戶給出的標記數ImageIconmark;intgrade;JPanelpCenter,pNorth;JTextFieldshowTime,showMarkedMineCount;/顯示用時以及標記數Timertime;/計時器intspendTime=0;Recordrecord;publicMineArea(introw,intcolum,intmineCount,intgra
21、de)reStart=newJButton(重新開始);mark=newImageIcon(mark.gif);/探雷標記time=newTimer(1000,this);showTime=newJTextField(5);showMarkedMineCount=newJTextField(5);showTime.setHorizontalAlignment(JTextField.CENTER);showMarkedMineCount.setHorizontalAlignment(JTextField.CENTER);showMarkedMineCount.setFont(newFont(Ar
22、ial,Font.BOLD,16);showTime.setFont(newFont(Arial,Font.BOLD,16);pCenter=newJPanel();pNorth=newJPanel();lay=newLayMines();initMineArea(row,colum,mineCount,grade);/初始化雷區,見下面的 LayMines()reStart.addActionListener(this);pNorth.add(showMarkedMineCount);pNorth.add(reStart);pNorth.add(showTime);setLayout(new
23、BorderLayout();add(pNorth,BorderLayout.NORTH);add(pCenter,BorderLayout.CENTER);publicvoidinitMineArea(introw,intcolum,intmineCount,intgrade)pCenter.removeAll();spendTime=0;markMount=mineCount;this.row=row;this.colum=colum;this.mineCount=mineCount;this.grade=grade;block=newBlockrowcolum;for(inti=0;ir
24、ow;i+)for(intj=0;jcolum;j+)blockij=newBlock();lay.layMinesForBlock(block,mineCount);blockView=newBlockViewrowcolum;pCenter.setLayout(newGridLayout(row,colum);for(inti=0;irow;i+)for(intj=0;jcolum;j+)blockViewij=newBlockView();blockViewij.giveView(blockij);/給 blockijpCenter.add(blockViewij);blockViewi
25、j.getBlockCover().addActionListener(this);blockViewij.getBlockCover().addMouseListener(this);blockViewij.seeBlockCover();blockViewij.getBlockCover().setEnabled(true);blockViewij.getBlockCover().setIcon(null);showMarkedMineCount.setText(+markMount);validate();publicvoidsetRow(introw)this.row=row;publ
26、icvoidsetColum(intcolum)this.colum=colum;publicvoidsetMineCount(intmineCount)this.mineCount=mineCount;publicvoidsetGrade(intgrade)this.grade=grade;publicvoidactionPerformed(ActionEvente)if(e.getSource()!=reStart&e.getSource()!=time)time.start();intm=-1,n=-1;提供視圖for(inti=0;irow;i+)for(intj=0;jcol
27、um;j+)if(e.getSource()=blockViewij.getBlockCover()m=i;n=j;break;if(blockmn.isMine()for(inti=0;irow;i+)for(intj=0;j0&blockmn.getIsOpen(尸 false)blockViewmn.seeBlockNameOrIcon();blockmn.setIsOpen(true);return;elseif(blockmn.getAroundMineNumber()=0&blockmn.getIsOpen()=false)blockViewmn.seeBlockN
28、ameOrIcon();blockmn.setIsOpen(true);for(intk=Math.max(m-1,0);k=Math.min(m+1,row-1);k+)for(intt=Math.max(n-1,0);t=Math.min(n+1,colum-1);t+)show(k,t);publicvoidmousePressed(MouseEvente)JButtonsource=(JButton)e.getSource();for(inti=0;irow;i+)for(intj=0;jcolum;j+)if(e.getModifiers()=InputEvent.BUTTON3_M
29、ASK&source=blockViewij.getBlockCover()if(blockij.getIsMark()source.setIcon(null);blockij.setIsMark(false);markMount=markMount+1;showMarkedMineCount.setText(+markMount);)elsesource.setIcon(mark);blockij.setIsMark(true);markMount=markMount-1;showMarkedMineCount.setText(+markMount);)publicvoidinqui
30、reWin()intnumber=0;for(inti=0;irow;i+)for(intj=0;j=1)blockNameOrIcon.setText(+n);elseblockNameOrIcon.setText();publicvoidseeBlockNameOrIcon()card.show(this,view);validate();publicvoidseeBlockCover()card.show(this,cover);validate();publicJButtongetBlockCover()returnblockCover;importjava.util.*;import
31、javax.swing.*;publicclassLayMinesImageiconmineIcon;LayMines()mineicon=newImageIcon(mine.gif);)publicvoidlayMinesForBlock(Blockblock,intmineCount)introw=block.length;intcolumn=block0.length;LinkedListlist=newLinkedList();for(inti=0;irow;i+)for(intj=0;j0)intsize=list.size();/list 返回節點的個數intrandomIndex
32、=(int)(Math.random()*size);Blockb=list.get(randomIndex);b.setIsMine(true);b.setName(雷)b.setMineIcon(mineIcon);list.remove(randomIndex);/list 刪除索弓 I 值為 randomIndex 的節點mineCount-;)for(inti=0;irow;i+)for(intj=0;jcolumn;j+)if(blockij.isMine()blockij.setIsOpen(false);blockij.setIsMark(false);)elseintmineNumber=0;for(intk=Math.max(i-1,0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學校音樂班管理制度
- 學生接送點管理制度
- 安全確認制管理制度
- 安服部安全管理制度
- 安置點日常管理制度
- 宗教活動所管理制度
- 實訓室各種管理制度
- 實驗室采購管理制度
- 客房服務間管理制度
- 室內潛水館管理制度
- 2024年6月英語四級考試真題及答案(第1套)
- 2024中國糖尿病合并慢性腎臟病臨床管理共識解讀
- 糖尿病的中醫科普
- 寺院承包合同范例
- JJF(蘇) 50-2024 水泥混凝土稠度試驗儀校準規范
- 冷庫建設項目可行性研究報告5篇
- 三年級下冊混合計算題100道及答案
- 口腔護理保健課件
- 云南省部分學校2024-2025學年高三上學期9月聯考試題 生物 含答案
- 網絡傳播概論(第5版)課件 第四章 網絡傳播的多重策略
- 廣東省2025屆高三第一次調研考試 化學試卷(含答案)
評論
0/150
提交評論