版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 TOC o 1-2 h z u 目錄 HYPERLINK l _Toc328863949 第一章 緒論 PAGEREF _Toc328863949 h 1 HYPERLINK l _Toc328863950 1.1 開發(fā)的背景 PAGEREF _Toc328863950 h 1 HYPERLINK l _Toc328863951 1.2 開發(fā)的目的 PAGEREF _Toc328863951 h 2 HYPERLINK l _Toc328863952 1.3 開發(fā)的意義 PAGEREF _Toc328863952 h 2 HYPERLINK l _Toc328863953 1.4 開發(fā)工具簡
2、介 PAGEREF _Toc328863953 h 2 HYPERLINK l _Toc328863954 第二章 需求分析 PAGEREF _Toc328863954 h 3 HYPERLINK l _Toc328863955 2.1 需求分析 PAGEREF _Toc328863955 h 3 HYPERLINK l _Toc328863956 2.2 可行性分析 PAGEREF _Toc328863956 h 3 HYPERLINK l _Toc328863957 第三章 系統(tǒng)概要設計 PAGEREF _Toc328863957 h 3 HYPERLINK l _Toc328863958
3、 3.1 設計目標 PAGEREF _Toc328863958 h 3 HYPERLINK l _Toc328863959 3.2 系統(tǒng)功能模塊 PAGEREF _Toc328863959 h 4 HYPERLINK l _Toc328863960 第四章 詳細設計與實現(xiàn) PAGEREF _Toc328863960 h 5 HYPERLINK l _Toc328863961 4.1 程序設計 PAGEREF _Toc328863961 h 5 HYPERLINK l _Toc328863971 4.2 各功能界面截圖 PAGEREF _Toc328863971 h 7 HYPERLINK l
4、_Toc328863973 4.3 詳細代碼 PAGEREF _Toc328863973 h 9 HYPERLINK l _Toc328863974 第五章 測試 PAGEREF _Toc328863974 h 16 HYPERLINK l _Toc328863975 5.1 測試的意義 PAGEREF _Toc328863975 h 16 HYPERLINK l _Toc328863976 5.2 測試過程 PAGEREF _Toc328863976 h 16 HYPERLINK l _Toc328863977 5.3 測試結(jié)果 PAGEREF _Toc328863977 h 16 HYPE
5、RLINK l _Toc328863978 第六章 心得體會 PAGEREF _Toc328863978 h 16第一章 緒論1.1 開發(fā)的背景 隨著科技的發(fā)展,現(xiàn)在手機的功能已不僅僅是簡單的打接電話、收發(fā)短信了。更多的手機用戶希望在工作、學習之余通過方便靈巧可隨身攜帶的儀器休閑娛樂。因此,為了迎合眾多用戶的需求并適應現(xiàn)在手機的規(guī)模,我們開發(fā)出一套適合各階層人士的具有很強的娛樂性和交互性的貪吃蛇小游戲。 貪吃蛇,之所以取這樣的名字,去用意還是很明顯的.貪吃蛇其實并不貪,它是人不斷向前追求的象征.就像現(xiàn)代的人只有不斷努力向前才能得到自己想要的。而食物也是隨機出現(xiàn)的,就像現(xiàn)在社會存在的機會,而我們
6、只有找好自己的目標才能成功。 雖然現(xiàn)在市面上存在著各種各樣的游戲版本,可是貪吃蛇其市場還是相當大的。因為它的特殊在于它能吸引人更深入,愛不釋手.隨著游戲速度不斷加快,其刺激性也更強??梢哉f該游戲的優(yōu)勢在于它的簡單易行,不論是手機,還是小游戲機,都能很快順利的運行。對于在外忙碌的人,不可能花費大量時間在娛樂上,大型游戲是行不通的。這樣的小游戲剛好迎合了他們的需求。 1.2 開發(fā)的目的在如今社會,人們的工作學習壓力逐漸增大,生活節(jié)奏逐漸加快,大多數(shù)人沒有足夠的時間去休閑娛樂,放松自己。這款小型的手機游戲,可以讓我們隨時隨地都能享受游戲,。讓我們從繁重的日常生活中解脫出來。游戲的主界面應該力求美觀,
7、爽心悅目,以提高玩家對游戲的興趣。游戲的控制模塊應該做到易懂、易操作,以給玩家一個很好的游戲環(huán)境。1.3 開發(fā)的意義 通過這個游戲可以使玩貪吃蛇的人感到心情輕松,愉悅。使心情得以舒暢,讓工作的壓力可以得到緩解。給大家一個愉悅的游戲環(huán)境。1.4 開發(fā)工具簡介 Sun Microsystems公司在推出Java語言的同時,推出了一套開發(fā)工具JDK。Sun提供的基于字符模式的Java開發(fā)工具包JDK: Java開發(fā)工具(JDK)是許多Java專家最初使用的開發(fā)環(huán)境。Java是平臺無關(guān)的語言是指用Java寫的應用程序不用修改就可在不同的軟硬件平臺上運行。 Java源程序編寫借助于記事本,Editpul
8、s,UltraEdit等第三方編輯工具。 所有的Java文件編輯、編譯、調(diào)試、解釋運行都是通過使用字符命令來執(zhí)行操作。JDK由一個標準類庫和一組建立,測試及建立文檔的Java實用程序組成。其核心JavaAPI是一些預定義的類庫,開發(fā)人員需要用這些類來訪問Java語言的功能。JDK 是整個Java的核心,包括了Java運行環(huán)境(Java RuntimeEnvirnment),一堆Java工具和Java基礎的類庫(rt.jar)。不論什么Java應用服務器實質(zhì)都是內(nèi)置了某個版本的JDK。因此掌握JDK是學好Java的第一步。 JDK里面是java類庫和java的語言規(guī)范,它提供的是無論你用何種開發(fā)
9、軟件寫java程序都必須用到的類庫和java語言規(guī)范.沒有jdk,你的java程序根本就不能用。 最主流的JDK是Sun公司發(fā)布的JDK,除了Sun之外,還有很多公司和組織都開發(fā)了自己的JDK,例如IBM公司開發(fā)的JDK,BEA公司的Jrocket,還有GNU組織開發(fā)的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)運行效率要比SunJDK包含的JVM高出許多。而專門運行在x86平臺的Jrocket在服務端運行效率也要比SunJDK好很多。但不管怎么說,我們還是需要先把Sun JDK掌握好。第二章 需求分析2.1 需求分析本游戲主要是完成貪吃蛇游戲的基本操
10、作。本游戲需要滿足以下幾點要求:(1) 利用方向鍵來改變蛇的運行方向。 (2) 在隨機的地方產(chǎn)生食物。 (3) 吃到食物就變成新的蛇體,碰到壁或自身則游戲結(jié)束,否則正常運行。2.2 可行性分析貪吃蛇游戲是一種簡單的大眾的游戲,自從計算機實現(xiàn)以來,深受廣大電腦玩家的喜愛,做一個簡單的貪吃蛇小游戲。 貪吃蛇的核心算法是如何實現(xiàn)移動和吃掉食物,在沒有碰到食物的時候,把當前運動方向上的下個節(jié)點入隊,然后把頭指針所指的節(jié)點出隊,這樣就可以達到移動的效果。而在吃到食物的時候,則只需把食物入隊即可。實現(xiàn)貪吃蛇的基本的蛇身移動、吃到食物身體增長、和碰到墻壁或自身死亡,能夠停止和運行。本次設計主要運用java語
11、言來完成。Java語言是一種跨平臺,適合于分布式計算環(huán)境的面向?qū)ο缶幊陶Z言,用Java寫的應用程序不用修改就可在不同的軟硬件平臺上運行。 第三章 系統(tǒng)概要設計3.1 設計目標本軟件是針對貪吃蛇小游戲的JAVA程序,利用方向鍵來改變蛇的運行方向,空格鍵暫?;蚶^續(xù)游戲,并在隨機的地方產(chǎn)生食物,吃到食物就變成新的蛇體,碰到壁或自身則游戲結(jié)束,否則正常運行。3.2 系統(tǒng)功能模塊本系統(tǒng)共包括1個java源文件和7個類文件。 1. 類之間的關(guān)系如圖1所示。 貪吃蛇JFramePaintReformUpgrowthIsdeadCheckRun圖1類之間的關(guān)系2java源文件及其功能如表所示。表1 java源
12、文件及其功能序號文件名主要功能1貪吃蛇該文件為程序入口,含有main方法。2run實現(xiàn)菜單控制運行等總體要求,實現(xiàn)方向鍵控制蛇的方向,空格鍵控制游戲暫?;蚶^續(xù),還有分數(shù)等。 3check 該文件實現(xiàn)蛇的結(jié)構(gòu)和具體運動,如判斷食物是否和怎樣被吃掉及判斷后的動作。 4reform該文件實現(xiàn)組成蛇身的單位-食物。5paint該文件實現(xiàn)畫板功能,用紅藍間隔畫蛇身。 6isdead該文件為記錄狀態(tài)的線程。 7upgrowth該文件為蛇運動以及記錄分數(shù)的線程。第四章 詳細設計與實現(xiàn)4.1 程序設計1.主類貪吃蛇 (1)主類為此程序的入口,定義了貪吃蛇的對象frame,開始運行此程序。 (2)源代碼見詳細代
13、碼。2.類SnakeFrame(1)成員變量見表2表2 主要成員變量成員變量描述變量類型名稱狀態(tài)標簽Private JLabelzhuantaiLabel分數(shù)標簽Private JLabelfenshuLabel蛇面板private JPanelsnakePanel蛇類對象private Snake貪吃蛇菜單條private JMenuBarbar游戲菜單JMenuyouxiMenu幫助菜單JMenubangzhuMenu新菜單項JMenuItemyouxiItem關(guān)于菜單項JMenuItemguanyuItem簡單單項JMenuItemjiandanItem普通菜單項JMenuItemput
14、ongItem困難菜單項JMenuItemKunnanItem開始菜單項JMenuItemkaishiItem幫助菜單項JMenuItembangzhuItem (2)方法見表3表3 主要方法方法名功能SnakePanel()創(chuàng)建蛇的面板addKeyListener監(jiān)視器setBounds()設置尺寸JLabel()設置標簽JMenu()創(chuàng)建菜單JMenuItem構(gòu)造菜單項3類貪吃蛇 (1)成員變量見表4表4 主要成員變量成員變量描述變量類型名稱是否運動booleanisRun蛇體ArrayListbody食物Reformfood方向intderection分數(shù)intFenshu狀態(tài)intZh
15、uangtai簡單public static final intJiandan普通public static final intPutong困難public static final intKuannan運動中public static final intRUNNING左public static final intLEFT上public static final intUP右public static final intRIGHT下public static final intDOWN(2)方法見表5表5 主要方法方法名功能check()判斷食物是否被蛇吃掉,如果食物在蛇運行方向的正前方,并
16、且與蛇頭接觸,則被吃掉Upgrowth()在隨機的地方產(chǎn)生食物Reform蛇得到食物 4. 類reform (1)成員變量見表6表6 主要成員變量成員變量描述變量類型名稱食物塊寬public static final intW食物塊高public static final intH橫坐標intx縱坐標inty (2)源代碼見詳細代碼。5.類Paint 此類為畫蛇的面板類,是粉色蛇身算法的類。 源代碼見詳細代碼。6.類Isdead 此類為線程的子類,實現(xiàn)記錄狀態(tài)的功能。源代碼見詳細代碼。7.類Run 此類為線程的子類,實現(xiàn)蛇運動以及記錄分數(shù)的功能。源代碼見詳細代碼。4.2 各功能界面截圖1、貪吃
17、蛇游戲的基本運行界面(1)生成初始界面: 圖1 初始界面2、程序開始運行界面(1)鼠標點擊游戲按鈕,開始游戲 圖4游戲初始界面(3)按方向鍵改變蛇的運行方向,并且碰壁后停止游戲: 圖5 游戲運行界面4.3 詳細代碼代碼:package 界面;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;/Main Classpublic class GreedSnake extends KeyAdapterJFrame mainFrame;Canvas paintCanvas;JLabel l
18、abelScore;/計分牌SnakeModel snakeModel=null;/ 蛇public static final int DEFAULT_WIDTH=500;public static final int DEFAULT_HEIGHT=300;public static final int nodeWidth=10;public static final int nodeHeight=10;/GreedSnake():初始化游戲界面public GreedSnake()/設置界面元素mainFrame=new JFrame(貪吃蛇游戲);Container cp=mainFram
19、e.getContentPane();labelScore=new JLabel(所得分數(shù)為:,JLabel.CENTER);cp.add(labelScore,BorderLayout.NORTH);paintCanvas=new Canvas();paintCanvas.setSize(DEFAULT_WIDTH+1,DEFAULT_HEIGHT+1);paintCanvas.addKeyListener(this);cp.add(paintCanvas,BorderLayout.CENTER);JPanel panelButtom=new JPanel();panelButtom.set
20、Layout(new BorderLayout();JLabel labelHelp;/ 幫助信息labelHelp=new JLabel(按 PageUP 或 PageDown 鍵改變速度,JLabel.CENTER);panelButtom.add(labelHelp,BorderLayout.NORTH);labelHelp=new JLabel(按 Enter 或 S 鍵重新開始游戲,JLabel.CENTER);panelButtom.add(labelHelp,BorderLayout.CENTER);labelHelp=new JLabel(按 SPACE 鍵或 P 鍵暫停游戲,
21、JLabel.CENTER);panelButtom.add(labelHelp,BorderLayout.SOUTH);cp.add(panelButtom,BorderLayout.SOUTH);mainFrame.addKeyListener(this);mainFrame.pack();mainFrame.setResizable(false);/設置窗口大小不能變化mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);mainFrame.setVisible(true);begin();/keyPressed():按鍵檢測p
22、ublic void keyPressed(KeyEvent e)int keyCode=e.getKeyCode();if(snakeModel.running)switch(keyCode)case KeyEvent.VK_UP:snakeModel.changeDirection(SnakeModel.UP);break;case KeyEvent.VK_DOWN:snakeModel.changeDirection(SnakeModel.DOWN);break;case KeyEvent.VK_LEFT:snakeModel.changeDirection(SnakeModel.LEF
23、T);break;case KeyEvent.VK_RIGHT:snakeModel.changeDirection(SnakeModel.RIGHT);break;case KeyEvent.VK_ADD:case KeyEvent.VK_PAGE_UP:snakeModel.speedUp();/ 加速break;case KeyEvent.VK_SUBTRACT:case KeyEvent.VK_PAGE_DOWN:snakeModel.speedDown();/ 減速break;case KeyEvent.VK_SPACE:case KeyEvent.VK_P:snakeModel.c
24、hangePauseState();/ 暫?;蚶^續(xù)break;default:/重新開始if(keyCode=KeyEvent.VK_S | keyCode=KeyEvent.VK_ENTER)snakeModel.running=false;begin();/repaint():繪制游戲界面(包括蛇和食物)void repaint()Graphics g=paintCanvas.getGraphics();/draw backgroundg.setColor(Color.LIGHT_GRAY);g.fillRect(0,0,DEFAULT_WIDTH,DEFAULT_HEIGHT);/dra
25、w the snakeg.setColor(Color.BLACK);LinkedList na=snakeModel.nodeArray;Iterator it=na.iterator();while(it.hasNext()Node n=(Node)it.next();drawNode(g,n);/ draw the foodg.setColor(Color.RED);Node n=snakeModel.food;drawNode(g,n);updateScore();/drawNode():繪畫某一結(jié)點(蛇身或食物)private void drawNode(Graphics g,Nod
26、e n)g.fillRect(n.x*nodeWidth,n.y*nodeHeight,nodeWidth-1,nodeHeight-1);/updateScore():改變計分牌public void updateScore()String s=所得分數(shù)為: +snakeModel.score;labelScore.setText(s);/begin():游戲開始,放置貪吃蛇void begin()if(snakeModel=null|!snakeModel.running)snakeModel=new SnakeModel(this,DEFAULT_WIDTH/nodeWidth,DEFA
27、ULT_HEIGHT/nodeHeight);(new Thread(snakeModel).start();/main():主函數(shù)public static void main(String args)GreedSnake gs=new GreedSnake();/Node:結(jié)點類class Nodeint x;int y;Node(int x,int y)this.x=x;this.y=y;/SnakeModel:貪吃蛇模型class SnakeModel implements RunnableGreedSnake gs;boolean matrix;/ 界面數(shù)據(jù)保存在數(shù)組里LinkedL
28、ist nodeArray=new LinkedList();Node food;int maxX;/最大寬度int maxY;/最大長度int direction=2;/方向boolean running=false;int timeInterval=200;/ 間隔時間(速度)double speedChangeRate=0.75;/ 速度改變程度boolean paused=false;/ 游戲狀態(tài)int score=0;int countMove=0;/ UP和DOWN是偶數(shù),RIGHT和LEFT是奇數(shù)public static final int UP=2;public static
29、 final int DOWN=4;public static final int LEFT=1;public static final int RIGHT=3;/GreedModel():初始化界面public SnakeModel(GreedSnake gs,int maxX,int maxY)this.gs=gs;this.maxX=maxX;this.maxY=maxY;matrix=new booleanmaxX;for(int i=0;i20 ? 10 : maxX/2;for(int i=0;iinitArrayLength;+i)int x=maxX/2+i;int y=max
30、Y/2;nodeArray.addLast(new Node(x,y);matrixxy=true;/ 蛇身處置truefood=createFood();matrixfood.xfood.y=true;/ 食物處置true/changeDirection():改變運動方向public void changeDirection(int newDirection)if(direction%2!=newDirection%2)/ 避免沖突direction=newDirection;/moveOn():貪吃蛇運動函數(shù)public boolean moveOn()Node n=(Node)nodeA
31、rray.getFirst();int x=n.x;int y=n.y;switch(direction)case UP:y-;break;case DOWN:y+;break;case LEFT:x-;break;case RIGHT:x+;break;if(0=x&xmaxX)&(0=y&y0 ? scoreGet : 10;countMove=0;food=createFood();matrixfood.xfood.y=true;return true;else return false;/ 撞到身體else/什么都沒有碰到nodeArray.addFirst(new Node(x,y)
32、;/ 加上頭部matrixxy=true;n=(Node)nodeArray.removeLast();/ 去掉尾部matrixn.xn.y=false;countMove+;return true;return false;/越界(撞到墻壁)/*發(fā)了一份貪吃蛇游戲的代碼,誰能幫我解釋一下,貪吃蛇程序的運行過程,運行步驟*/run():貪吃蛇運動線程public void run()running=true;while(running)tryThread.sleep(timeInterval);catch(Exception e)break;if(!paused)if(moveOn()/ 未結(jié)
33、束gs.repaint();else/游戲結(jié)束JOptionPane.showMessageDialog(null,GAME OVER,Game Over,JOptionPane.INFORMATION_MESSAGE);break;running=false;/createFood():生成食物及放置地點private Node createFood()int x=0;int y=0;doRandom r=new Random();x=r.nextInt(maxX);y=r.nextInt(maxY);while(matrixxy);return new Node(x,y);/speedUp():加快蛇運動速度public void speedUp()timeInterval*=speedChangeRate;/speedDown():放慢蛇運動速度public void speedDown()timeInterval/=speedChangeRate;/changePauseState(): 改變游戲狀態(tài)(暫停或繼續(xù))public void changePauseState()paused=!paused;第五章 測試5.1 測試的意義系統(tǒng)測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程,成功的測試是發(fā)現(xiàn)了至今尚未發(fā)現(xiàn)的錯誤的測試。 測試的目的就是希望能以最少的人力和時間發(fā)現(xiàn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東科學技術(shù)職業(yè)學院《醫(yī)學生物化學》2023-2024學年第一學期期末試卷
- 廣東金融學院《農(nóng)業(yè)技術(shù)經(jīng)濟學》2023-2024學年第一學期期末試卷
- 廣東環(huán)境保護工程職業(yè)學院《中學語文經(jīng)典新詩解讀》2023-2024學年第一學期期末試卷
- 廣東行政職業(yè)學院《護理學基礎實驗(1)》2023-2024學年第一學期期末試卷
- 廣東工貿(mào)職業(yè)技術(shù)學院《大數(shù)據(jù)原理與技術(shù)課程設計》2023-2024學年第一學期期末試卷
- 廣東東軟學院《儒學與傳統(tǒng)文化》2023-2024學年第一學期期末試卷
- 廣東創(chuàng)新科技職業(yè)學院《軟件工程A》2023-2024學年第一學期期末試卷
- 《口腔護理崗前培訓》課件
- 《流程圖的排版規(guī)則》課件
- 公證書 仲裁文書
- 2024年銷售員工年度工作總結(jié)
- 2024-2025學年廣東省深圳市南山區(qū)監(jiān)測數(shù)學三年級第一學期期末學業(yè)水平測試試題含解析
- 人工智能 課件 第五章 機器學習
- 2024-2025學年上學期杭州初中英語八年級期末試卷
- 【MOOC】人因工程學-東北大學 中國大學慕課MOOC答案
- 中考數(shù)學復習第二章方程(組)與不等式(組)第三節(jié)分式方程及其應用課件
- 中國慢性阻塞性肺疾病基層診療指南(2024年)解讀
- 水肥一體化智能種植管理技術(shù)實施方案
- 《中華人民共和國學前教育法》專題培訓
- 現(xiàn)場生命急救知識與技能學習通超星期末考試答案章節(jié)答案2024年
- 成人流行性感冒抗病毒治療專家共識(2022年)解讀
評論
0/150
提交評論