軟件技術綜合訓練課程設計-貪吃蛇游戲設計.docx_第1頁
軟件技術綜合訓練課程設計-貪吃蛇游戲設計.docx_第2頁
軟件技術綜合訓練課程設計-貪吃蛇游戲設計.docx_第3頁
軟件技術綜合訓練課程設計-貪吃蛇游戲設計.docx_第4頁
軟件技術綜合訓練課程設計-貪吃蛇游戲設計.docx_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

*實踐教學*軟件學院2016年春季學期軟件技術綜合訓練課程設計 說明書題 目: 貪吃蛇游戲設計 專業(yè)班級: 2015級軟件技術2班 姓 名: 學 號: 指導教師: 成 績: i目錄摘 要21 序言31 .1 課題的目標和意義32 需求分析42.1需求前提42.2開發(fā)環(huán)境42.3用例圖53 總體設計63.1程序概述63.2 總設計模塊的劃分64 詳細設計84.1設計思路84.2程序流程圖84.3類、方法、屬性說明105 程序調試與測試115.1程序異常處理136 數據結構算法設計:146.1圖型結構基本算法實現147 設計體會與總結178 參考文獻189 程序代碼19摘 要Java最初被命名為Oak,目標設定在家用電器等小型系統(tǒng)的編程語言,來解決諸如電視機、電話、鬧鐘、烤面包機等家用電器的控制和通訊問題。由于這些智能化家電的市場需求沒有預期的高,Sun放棄了該項計劃。就在Oak幾近失敗之時,隨著互聯網的發(fā)展,Sun看到了Oak在計算機網絡上的廣闊應用前景。于是改造了Oak,以“Java”的名稱正式發(fā)布。 Sun 公司對 Java 編程語言的解釋是:Java 編程語言是個簡單、面向對象、分布式、解釋性、健壯、安全與系統(tǒng)無關、可移植、高性能、多線程和動態(tài)的語言。貪吃蛇游戲設計與實現,主要分為以下二個模塊:游戲主界面模塊和游戲控制模塊。在此只實現游戲的游戲主界面模塊、游戲控制模塊。并且只是實現移動速度、暫停、重新開始等功能。關鍵詞:java、多線程、貪吃蛇。1 序言1 .1 課題的目標和意義在市場JAVA程序設計是計算機相關專業(yè)的必修專業(yè)基礎課程,其實踐性、應用性很強。實踐教學環(huán)節(jié)是必不可少的一個重要環(huán)節(jié)。本課程的程序設計專題實際是計算機相關專業(yè)學生學習完JAVA程序設計課程后,進行的一次全面的綜合訓練,JAVA程序設計的設計目的是加深對理論教學內容的理解和掌握,使學生較系統(tǒng)地掌握程序設計及其在網絡開發(fā)中的廣泛應用,基本方法及技巧,為學生綜合運用所學知識,利用軟件工程為基礎進行軟件開發(fā)、并在實踐應用方面打下一定基礎。2 需求分析2.1需求前提 經過兩天在圖書館以及網絡上查閱的資料,然后提出這次課程設計的目標貪吃蛇游戲的設計。然后接下來就是查閱更多的資料,制定接下來的詳細計劃,最終計劃用兩周的時間完成此次課程設計提出的案例。2.2開發(fā)環(huán)境硬件環(huán)境:CPU:Intel Pentium(R)4主頻:2.40GHz軟件環(huán)境:操作系統(tǒng):Windows XP編程環(huán)境: JDK 1.6開發(fā)工具:Eclipse jdk2.3用例圖單擊“F2”按鈕, 游戲開始,蛇開始隨機。鍵盤操作: 向上左移右移向下沒有吃到食物且蛇碰到邊界單擊確定游戲結束游戲中途欲中斷,稍后繼續(xù)游單F3暫停游戲 游戲開始再次單擊開始F3按鈕,游戲恢復3 總體設計3.1程序概述本程序是一個利用Java應用軟件制作的貪食蛇小游戲。在游戲過程中,用戶通過點擊小鍵盤區(qū)的方向鍵來控制蛇的運行方向;游戲運行過程中,如果想暫停,只需要按F3鍵即可。重新開始游戲的按鍵為F2。當蛇沒有吃到食物且碰到墻壁或自己的身體時游戲結束。本程序的另一個功能是在程序運行窗口的左上角顯示,用戶在游戲過程中的移動和長度。3.2 總設計模塊的劃分根據游戲需求中游戲所要實現的功能,整個游戲分為二個模塊進行具體的設計,如圖2所示。貪吃蛇游戲游戲主界面模塊游戲控制模塊圖2.設計總模塊 游戲控制模塊的主要框架如圖3所示。游戲控制模塊游戲的暫停功能游戲的重新開始游戲的退出圖3.控制模塊框架游戲暫??刂疲狐c擊“F3”按鈕,游戲暫停;再單擊,游戲繼續(xù)。游戲重新開始控制:點擊“F2”鍵后,點擊確定,即游戲重新開始。游戲退出控制:點擊“F4”鍵好,點擊確定,退出游戲界面。4 詳細設計4.1設計思路貪吃蛇游戲設計與實現,主要分為以下二個模塊:游戲主界面模塊和游戲控制模塊。在此只實現游戲的游戲主界面模塊、游戲控制模塊。并且只是實現移動速度、暫停、重新開始等功能。游戲主界面模塊:游戲的主界面是進入游戲后,能夠給玩家第一感官的部分,主要包括游戲圖形區(qū)域界面、游戲的速度選擇更新界面、新生方塊的預覽、暫停游戲按鈕、重新開始游戲按鈕。從很大程度上決定了玩家對游戲的興趣問題,因此,游戲的主界面應該力求美觀,爽心悅目。游戲控制模塊:這個模塊是游戲的中心環(huán)節(jié),主要完成控制游戲的開始、暫停、重新開始等功能。為了能夠給玩家一個很好的游戲環(huán)境,這部分應該做到易懂、易操作。本設計所開發(fā)的是基于Java的一個貪吃蛇游戲軟件,主要實現游戲的速度控制、游戲的暫停、游戲的退出等功能,分為: 游戲主界面模塊、游戲控制模塊以二個模塊。4.2程序流程圖本次游戲設計的處理流程如圖1所示。單擊“F2”按鈕, 游戲開始,蛇開始隨機。鍵盤操作: 向上左移右移向下沒有吃到食物且蛇碰到邊界單擊確定游戲結束游戲中途欲中斷,稍后繼續(xù)游單F3暫停游戲進入游戲畫面再次單擊開始F3按鈕,游戲恢復圖1.程序流程圖4.3類、方法、屬性說明(1)成員變量表1 主要成員變量(屬性)成員變量描述變量類型名稱文件菜單中子菜單“新建”JMenuItemmFile_New編輯菜單中子菜單“撤消”JMenuItemmEdit_Undo格式菜單中子菜單“顏色”JMenuformatMenu_Color幫助菜單中子菜單“幫助主題”MenuItemmHelp_HelpTopics(2)方法表2 主要方法方法名功能備注Notepad4()描述記事本無Text.setBackground(Color.black)設置編輯區(qū)默認背景色無Text.setForeground(Color.black)設置編輯區(qū)默認前景色無圖8 進銷存管理系統(tǒng)E-R圖5 程序調試與測試本程序在運行后,能夠正常的相應按鍵事件。由于程序的主要部分已經集成為一個對象SnakeModel,所以利用鍵盤就可以實現操作。蛇前行的過程中,可以任意向其左或右方向改變方向。點擊F3鍵后游戲就暫停了。點擊F2鍵游戲重新開始。點擊F4游戲退出。運行結果如下圖4所示: 圖4 程序運行圖 當蛇沒有吃到食物且碰到邊界或碰撞到自己的身體時,游戲結束。如果想重新開始即點擊“確定”后按F2鍵,運行結果如下圖5所示:圖5 重新開始圖5.1程序異常處理在蛇的運行線程過程中,當蛇撞到墻或自己的身體時,將拋出一個Exception類的異常對象,然后使用try-catch去捕捉這個異常,異常的處理如下:try Thread.sleep(timeInterval); catch(Exception e) break; 6 數據結構算法設計:6.1圖型結構基本算法實現import java.util.LinkedList;/鏈式棧import java.util.Queue;/隊列/圖的遍歷(鄰接矩陣)public class Graph /曲線圖,圖表-鄰接矩陣存儲圖private int number=9;/頂點數private boolean flag;/(布爾值,一種數據類型)-頂點private int edges1=0,1,0,0,0,1,1,0,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,0/記錄頂點數是否被訪問;private String vertexs=A,B,C,D,E,F,G,H,I;/頂點 private int edges= 0,1,0,0,0,1,1,0,0, 1,0,1,0,0,0,1,0,1, 0,1,0,1,0,0,0,0,1, 0,0,1,0,1,0,1,1,1, 0,0,0,1,0,1,0,1,0, 1,0,0,0,1,0,1,0,0, 0,1,0,1,0,1,0,1,0, 0,0,0,1,1,0,1,0,0, 0,1,1,1,0,0,0,0,0 ; void DFSTraverse()/圖的深度遍歷操作(遞歸) flag=new booleannumber; for(int i=0;inumber;i+) if(flagi=false)/當前頂點沒有被訪問 DFS(i); private void DFS(int i) /圖的深度優(yōu)先遞歸算法 flagi=true;/第i個頂點被訪問 System.out.print(vertexsi+ ); for(int j=0;jnumber;j+) if(flagj=false & edges1ij=1) DFS(j); void BFSTraverse()/圖的遍歷操作flag=new booleannumber;Queue queue=new LinkedList();for(int i=0;inumber;i+)if (flagi=false) flagi=true;System.out.print(vertexsi+ );queue.add(i);while (!queue.isEmpty() int j=queue.poll();for (int k=0;knumber;k+)if (edges1jk=1 & flagk=false)flagk=true;System.out.print(vertexsk+ );queue.add(k); public static void main(Stringargs)/測試Graph graph=new Graph();System.out.println(圖的深度遍歷(遞歸):);graph.DFSTraverse();System.out.println(n-);System.out.println(圖的廣度遍歷操作:);graph.BFSTraverse();算法分析: 廣度優(yōu)先搜索A,B,F,G,C,I,E,D,H. 深度優(yōu)先搜索A,B,C,D,E,F,G,H,I.從上述算法可以看出,首先用哈夫曼編碼構造一顆哈夫曼樹,對哈夫曼樹表示的圖進行的深度優(yōu)先搜索遍歷時,需要掃描樹中的每個元素,每一個頂點最多調用一次,一個頂點一旦被訪問,就不在從該定點發(fā)出搜索,圖遍歷的過中實際就是查找每一個頂點的鄰接點的過程,所以其時間復雜度為O(n2);空間復雜度為O(n).進行廣度優(yōu)先搜索,每一個頂點最多入隊,出隊一次,廣度優(yōu)先搜索遍歷的過程就是尋找隊列中頂點的鄰接點過程,所以其時間復雜度為O(n2);空間復雜度為O(n).7 設計體會與總結通過一個學期的學習已經結束,我從一個連軟件都不會用的愣頭青到現在已能完成課程設計。這次課程設計,我深深地認識到自己知識的單薄,多謝老師和同學的幫助,讓我能順利完成課程設計。雖然還有很多不足,但也學到了很多。尤其對軟件開發(fā)過程有了更清晰地了解,首先是問題的定義,需求分析,然后是概要設計,詳細設計等,并對軟件測試的方法,手段有了較深的理解,同時對企業(yè)的流程有了一個系統(tǒng)的認識。我也認真學習了與系統(tǒng)相關的的知識,極大地拓寬了我的知識面,真心感到收獲不小。在短短的時間里,我還學到了更多的理論知識,擴展了知識面,提高了自己的實際操作能力;而且學會了如何去學習新的知識,學會了面對困難和挑戰(zhàn),學會了團結合作,互助互利。為了使游戲能夠實現自己預先的構想,我通過上網和去圖書館找程序,比較好的流程圖及功能模塊,不斷閱讀修改代碼使程序達到預期所要實現的目標,完成課程設計后,可以感覺到自己對Java程序的又有了新的認識??傊?,通過本次的課程設計,使我平時學到的理論知識得到了很好地升華,理論與實際得到一次很好的結合,為我今后參加工作打下了堅實的基礎,使我受益匪淺。8 參考文獻1 孫衛(wèi)琴精通Struts:基于MVC的JavaWeb的設計與開發(fā)M北京:電子工業(yè)出版社,20042楊章偉. 精通SQL語言與數據庫管理M. 人民郵電出版社, 20083范曉平UML建模實例詳解M北京:清華大學出版社,20054林智揚,范明翔. 深入淺出Java Swing程序設計M.中國鐵道出版社社,2005年3月5王珊, 薩師煊. 數據庫系統(tǒng)概論(第四版) M. 高等教育出版社, 20076楊章偉. 精通SQL語言與數據庫管理M. 人民郵電出版社, 20087李海鳳,李宏力,孫華峰電子商務網站實訓教程M.中國鐵道出版社,20068周警偉.MVC在Web系統(tǒng)中的模式與應用J/OL.http:/ 9閻宏Java與模式M 北京:機械出版社,200510Bruce Eckel,Think in Java 2nd EditionMPrentice Hall11黃平主編.數據庫技術. 北京:機械工業(yè)出版社,200212袁枚等編著.網絡數據庫應用教程.北京:人民郵電出版社,2001.113張孝祥.javascript網頁開發(fā).北京:清華大學出版社,2004.1114薛華成.管理信息系統(tǒng).北京:清華大學出版社,2004.99 程序代碼import java.awt.*;import javax.swing.*;import java.util.*;import java.awt.event.*;public class She extends JFrame implements ActionListener, WindowListener /* * */private static final long serialVersionUID = 1L;JLabel bt1; JLabel bt2; MyPaint mp; JMenuItem kaishi; JMenuItem zanting; JMenuItem tuichu; JRadioButton chu; JRadioButton zhong; JRadioButton gao; JRadioButton chao; JMenuItem guanyu; Font f; public She() f = new Font(宋體, Font.PLAIN, 12); mp = new MyPaint(); mp.setShe(this); JMenuBar caidan = new JMenuBar(); JMenu shezhi = new JMenu(設置); shezhi.setFont(f); JMenu nandu = new JMenu(難度); nandu.setFont(f); JMenu bangzhu = new JMenu(幫助); bangzhu.setFont(f); caidan.add(shezhi); caidan.add(nandu); caidan.add(bangzhu); kaishi = new JMenuItem(開始游戲 F2); kaishi.setFont(f); kaishi.addActionListener(this); zanting = new JMenuItem(暫停/繼續(xù) F3); zanting.setFont(f); zanting.addActionListener(this); tuichu = new JMenuItem(退出 F4); tuichu.setFont(f); tuichu.addActionListener(this); chu = new JRadioButton(初級,最快速度195, true); chu.setFont(f); chu.addActionListener(this); zhong = new JRadioButton(中級,最快速度225); zhong.setFont(f); zhong.addActionListener(this); gao = new JRadioButton(高級,最快速度255); gao.setFont(f); gao.addActionListener(this); chao = new JRadioButton(超級,最快速度275); chao.setFont(f); chao.addActionListener(this); ButtonGroup bg = new ButtonGroup(); bg.add(chu); bg.add(zhong); bg.add(gao); bg.add(chao); nandu.add(chu); nandu.add(zhong); nandu.add(gao); nandu.add(chao); guanyu = new JMenuItem(關于); guanyu.setFont(f); guanyu.addActionListener(this); shezhi.add(kaishi); shezhi.add(zanting); shezhi.add(tuichu); bangzhu.add(guanyu); bt1 = new JLabel(長度:0); bt1.setFont(f); bt2 = new JLabel(移動:5); bt2.setFont(f); JPanel p = new JPanel(); p.setLayout(new GridLayout(1, 2); p.add(bt1); p.add(bt2); this.addWindowListener(this);/添加窗體監(jiān)聽器 this.setJMenuBar(caidan); this.add(p, BorderLayout.NORTH); this.add(mp); this.add(new JLabel(), BorderLayout.WEST); this.setSize(335, 385); this.setResizable(false); this.setLocation(300, 150); this.setTitle(MyPaint); this.setVisible(true); public void setDS(int a, int b) bt1.setText(長度: + a); bt2.setText(移動: + b); public void setChu() chu.setSelected(true); mp.setSD(300, 110); this.setDS(0, 305 - 300); chu.setEnabled(true); zhong.setEnabled(true); gao.setEnabled(true); chao.setEnabled(true); public void setNanDu() chu.setEnabled(false); zhong.setEnabled(false); gao.setEnabled(false); chao.setEnabled(false); public void actionPerformed(ActionEvent e) if (e.getSource() = zanting) mp.setZanTing(); else if (e.getSource() = kaishi) mp.setKaiShi(); else if (e.getSource() = tuichu) mp.setTuiChu(); else if (e.getSource() = guanyu) JLabel gy = new JLabel(小游戲 貪吃蛇 V1.0); gy.setFont(f); JOptionPane.showMessageDialog(this, gy); else if (e.getSource() = chu) mp.setSD(300, 110); this.setDS(0, 305 - 300); else if (e.getSource() = zhong) mp.setSD(250, 80); this.setDS(0, 305 - 250); else if (e.getSource() = gao) mp.setSD(200, 50); this.setDS(0, 305 - 200); else if (e.getSource() = chao) mp.setSD(150, 30); this.setDS(0, 305 - 150); public static void main(String args) new She(); /* * Method windowOpened * * * param e * */ public void windowOpened(WindowEvent e) / TODO: Add your code here public void windowClosing(WindowEvent e) System.exit(0); public void windowClosed(WindowEvent e) / TODO: Add your code here public void windowIconified(WindowEvent e) / TODO: Add your code here public void windowDeiconified(WindowEvent e) / TODO: Add your code here public void windowActivated(WindowEvent e) / TODO: Add your code here public void windowDeactivated(WindowEvent e) / TODO: Add your code here class MyPaint extends JPanel implements Runnable, KeyListener, FocusListener /* * */private static final long serialVersionUID = 1L;She s; Font f = new Font(宋體, Font.PLAIN, 12); int x = 150; int y = 0; Random r = new Random(); int sjx = r.nextInt(300)/10*10; int sjy = r.nextInt(300)/10*10; int fx = 2; int sw = 0; int sd = 300; int cs = 0; int d = 150; String zx = new String1000; boolean zanting = false; boolean zanting1 = false; boolean siwang = false; boolean shenti = false; public MyPaint() Thread t = new Thread(this); t.start(); this.addKeyListener(this); this.setFocusable(true); this.addFocusListener(this); public void setShe(She ss) s = ss; public void setZanTing() if (zanting) zanting = false; else zanting = true; public void setKaiShi() JLabel ks = new JLabel(是否重新開始?); ks.setFont(f); int a = JOptionPane.showConfirmDialog(s, ks); if (a = 0) x = 150; y = 0; sjx = r.nextInt(300)/10*10; sjy = r.nextInt(300)/10*10; fx = 2; sw = 0; sd = 300; cs = 0; zanting = false; siwang = false; shenti = false; s.setChu(); s.setDS(sw, 305 - sd); public void setTuiChu() JLabel tc = new JLabel(確定退出嗎?); tc.setFont(f); int a = JOptionPane.showConfirmDialog(s, tc); if (a = 0) s.dispose(); System.exit(0); public void setSD(int a, int b) sd = a; d = b; public void paint(Graphics g) zxcs = x + / + y; super.paint(g); g.setColor(Color.BLACK); g.drawRect(0, 0, 300, 300); g.setColor(Color.BLACK); g.fillRect(sjx, sjy, 10, 10); g.setColor(Color.BLUE); g.fillRect(x, y, 10, 10); g.setColor(Color.RED); for (int i = 1; i = sw; i+) int j = cs - i; if (j 0) j = cs-i+999+1; String s = zxj.split(/); if (x = Integer.parseInt(s0) & y = Integer.parseInt(s1) /蛇撞到自己身上了 siwang = true; shenti = true; if (sjx = Integer.parseInt(s0) & sjy = Integer.parseInt(s1) /食物在蛇身體上 g.setColor(Color.BLACK); g.fillRect(sjx, sjy,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論