java貪吃蛇課程設(shè)計_第1頁
java貪吃蛇課程設(shè)計_第2頁
java貪吃蛇課程設(shè)計_第3頁
java貪吃蛇課程設(shè)計_第4頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、1 設(shè)計目的1.1 背景近年來, Java 作為一種新的編程語言,以其簡單性、可移植性和平臺無關(guān)性等優(yōu)點,得到了廣泛地應(yīng)用,特別是 Java 與萬維網(wǎng)的完美結(jié)合, 使其成為網(wǎng)絡(luò)編程和嵌入式編程領(lǐng)域的首選編程語言。 JBuilder 是 Borland 公司用于快速開發(fā) Java 應(yīng)用的一款優(yōu)秀的集成開發(fā)環(huán)境,它以其友好的開發(fā)界面、強大的組件支持等優(yōu)點,得到廣大程序員的接受和認(rèn)可?!柏澇陨摺庇螒蚴且粋€經(jīng)典的游戲,它因操作簡單、娛樂性強而廣受歡迎。本文基于Java 技術(shù)和 JBuilder 開發(fā)環(huán)境,開發(fā)了一個操作簡單、界面美觀、功能較齊全的“貪吃蛇”游戲。整個游戲程序分為二個功能模塊,六個類模塊

2、,實現(xiàn)了游戲的開始、暫停、結(jié)束。通過本游戲的開發(fā),達(dá)到學(xué)習(xí) Java 技術(shù)和熟悉軟件開發(fā)流程的目的。本文在介紹 Java 相關(guān)技術(shù)和國內(nèi)外發(fā)展現(xiàn)狀的基礎(chǔ)上,對“貪吃蛇”游戲的整個生命周期的各個開發(fā)階段進(jìn)行了詳細(xì)地介紹。首先,分析了開發(fā)本游戲軟件的可行性,重點分析本設(shè)計所采用的技術(shù)的可行性。其次,從游戲主界面等幾方面,分析了本游戲的功能需求;從可使用性和安全性方面分析了屬性需求。然后,進(jìn)行了游戲的概要設(shè)計和詳細(xì)設(shè)計,這也是本文的重點。概要設(shè)計給出二個功能模塊的主框架以及六個類模塊的函數(shù)調(diào)用關(guān)系;詳細(xì)設(shè)計介紹了Java2 標(biāo)準(zhǔn)運行環(huán)境的配置,重點給出各個類模塊的程序流程圖以及UML圖,列表介紹了各

3、個類包含的變量、使用的方法,展示了游戲的界面。為了保證程序代碼的正確性和功能實現(xiàn)的可靠性,本文還介紹了游戲軟件的程序調(diào)試過程和功能測試結(jié)果。1.2 目標(biāo)本軟件是針對貪吃蛇小游戲的JAVA程序,利用方向鍵來改變蛇的運行方向,空格鍵暫?;蚶^續(xù)游戲,并在隨機的地方產(chǎn)生食物,吃到食物就變成新的蛇體,碰到壁或自身則游戲結(jié)束,否則正常運行。2 總體設(shè)計2.1設(shè)計思路本系統(tǒng)主要是完成貪吃蛇游戲的基本操作。用戶可以自己練習(xí)和娛樂。本系統(tǒng)需要滿足以下幾點要求:(1) 利用方向鍵來改變蛇的運行方向。(2) 空格鍵暫?;蚶^續(xù)游戲,并在隨機的地方產(chǎn)生食物。(3) 吃到食物就變成新的蛇體,碰到壁或自身則游戲結(jié)束,否則正

4、常運行。2.2設(shè)計說明本系統(tǒng)共包括1個java 源文件和 7個類文件。1. 類之間的關(guān)系如圖2.1 所示。SnakeGameSnakeFrameSnakeNodeSnakePanelStatusRunnableSnakeRunnable圖2.1 類之間的關(guān)系2 java 源文件及其功能如表所示。表 2.2java 源文件及其功能序號文件名主要功能1SnakeGame該文件為程序入口,含有main 方法。2SnakeFrame實現(xiàn)菜單控制運行等總體要求,實現(xiàn)方向鍵控制蛇的方向,空格鍵控制游戲暫?;蚶^續(xù),還有分?jǐn)?shù)等。3Snake該文件實現(xiàn)蛇的結(jié)構(gòu)和具體運動,如判斷食物是否和怎樣被吃掉及判斷后的動作

5、。4Node該文件實現(xiàn)組成蛇身的單位- 食物。5SnakePanel該文件實現(xiàn)畫板功能,用紅藍(lán)間隔畫蛇身。6StatusRunnabl該文件為記錄狀態(tài)的線程。e7SnakeRunnable該文件為蛇運動以及記錄分?jǐn)?shù)的線程。3 關(guān)鍵技術(shù)3.1關(guān)鍵技術(shù)及實現(xiàn)程序關(guān)鍵在于表示蛇的圖形及蛇的移動。用一個小矩形快表示蛇的一節(jié)身體,身體每長一節(jié),增加一個矩形塊,蛇頭用倆節(jié)表示。移動時必須從蛇頭開始,所以蛇不能向相反的方向移動,如果不按任意鍵,蛇自行在當(dāng)前方向上前移,但按下有效方向鍵后,蛇頭朝著該方向移動,一步移動一節(jié)身體,所以按下有效方向鍵后,先確定蛇頭的位置,而后蛇的身體隨蛇頭移動,圖形的實現(xiàn)是從蛇頭新

6、位置開始畫出蛇,這時,由于未清屏的原因,原來的蛇的位置和新蛇的位置差一個單位,所以看起來蛇多一節(jié)身體,所以將蛇的最后一節(jié)用背景色覆蓋。食物的出現(xiàn)與消失也是畫矩形塊和覆蓋矩形塊。3.2設(shè)計原理1. 主類 SnakeGame主類為此程序的入口,定義了SnakeFrame 的對象 frame, 開始運行此程序。2. 類 SnakeFrame( 1)成員變量見表 3.1表 3.1 主要成員變量成員變量描述變量類型名稱狀態(tài)標(biāo)簽Private JLabelstatusLabel分?jǐn)?shù)標(biāo)簽Private JLabelscoreLabel蛇面板private JPanelsnakePanel速度標(biāo)簽privat

7、e JLabelspeedLabel蛇類對象private Snakesnake菜單條private JMenuBarbar游戲菜單JMenugameMenu幫助菜單JMenuhelpMenu速度菜單JMenuspeedMenu新菜單項JMenuItemnewItem暫停菜單項JMenuItempauseItem關(guān)于菜單項JMenuItemaboutItem慢菜單項JMenuItemslowItem中間菜單項JMenuItemmidItem快菜單項JMenuItemfastItem開始菜單項JMenuItembeginItem幫助菜單項JMenuItemhelpItem( 2)方法見表3.2表

8、 3.2主要方法方法名功能SnakePanel()addKeyListenersetBounds()JLabel()JMenu()JMenuItem創(chuàng)建蛇的面板監(jiān)視器設(shè)置尺寸設(shè)置標(biāo)簽創(chuàng)建菜單構(gòu)造菜單項3. 類 Snake( 1)成員變量見表 3.3表 3.3 主要成員變量成員變量描述變量類型名稱是否運動booleanisRun蛇體ArrayList<Node>body食物Nodefood方向intderection分?jǐn)?shù)intscore狀態(tài)intstatus速度intspeed慢public static final intSLOW中public static final intMI

9、D快public static final intFAST運動中public static final intRUNNING已暫停public static final intPAUSED游戲結(jié)束public static final intGAMEOVER左public static final intLEFT上public static final intUP右public static final intRIGHT下public static final intDOWN( 2)方法見表 3.4表 3.4主要方法方法名功能判斷食物是否被蛇吃掉,如果食物在蛇isEaten()運行方向的正前方

10、,并且與蛇頭接觸,則被吃掉isCollsion()判斷是否碰撞makeFood()在隨機的地方產(chǎn)生食物changeDerection(int改變運行方向newDer)move()蛇在運行中所采取的措施4. 類 Node( 1)成員變量見表 3.5表 3.5主要成員變量成員變量描述變量類型名稱食物塊寬public static final intW食物塊高public static final intH橫坐標(biāo)intx縱坐標(biāo)inty5. 類 SnakePanel此類為畫蛇的面板類,是實現(xiàn)紅藍(lán)間隔畫蛇身算法的類。6. 類 StatusRunnable此類為線程的子類,實現(xiàn)記錄狀態(tài)的功能。7. 類 S

11、nakeRunnable此類為線程的子類,實現(xiàn)蛇運動以及記錄分?jǐn)?shù)的功能。4 程序流程4.1 系統(tǒng)結(jié)構(gòu)圖如圖 4.1 所示圖 4.1 系統(tǒng)結(jié)構(gòu)圖5 主要源代碼1. 記錄狀態(tài)的代碼class StatusRunnable implements Runnable public StatusRunnable(Snake snake, JLabel statusLabel, JLabel scoreLabel) this.statusLabel = statusLabel;this.scoreLabel = scoreLabel;this.snake = snake;public void run()

12、String sta = ""String spe = ""while (true) switch (snake.status) case Snake.RUNNING:sta = "Running"break;case Snake.PAUSED:sta = "Paused"break;case Snake.GAMEOVER:sta = "GameOver"break;statusLabel.setText(sta);scoreLabel.setText("" + snake.

13、score);try Thread.sleep(100); catch (Exception e) private JLabel scoreLabel;private JLabel statusLabel;private Snake snake;2. 蛇運動以及記錄分?jǐn)?shù)的代碼class SnakeRunnable implements Runnable public SnakeRunnable(Snake snake, Component component) this.snake = snake;ponent = component;public void run() while (true

14、) try snake.move();component.repaint();Thread.sleep(snake.speed); catch (Exception e) private Snake snake;private Component component;class Snake boolean isRun;ArrayList<Node> body;Node food;int derection;int score;int status;int speed;public static final int SLOW = 500;public static final int

15、 MID = 300;public static final int FAST = 100;public static final int RUNNING = 1;public static final int PAUSED = 2;public static final int GAMEOVER = 3;public static final int LEFT = 1;public static final int UP = 2;public static final int RIGHT = 3;public static final int DOWN = 4;public Snake()

16、speed = Snake.SLOW;score = 0;isRun = false;status = Snake.PAUSED;derection = Snake.RIGHT;body = new ArrayList<Node>();body.add(new Node(60, 20);body.add(new Node(40, 20);body.add(new Node(20, 20);makeFood();3. 在隨機的地方產(chǎn)生食物的代碼public void makeFood() Node node = new Node(0, 0);boolean isInBody = tr

17、ue;int x = 0, y = 0;int X = 0, Y = 0;int i = 0;while (isInBody) x = (int) (Math.random() * 15);y = (int) (Math.random() * 20);X = x * Node.W;Y = y * Node.H;for (i = 0; i < body.size(); i+) if (X = body.get(i).x && Y = body.get(i).y)break;if (i < body.size()isInBody = true;elseisInBody

18、= false;food = new Node(X, Y);4. 改變運行方向的代碼public void changeDerection(int newDer) if (derection % 2 != newDer % 2)derection = newDer;public void move() if (isEaten() body.add(0, food);score += 10;makeFood(); else if (isCollsion()isRun = false;status = Snake.GAMEOVER; else if (isRun) Node node = body

19、.get(0);int X = node.x;int Y = node.y;switch (derection) case 1:X -= Node.W;break;case 2:Y -= Node.H;break;case 3:X += Node.W;break;case 4:Y += Node.H;break;body.add(0, new Node(X, Y);body.remove(body.size() - 1);6 運行結(jié)果6.1 各功能界面截圖1. 貪吃蛇游戲的基本運行界面( 1)生成初始界面:圖 6.1初始界面( 2)游戲菜單欄 :圖 6.2游戲菜單欄( 3)速度菜單欄 :圖 6.3速度菜單欄2. 程序開始運行界面( 1)鼠標(biāo)點擊New Game按鈕,開始游戲(紅色方塊為食物,藍(lán)黃相間為初始的蛇體):圖 6.4游戲初始界面( 2)按空格鍵,游戲開始運行,蛇開始移動,并且吃到一次食物即紅色方塊后就變成蛇體

溫馨提示

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

評論

0/150

提交評論