




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
《JAVA程序設計》課程設計報告系別:計算機與電子系專業班級:計算機科學與技術0801班學生姓名:XXXXXXX指導教師:XXXX(課程設計時間:2011年6課程設計報告撰寫內容、格式與成績評定一、課程設計報告的撰寫內容與要求1.課程設計總結報告應包括:前言、基本原理或理論、設計計算書或實驗報告、結論、圖紙(框圖、流程圖)、參考資料等;或調查、訪談報告、調查問卷、調查提綱等。2.課程設計總結報告應書寫工整,文句通順、精煉、邏輯性強,圖紙和曲線的繪制應符合規范。3.調查型課程設計應根據調查結果撰寫調查報告。調查報告內容包括:題目、參加時間、地點、方式、過程、調查對象一般情況、調查內容、發現的問題、調查結果和調查分析及體會等。調查報告要求語言簡練、準確;敘述清楚、明白;數據、資料可靠;結論有理、有據。4.圖紙應布局合理,比例恰當,線條分明,字體工整,符合國家制圖標準。5.課程設計報告字數要求:理工、藝術類不少于2000字,其他專業不少于3000字。二、課程設計成績評定1.學生的課程設計成績由平時成績、業務考核成績兩部分組成,均為百分制記分,其中平時成績占總成績的30%,業務考核成績占70%。業務考核含設計報告(計算說明書、調查提綱、調查問卷等)、繪制的圖紙、編制的軟件、制作的模型、撰寫的論文或問卷統計、調查分析等的完成及質量情況;平時成績含設計表現、到課率等。2.教師按學生實際成績(百分制,含平時成績和業務考核成績兩部分)登記并錄入教務MIS系統,由系統自動轉化為“優秀(90~100分)、良好(80~89分)、中等(70~79分)、及格(60~69分)和不及格(60分以下)”五等。目錄1.課程設計目的………………12.課程設計題目描述和要求…………13.課程設計報告內容…………13.1總體設計……………………13.2詳細設計……………………33.3編碼實現……………………73.4系統測試……………………193.5系統運行……………………194.總結…………21參考文獻………………………21(要求:目錄題頭用三號黑體字居中書寫,隔行書寫目錄內容。目錄中各級題序及標題用小四號黑體)
1.課程設計目的本次課程設計旨在加強JAVA程序編譯的能力和對JAVA程序的理解能力,通過本次課設,加強大家的自學能力,為大家做畢業設計做好鋪墊。2.課程設計題目描述和要求2.1掃雷游戲的基本要求Windows7系統提供的掃雷游戲是一個很有趣的游戲。我選的課程設計題目是使用Java語言編寫一個與其類似的掃雷游戲。具體要求如下:(1)玩家可以設置雷數,沒有初級中級高級之分,設置完雷數后點擊開始重新不布置雷區,開始游戲。(2)用戶要揭開某個方塊,可單擊它。若所揭方塊下有淚,用戶便輸了這一局,若所揭方塊下五雷,則顯示一個數字,該數字代表方塊的周圍的8個方塊中共有多少顆雷。(3)如果用戶認為某個方塊下埋著雷,單擊右鍵可以在方塊上標識一個用戶認為是雷的圖標,即給出一個掃雷標記。用戶每標記出一個掃雷標記(無論用戶的標記是否正確),程序將顯示的剩余雷數減少一個。(4)用戶可以選擇標記疑問的方塊,用可以勾選游戲菜單下的標記(或者用快捷鍵alt+G然后M)即可,此時雙擊右鍵并可出現“?”標記。另有顏色選項,當用戶勾選此項時,游戲將以最低圖像像素來顯示。3.課程設計報告內容3.1總體設計(1)總體功能圖圖3-1總體功能圖(2)總體流程圖圖3-2總體流程圖3.2詳細設計(1)掃雷棋盤的布局設計系統的整體布局為:CardLayout布局,采用了菜單、按鈕、面板…等組件,菜單主要包括開始,選擇級別,標記,掃雷英雄榜,退出,按鈕的功能是重新開始新的游戲。(2)雷區的設計MineArea類是javax.swing包中Jpanel容器的子類,實現了ActionListener和MouseListener接口,所創建的對象:mineArea是MineGame類中最重要的成員之一,作為一個容器添加到MineGame窗口的中心。標明MineArea類的主要成員變量、方法以及和MineGame類之間組合關系的UML圖如圖3-3所示。圖3-3MineArea類的UML圖以下是UML圖中有關數據和方法的詳細說明。2.1成員變量(1)block是Block類型的數組,用來確定雷區有多少需進行掃雷的方塊。(2)blockView是BlockView類型的數組,負責為block數組中的Block對象提供視圖。(3)lay是LayMines類型的對象,負責設置block數組中的哪些方塊是雷或不是雷。(4)record負責提供保存成績的界面,是一個對話框,默認不可見。用戶只有掃雷成功后(用時最少),才可以看見對話框。(5)reStart是一個按鈕對象,用戶單擊它重新開始游戲。(6)time是計時器對象,負責計算用戶的用時。2.2方法(1)initMineArea(int,int,int,int)方法可根據參數提供的數據設置雷區的寬度、高度、雷的數目以及雷區的級別。(2)actionPerformed(ActionEvent)是MineArea類實現的ActionListener接口中的方法。當用戶單擊blockView中的某個方塊時,actionPerformed(ActionEvent)方法負責執行有關算法,例如,當用鼠標左鍵單擊方塊上的按鈕后,若該方塊下有雷,actionPerformed(ActionEvent)方法將使用戶輸掉本局,若該方塊下無雷,actionPerformed(ActionEvent)方法將顯示blockView對象中的標簽,該標簽上是一個數字,該數字代表當前方塊的周圍的8個方塊中共有多少顆雷。(3)show()方法是一個遞歸方法。actionPerformed(ActionEvent)方法執行時將調用show方法進行掃雷。(4)mousePressed(MouseEvent)方法是MineArea類實現的MouseListener接口中的方法,當用戶按下鼠標有件事mousePressed(MouseEvent)方法負責讓方塊上顯示一個探雷標記。(5)inquireWin()方法用來判斷用戶是否掃雷成功,如果成功該方法負責讓record對話框可見。所謂掃雷成功是指不僅找到了全部的累而且用時最少。(6)雷區設計流程圖圖3-4雷區設計流程圖2.3音效的設計(1)music類是java.awt包中Frame的子類,通過構造音效聲音方法,在MainFrame主類中,通過ActionListener來監視是否已開始游戲,來決定播放計時聲,之后又通過ActionListener來監視是否踩到雷和是否完成來決定,播放相應的音樂。下面標明music類的主要成員變量、方法以及和MineFrame類之間組合關系的UML圖如圖3-2所示。圖3-5MineArea類的UML圖(2)音效設計流程圖圖3-6音效設計流程圖(3)類之間關系圖圖3-7類之間關系圖3.3.編碼實現importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassFrameextendsJFrame{JTextFieldtext;JLabelnowBomb,setBomb;intBombNum,BlockNum;//當前雷數,當前方塊數intrightBomb,restBomb,restBlock;//找到的地雷數,剩余雷數,剩余方塊數JButtonstart=newJButton("開始");JPanelMenuPamel=newJPanel();JPanelbombPanel=newJPanel();Bomb[][]bombButton;JPanelc;BorderLayoutborderLayout1=newBorderLayout();GridLayoutgridLayout1=newGridLayout();publicFrame(){try{setDefaultCloseOperation(EXIT_ON_CLOSE);jbInit();}catch(Exceptionexception){exception.printStackTrace();}}privatevoidjbInit()throwsException{c=(JPanel)getContentPane();setTitle("掃雷");c.setBackground(Color.WHITE);MenuPamel.setBackground(Color.GRAY);c.setLayout(borderLayout1);setSize(newDimension(600,600));setResizable(false);BlockNum=144;BombNum=10;text=newJTextField("10",3);nowBomb=newJLabel("當前雷數"+":"+BombNum);setBomb=newJLabel("設置地雷數");start.addActionListener(newFrame1_start_actionAdapter(this));MenuPamel.add(setBomb);MenuPamel.add(text);MenuPamel.add(start);MenuPamel.add(nowBomb);c.add(MenuPamel,java.awt.BorderLayout.SOUTH);bombPanel.setLayout(gridLayout1);gridLayout1.setColumns((int)Math.sqrt(BlockNum));gridLayout1.setRows((int)Math.sqrt(BlockNum));bombButton=newBomb[(int)Math.sqrt(BlockNum)][(int)Math.sqrt(BlockNum)];for(inti=0;i<(int)Math.sqrt(BlockNum);i++){for(intj=0;j<(int)Math.sqrt(BlockNum);j++){bombButton[i][j]=newBomb(i,j);//bombButton[i][j].setSize(10,10);bombButton[i][j].setFont(newFont("",Font.PLAIN,14));//設置字體大小bombButton[i][j].setForeground(Color.white);bombButton[i][j].addMouseListener(newBomb_mouseAdapter(this));bombButton[i][j].addActionListener(newBomb_actionAdapter(this));bombPanel.add(bombButton[i][j]);}}c.add(bombPanel,java.awt.BorderLayout.CENTER);startBomb();}/*開始按鈕*/publicvoidstart_actionPerformed(ActionEvente){intnum=Integer.parseInt(text.getText().trim());if(num>=5&&num<50){BombNum=num;startBomb();}elseif(num<5){JOptionPane.showMessageDialog(null,"您設置的地雷數太少了,請重設!","錯誤",JOptionPane.ERROR_MESSAGE);num=10;BombNum=num;}else{JOptionPane.showMessageDialog(null,"您設置的地雷數太多了,請重設!","錯誤",JOptionPane.ERROR_MESSAGE);num=10;BombNum=num;}}/*開始,布雷*/publicvoidstartBomb(){nowBomb.setText("當前雷數"+":"+BombNum);for(inti=0;i<(int)Math.sqrt(BlockNum);i++){for(intj=0;j<(int)Math.sqrt(BlockNum);j++){bombButton[i][j].isBomb=false;bombButton[i][j].isClicked=false;bombButton[i][j].isRight=false;bombButton[i][j].BombFlag=0;bombButton[i][j].BombRoundCount=9;bombButton[i][j].setEnabled(true);bombButton[i][j].setText("");bombButton[i][j].setFont(newFont("",Font.PLAIN,14));//設置字體大小bombButton[i][j].setForeground(Color.BLUE);rightBomb=0;restBomb=BombNum;restBlock=BlockNum-BombNum;}}for(inti=0;i<BombNum;){intx=(int)(Math.random()*(int)(Math.sqrt(BlockNum)-1));inty=(int)(Math.random()*(int)(Math.sqrt(BlockNum)-1));if(bombButton[x][y].isBomb!=true){bombButton[x][y].isBomb=true;i++;}}CountRoundBomb();}/*計算方塊周圍雷數*/publicvoidCountRoundBomb(){for(inti=0;i<(int)Math.sqrt(BlockNum);i++){for(intj=0;j<(int)Math.sqrt(BlockNum);j++){intcount=0;//當需要檢測的單元格本身無地雷的情況下,統計周圍的地雷個數if(bombButton[i][j].isBomb!=true){for(intx=i-1;x<i+2;x++){for(inty=j-1;y<j+2;y++){if((x>=0)&&(y>=0)&&(x<((int)Math.sqrt(BlockNum)))&&(y<((int)Math.sqrt(BlockNum)))){if(bombButton[x][y].isBomb==true){count++;}}}}bombButton[i][j].BombRoundCount=count;}}}}/*是否挖完了所有的雷*/publicvoidisWin(){restBlock=BlockNum-BombNum;for(inti=0;i<(int)Math.sqrt(BlockNum);i++){for(intj=0;j<(int)Math.sqrt(BlockNum);j++){if(bombButton[i][j].isClicked==true){restBlock--;}}}if(rightBomb==BombNum||restBlock==0){JOptionPane.showMessageDialog(this,"您挖完了所有的雷,您勝利了!","勝利",JOptionPane.INFORMATION_MESSAGE);startBomb();}}/**當選中的位置為空,則翻開周圍的地圖**/publicvoidisNull(BombClickedButton){inti,j;i=ClickedButton.num_x;j=ClickedButton.num_y;for(intx=i-1;x<i+2;x++){for(inty=j-1;y<j+2;y++){if(((x!=i)||(y!=j))&&(x>=0)&&(y>=0)&&(x<((int)Math.sqrt(BlockNum)))&&(y<((int)Math.sqrt(BlockNum)))){if(bombButton[x][y].isBomb==false&&bombButton[x][y].isClicked==false&&bombButton[x][y].isRight==false){turn(bombButton[x][y]);}}}}}/*翻開*/publicvoidturn(BombClickedButton){ClickedButton.setEnabled(false);ClickedButton.isClicked=true;if(ClickedButton.BombRoundCount>0){ClickedButton.setText(ClickedButton.BombRoundCount+"");}else{isNull(ClickedButton);}}/*左鍵點擊*/publicvoidactionPerformed(ActionEvente){if(((Bomb)e.getSource()).isClicked==false&&((Bomb)e.getSource()).isRight==false){if(((Bomb)e.getSource()).isBomb==false){turn(((Bomb)e.getSource()));isWin();}else{for(inti=0;i<(int)Math.sqrt(BlockNum);i++){for(intj=0;j<(int)Math.sqrt(BlockNum);j++){if(bombButton[i][j].isBomb==true){bombButton[i][j].setText("b");}}}((Bomb)e.getSource()).setForeground(Color.RED);((Bomb)e.getSource()).setFont(newFont("",Font.BOLD,20));((Bomb)e.getSource()).setText("X");JOptionPane.showMessageDialog(this,"你踩到地雷了,按確定重來","踩到地雷",2);startBomb();}}}/*右鍵點擊*/publicvoidmouseClicked(MouseEvente){BombbombSource=(Bomb)e.getSource();booleanright=SwingUtilities.isRightMouseButton(e);if((right==true)&&(bombSource.isClicked==false)){bombSource.BombFlag=(bombSource.BombFlag+1)%3;if(bombSource.BombFlag==1){if(restBomb>0){bombSource.setForeground(Color.RED);bombSource.setText("F");bombSource.isRight=true;restBomb--;}else{bombSource.BombFlag=0;}}elseif(bombSource.BombFlag==2){restBomb++;bombSource.setText("Q");bombSource.isRight=false;}else{bombSource.setText("");}if(bombSource.isBomb==true){if(bombSource.BombFlag==1){rightBomb++;}elseif(bombSource.BombFlag==2){rightBomb--;}}nowBomb.setText("當前雷數"+":"+restBomb);isWin();}}publicstaticvoidmain(String[]args){Frameframe=newFrame();frame.setVisible(true);}}classFrame1_start_actionAdapterimplementsActionListener{privateFrameadaptee;Frame1_start_actionAdapter(Frameadaptee){this.adaptee=adaptee;}publicvoidactionPerformed(ActionEvente){adaptee.start_actionPerformed(e);}}////////////////////////////classBombextendsJButton{intnum_x,num_y;//第幾號方塊intBombRoundCount;//周圍雷數booleanisBomb;//是否為雷booleanisClicked;//是否被點擊intBombFlag;//探雷標記booleanisRight;//是否點擊右鍵publicBomb(intx,inty){num_x=x;num_y=y;BombFlag=0;BombRoundCount=9;isBomb=false;isClicked=false;isRight=false;}}classBomb_actionAdapterimplementsActionListener{privateFrameadaptee;Bomb_actionAdapter(Framead
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農業市場開拓的策略與技巧研究試題及答案
- 農業職業經理人綜合素質提升試題及答案
- 七年級數學下冊第9章多邊形9.1三角形3三角形的三邊關系教案新版華東師大版
- 收納師的職業挑戰與機遇分析試題及答案
- 深入理解園藝師考試課程試題及答案
- 八年級歷史下冊 第三學習主題 建設中國特色社會主義 第9課 開放的中國走向世界教學設計3 川教版
- 開發區入駐承包合同
- 八年級物理下冊 第十章 壓強和浮力 三 氣體的壓強教學設計 (新版)蘇科版
- 五年級上冊心理健康教育教案-5 向誘惑說“不”| 遼大版
- 教育科研獎勵協議
- 學習課件鑄牢中華民族共同體意識PPT
- 湖南省對口招生考試醫衛專業十年真題(2010-2019年)
- DB32∕T 3916-2020 建筑地基基礎檢測規程
- 華能國際電力股份有限公司本質安全體系管理手冊
- 中青劇院管理手冊
- 《對話大千世界-繪畫創意與實踐》 第1課時 定格青春-向藝術家學創作
- CET46大學英語四六級單詞EXCEL版
- 文化人類學完整版
- 2022年南通市特殊教育崗位教師招聘考試筆試試題及答案解析
- GB/T 13888-2009在開磁路中測量磁性材料矯頑力的方法
- 《劉姥姥人物形象分析》課件-部編版語文九年級上冊
評論
0/150
提交評論