


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、文理學院信息工程學院課程設計報告設計名稱:數據構造課程設計 設計題目:實現一個 N*M的掃雷游戲學生學號: 1402130407專業班級:軟件 13級四班學生:樊秀琳學生成績:指導教師職稱:巧玲講師課題工作時間:2015622至 說明:1、報告中的任務書、進度表由指導教師在課程設計開場前填寫并發給每個 學生。2、學生成績由指導教師根據學生的設計情況給出各項分值及總評成績。3、所有學生必須參加課程設計的辯論環節,凡不參加辯論者,其成績一律 按不及格處理。辯論由指導教師實施。4、報告正文字數一般應不少于3000字,也可由指導教師根據本門綜合設 計的情況另行規定。5、平時表現成績低于6分的學生,取消
2、辯論資格,其本項綜合設計成績按 不及格處理。3 / 40信息工程學院課程設計任務書學生樊秀琳學號1402130407專業班級軟件工程13級四班設計題目實現一個N*M的掃雷游戲容概要:包含要求采用的設計環境或開發環境軟、硬環境,采用的關鍵技術等, 系統/設計所包含的根本功能等程序在eclipse文獻資料:1 躍平.JAVA 2實用教程第二版M.清華大學,20062 躍平.JAVA課程設計第二版M.清華大學,20093 葉核亞數據構造Java第二版M.電子工業大學,2008設計要求:設計所必須到達的根本功能要求、文檔格式要求及其他等工作期限: 設計工作自2015年6月22日至201年7月3日止。指
3、導教師:院長:日期:2015年6月22日信息工程學院課程設計進度安排表學生: 樊秀琳 學號:1402130407 專業: 軟件工程 班級:13級四班起止日期容備注6月22日6月23日下任務書;收集、閱讀、整理相關參考文獻,并進展 歸納和概括總結,完成工程 /任務背景介紹局部文字 容。6月24日6月26日系統功能設計和模塊設計、系統體系構造構建。6月27日6月30日各功能模塊編碼實現,系統各功能模塊調試與維護。7月1日7月2日系統功能集成、系統調試與測試,按照模板要求撰寫 課程設計/工程設計報告。7月3日課程設計/工程設計分組辯論, 提交課程設計/工程設 計報告以及相關文檔,進展成績評定。指導教
4、師簽名:2014 年 6 月 22 日成績評定表學生: 樊秀琳 學號:1402130407 專業:軟件工程班級:13級四班類別合計分值各項分值評分標準實際得分合計得分平時表現1010按時參加設計指導,無違反紀律情況。完成3020按設計任務書的要求完成了全部任務,能完整演示其設計容,符合要求。情況10能對其設計容進展詳細、完整的介紹,并能就指導 教師提出的問題進展正確的答復。報告文字通順,容翔實,論述充分、完整,立論正10確,構造嚴謹合理;報告字數符合相關要求,工整規,整齊劃一。5課題背景介紹清楚,綜述分析充分。報告質量355設計方案合理、可行,論證嚴謹,邏輯性強,具有 說服力。5符號統一;圖表
5、完備、符合規要求。5能對整個設計過程進展全面的總結,得出有價值的結論或結果。5參考文獻數量在2篇以上,格式符合要求,在正文中正確引用。辯論情況2510在規定時間能就所設計的容進展闡述,言簡意明, 重點突出,論點正確,條理清晰。15在規定時間能準確、完整、流利地答復教師所提出 的問題??傇u成績:分指導教師:簽字日期:2014年7月3 日摘要摘 要 :掃雷游戲是 Windows 操作系統自帶的一款小游戲,在過去的幾年里, Windows 操作系統歷經數次換代更新,變得越來越龐大、復雜,功能也越來越強大,但是這款小 游戲依然保持原來的容貌,可見這款小游戲受到越來越多人的喜愛。掃雷游戲是比擬經 典的一
6、款小游戲,實現它的方法很多,可以用很多不同算法設計和語言實現,如 C,C+,VB,JAVA 等。我利用 eclipse 編寫了與它功能相似的掃雷游戲,寓學于樂。程序的功能是隨機生成地雷數,通過鼠標操作玩游戲,不承受鍵盤,按任意鍵完 畢程序。單擊屏幕上的笑臉可以重新開場游戲。所有地雷標出后勝利,當鼠標左鍵單擊 到地雷時提示游戲失敗。其功能類似于 Windows 操作系統自帶的掃雷游戲。論文首先 介紹了進展該游戲課程設計的目的,然后是任務描述和設計的相關要求,最后是最重要 的需求分析和設計方案。重點介紹了在游戲過程中各事件的處理,其中又以鼠標事件和 去除未靠近地雷區方塊這兩方面最為最要, 鼠標事件
7、是利用鼠標所發出的信息了解用戶 的意圖,進而做出相對應的動作。去除未靠近地雷區的方塊較為復雜。關鍵詞:算法設計;事件; EclipseIII / 40目錄摘 要 II第一章 課題背景或緒論、概述 11.1 設計目的 11.2 根本理論依據和主要工作容 1第二章 設計簡介及設計方案論述 22.1 功能需求 22.2 功能模塊 2第三章 詳細設計 33.1 總體設計 33.1.1 總體功能圖 43.1 主要技術 5第四章 設計結果及分析 64.1 設計結果截圖 6參考文獻 9源代碼 112 / 40第一章 課題背景或緒論、概述1.1 設計目的1使學生更深入地理解和掌握該課程中的有關根本概念,程序設
8、計思想和 方法。2培養學生綜合運用所學知識獨立完成課題的能力。 3培養學生勇于探索、嚴謹推理、實事、有錯必改,用實踐來檢驗理論, 全方位考慮問題等科學技術人員應具有的素質。4提高學生對工作認真負責、一絲不茍,對同學團結友愛,協作攻關的根 本素質。5培養學生從資料文獻、科學實驗中獲得知識的能力,提高學生從別人經 歷中找到解決問題的新途徑的悟性,初步培養工程意識和創新能力。6對學生掌握知識的深度、運用理論去處理問題的能力、實驗能力、課程 設計能力、書面及口頭表達能力進展考核。1.2 根本理論依據和主要工作容掃雷游戲主要用了一個 10 行 10 列的二維數組,剛開場利用 random 隨機 布雷。每
9、一個程序最主要的是算法。掃雷游戲算法的重點是一開場統計好每個格 子周圍有多少雷,當鼠標左鍵點在格子上時做出判斷,如果周圍 8 個格子有雷 那么顯示出雷數,如果沒有雷那么顯示空白格在四個角的格子顯示周圍 3 個 格子,其它邊緣的格子顯示周圍 5 個的狀態 ,我們在主函數中用兩個 for 語句 來判斷周圍雷數。我們還加了鼠標處理函數。如果格子上有雷那么調用函數 actionpeformed (),顯示“你踩到地雷了, 按確定重來 ", "踩到地雷,游戲完畢。假設所有的雷都標出,且所有的格子都 處理過,那么調用函數 isWin() ,顯示“您挖完了所有的雷,您勝利了 !"
10、;, "勝利" ,游戲完畢。游戲完畢后,按任意鍵出去。第二章 設計簡介及設計方案論述2.1 功能需求1. 本游戲構造較為簡單,可以自行設置設置雷數,以此來控制掃雷的難度 系數;2. 提示區下方將顯示總雷數,并可以通過點擊右鍵來標明疑似有雷的區域 的數目;3. 單擊鼠標左鍵于未知區域 ,如果未知區域有雷 ,游戲提示:“你踩到地雷了, 按確定重來; 如果沒有雷 ,當需要檢測的單元格本身無地雷的情況下 ,統計周圍 的地雷個數,那么顯示周圍雷數 ,然后判斷是否挖完所有的雷;如果周圍沒雷 那么再查看周圍八個區域是否有雷直到有雷為止,并顯示周圍雷的數目;4. 單擊鼠標右鍵于未知區域,那
11、么顯示F,將其標識有雷。在該位置再次單擊 右鍵那么視為不確定,顯示 Q,單擊第三次,取消設置,Q消失;5. 如果該數字方塊周圍地雷已經完全標識出,雙擊該數字所在方塊,將快速 翻開所有周圍不是地雷的方塊,并顯示,直到有雷為止;6. 將雷全部掃完后 ,會出現一個提示框,顯示游戲勝利。2.2 功能模塊1游戲界面3 鼠標事件4地雷判斷5游戲勝利完畢6游戲失敗完畢7游戲設置地雷數量第三章 詳細設計3.1 總體設計游戲的操作方面主要以鼠標為主, 當鼠標左鍵單擊方塊時即表示翻開方塊, 當鼠標右鍵單擊方塊時即表示標識或疑似地雷, 反復單擊右鍵那么方塊會以 “未 標識一標識一疑似三者關系不斷循環。游戲者可以通過
12、地雷區的數字提示了 解以數字為中心的其周邊八個方格所含的地雷數,假假設翻開的方塊顯示數字 “3,那么表示以其為中心的周邊方塊藏有 3 個地雷。當翻開的方塊不是地雷,且周邊八個方塊也都沒有地雷時,方塊會以被翻開方塊的八個方向將空白方塊翻開。系統的總體設計是對整個系統的構造化設計,包括系統根本功能的設計、系統流程的設計和各個功能模塊的設計等??傮w功能圖掃雷游戲主界面設 置 地 雷 書3.1 主要技術1. 鼠標消息處理函數;actionPerformed(ActionEvent e)mouseClicked(MouseEvent e)2. 分模塊實現較復雜的程序設計 設置地雷數 布雷 計算周圍雷數
13、判斷是否挖完所有雷3. 掃雷游戲算法 開場統計好每個格子周圍有多少雷,當鼠標左鍵點在格子上時做出判斷, 如果周圍 8 個格子有雷那么顯示出雷數,如果沒有雷那么顯示空白格在四個 角的格子顯示周圍 3 個格子,其它邊緣的格子顯示周圍 5 個的狀態 ,我們在主 函數中用兩個 for 語句來判斷周圍雷數。我們還加了鼠標處理函數。第四章設計結果及分析4.1設計結果截圖圖4-1圖4-2總結主要包括:正文小四號字 宋體1對設計工作及所設計的系統特性的概括和總結,所采用的關鍵技術及算法介紹,運行結果分析評價及效率評價,系統還有待于改良的方面等等;2本次課程設計/工程設計的感悟等。8 / 40參考文獻參考文獻米
14、用順序編碼制格式著錄。主要責任者,二名以的,全部列出;超過三名時,后面加“等.字樣參考文獻類型及標識:參考文獻類型專著論文集報紙文早期刊文早學位論文報告標準專利文獻類型標MCNJDRSP其他未作說明的文獻,建議采用單字母“ Z"。參考文獻編排格式注意嚴格使用格式中的符號,特別注意區分“,與1對于專著、論文集、學位論文、報告,格式如下:序號主要責任者文獻題名X 出版地:出版者,出版年起止頁碼. 其中X代表文獻類型標識。2對于期刊文章,格式如下:序號主要責任者文獻題名J 刊名,年,卷期:起止頁碼.3對于報紙文章,格式如下:序號主要責任者文獻題名N 報紙名,出版日期版次.4對于國際、國家標
15、準,格式如下:序號標準編號,標準名稱S.5對于專利,格式如下:序號專利所有者專利題名P 專利國別:專利號,出版日期.6對于未定義類型的文獻序號主要責任者文獻題名Z 出版地:出版者,出版年.例:1參考文獻為書籍的,格式如下:1 胡克. 常用不等式 M. : 大學, 2003.2參考文獻為期刊上的文章的,格式如下:1 孟志青 . 時態數據采掘中的時態型與時間粒度研究 , 大學學報自然科學 版 J. 2000, 22(3): 1-4.注:參考文獻中的標點符號一律采用英文格式下的。源代碼public class Frameextends JFrame JTextField text;JLabel no
16、wBomb, setBomb;int BombNum, BlockNum; /當前雷數 ,當前方塊數11 / 40int rightBomb, restBomb, restBlock; / 找到的地雷數, 剩余雷數, 剩 余方塊數utton start = new utton(" 開場 ");JPanel MenuPamel = new JPanel();JPanel bombPanel = new JPanel();Bomb bombButton;JPanel c;BorderLayout borderLayout1 = new BorderLayout();/Borde
17、rLayout 是 frame 和 Jframe 的默認布局,是邊界布 局管理器GridLayout gridLayout1 = new GridLayout();/ 表格布局管理器 public Frame() try /try代碼塊中編寫可能發生異常的java語句,catch代碼塊中編寫針對異 常進展的處理的代碼。setDefaultCloseOperation(EXIT_ON_CLOSE);Init();catch (Exception exception) exception.printStackTrace();/ 設置界面private void Init() throws Exce
18、ption c = (JPanel) getContentPane();setTitle(" 掃雷 ");c.setBackground(Color.WHITE);MenuPamel.setBackground(Color.GRAY); c.setLayout(borderLayout1);setSize(new Dimension(600, 600);setResizable(false);BlockNum = 144;BombNum = 10;text = new JTextField("10 ", 3);nowBomb = new JLabel(&
19、quot; 當前雷數 " + ":" + BombNum); setBomb = new JLabel(" 設置地雷數 ");start.addActionListener(new Frame1_start_actionAdapter(this);MenuPamel.add(setBomb);MenuPamel.add(text);MenuPamel.add(start);MenuPamel.add(nowBomb);設置窗體 gridLayout1.setColumns( (int) Math.sqrt(BlockNum);gridLayou
20、t1.setRows( (int) Math.sqrt(BlockNum);/ 指定行數bombButton = new Bomb (int) Math.sqrt(BlockNum) (int)Math.sqrt(BlockNum);for (int i = 0; i < (int) Math.sqrt(BlockNum); i+) for (int j = 0; j < (int) Math.sqrt(BlockNum); j+) bombButtonij = new Bomb(i, j);/bombButtonij.setSize(10, 10);bombButtonij.se
21、tFont(new Font("", Font.PLAIN, 14);/ 設置字體大小bombButtonij.setForeground(Color.white);bombButtonij.addMouseListener(newBomb_mouseAdapter(this);bombButtonij.addActionListener(newBomb_actionAdapter(this);bombPanel.add(bombButtonij);startBomb();/* 開場按鈕 */public void start_actionPerformed(ActionE
22、vent e) int num=Integer.parseInt(text.getText().trim();if (num >= 5 && num < 50) BombNum = num;startBomb();else if (num < 5) JOptionPane.showMessageDialog(null, " 您設置的地雷數太少 了,請重設!", " 錯誤",JOptionPane.ERROR_MESSAGE);num=10; BombNum = num;else JOptionPane.showMessa
23、geDialog(null, " 您設置的地雷數太多 了,請重設!", " 錯誤",JOptionPane.ERROR_MESSAGE);num=10;/* 開場 ,布雷 */public void startBomb() nowBomb.setText(" 當前雷數 " + " :" + BombNum);for (int i = 0; i < (int) Math.sqrt(BlockNum); i+) for (int j = 0; j < (int) Math.sqrt(BlockNum); j
24、+) bombButtonij.isBomb = false;bombButtonij.isClicked = false; bombButtonij.isRight = false; bombButtonij.BombFlag = 0; bombButtonij.BombRoundCount = 9; bombButtonij.setEnabled(true); bombButtonij.setText("");bombButtonij.setFont(new Font("", Font.PLAIN, 14);/ 置字體大小bombButtonij.s
25、etForeground(Color.BLUE); rightBomb = 0;restBomb = BombNum;for (int i = 0; i < BombNum; ) int x = (int) (Math.random() * (int) (Math.sqrt(BlockNum) - 1);int y = (int) (Math.random() * (int) (Math.sqrt(BlockNum) - 1);if (bombButtonxy.isBomb != true) bombButtonxy.isBomb = true; i+;CountRoundBomb();
26、/* 計算方塊周圍雷數 */ public void CountRoundBomb() for (int i = 0; i < (int) Math.sqrt(BlockNum); i+) for (int j = 0; j < (int) Math.sqrt(BlockNum); j+) int count = 0;數if (bombButtonij.isBomb != true) for (int x = i - 1; x < i + 2; x+) for (int y = j - 1; y < j + 2; y+) if ( (x >= 0) &&a
27、mp; (y >= 0) && (x < ( (int) Math.sqrt(BlockNum) && (y < ( (int) Math.sqrt(BlockNum) if (bombButtonxy.isBomb = true) count+;bombButtonij.BombRoundCount = count;/* 是否挖完了所有的雷 */ public void isWin() for (int i = 0; i < (int) Math.sqrt(BlockNum); i+) for (int j = 0; j < (i
28、nt) Math.sqrt(BlockNum); j+) if (bombButtonij.isClicked = true) restBlock-;if (rightBomb = BombNum | restBlock = 0) JOptionPane.showMessageDialog(this, " 您挖完了所有的雷,您 勝利了!", " 勝利",JOptionPane.INFORMATION_MESSAGE);startBomb();/* 中選中的位置為空 ,那么翻開周圍的地圖 * */ public void isNull(Bomb Click
29、edButton) int i, j;i = ClickedButton.num_x;j = ClickedButton.num_y;for (int x = i - 1; x < i + 2; x+) for (int y = j - 1; y < j + 2; y+) if ( ( (x != i) | (y != j) && (x >= 0) && (y >= 0)&& (x < ( (int) Math.sqrt(BlockNum)&& (y < ( (int) Math.sqrt(Bl
30、ockNum) if (bombButtonxy.isBomb = false&& bombButtonxy.isClicked = false&& bombButtonxy.isRight = false) turn(bombButtonxy);/* 翻開 */ public void turn(Bomb ClickedButton) ClickedButton.setEnabled(false);ClickedButton.isClicked = true;if (ClickedButton.BombRoundCount > 0) ClickedBut
31、ton.setText(ClickedButton.BombRoundCount + "");else isNull(ClickedButton);/* 左鍵點擊 */ public void actionPerformed(ActionEvent e) if ( ( (Bomb) e.getSource().isClicked = false&& ( (Bomb) e.getSource().isRight = false) if ( ( (Bomb) e.getSource().isBomb = false) turn( ( (Bomb) e.getSo
32、urce();isWin();else for (int i = 0; i < (int) Math.sqrt(BlockNum); i+) for (int j = 0; j < (int) Math.sqrt(BlockNum); j+) if (bombButtonij.isBomb = true) bombButtonij.setText("b");( (Bomb) e.getSource().setForeground(Color.RED);( (Bomb) e.getSource().setFont(new Font("", Fo
33、nt.BOLD, 20);( (Bomb) e.getSource().setText("X");JOptionPane.showMessageDialog(this, "你踩到地雷了,按確定重來", " 踩到地雷", 2);startBomb();/* 右鍵點擊 */public void mouseClicked(MouseEvent e) Bomb bombSource = (Bomb) e.getSource();boolean right = SwingUtilities.isRightMouseButton(e);if (
34、 (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;else if (bombSource.BombFlag = 2) restBomb+;bombSource.setText("Q");bombSource.isRight = false;else bombSource.setText("");if (bombSource.isBomb = true) if (bombSource.BombF
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025企業培訓合同模板
- 2025年戶外廣告牌制作與安裝合同
- 2025家具類標準長期供貨合同
- 2025新版私人汽車租賃合同范本
- 杭州租房合同書協議書范例二零二五年
- 土方工程施工承包協議
- 家裝設計合同書范例
- 班組勞務用工合同書
- 二零二五版試用期計件制勞動合同書
- 2025四川合同范本
- 2025年職業院校技能大賽“健身指導”賽項考試題庫(含答案)
- 2025成都店鋪租賃合同范本
- TCECS24-2020鋼結構防火涂料應用技術規程
- 2025年上海市虹口區二模生物試卷
- (二模)臺州市2025屆高三第二次教學質量評估試題 地理試卷(含答案)
- 社會心理學(西安交通大學)智慧樹知到期末考試答案2024年
- 契稅補貼申請表
- 西山煤電集團白家莊礦煤層開采初步設計
- 魯班獎迎檢分工細化
- 最新金屬軟管設計制造新工藝新技術及性能測試實用手冊
- 渠道項目報備管理規定
評論
0/150
提交評論