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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

8、anel()創(chuàng)建蛇的面板addKeyListener監(jiān)視器setBounds()設置尺寸JLabel()設置標簽JMenu()創(chuàng)建菜單JMenuItem構造菜單項 3.類Snake(1)成員變量見表3.3表3.3主要成員變量成員變量描述變量類型名稱是否運動booleanisRun蛇體ArrayList<Node>body食物Nodefood方向intderection分數(shù)intscore狀態(tài)intstatus速度intspeed慢public static final intSLOW中public static final intMID快public static final in

9、tFAST運動中public static final intRUNNING已暫停public static final intPAUSED游戲結束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()判斷食物是否被蛇吃掉,如果食物在蛇運行方向的正前方,并且與蛇頭接觸,則被吃掉isCollsion()判

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

11、。4 程序流程4.1系統(tǒng)結構圖如圖4.1所示圖4.1系統(tǒng)結構圖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() String sta = "" String spe =

12、 "" 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.score); try Thread.sleep(1

13、00); catch (Exception e) private JLabel scoreLabel; private JLabel statusLabel; private Snake snake;2. 蛇運動以及記錄分數(shù)的代碼class SnakeRunnable implements Runnable public SnakeRunnable(Snake snake, Component component) this.snake = snake; ponent = component; public void run() while (true) try snake.move(); c

14、omponent.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 MID = 300

15、; 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() s

16、peed = 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 isI

17、nBody = true; 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

18、 = true; else isInBody = 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; e

19、lse if (isRun) Node node = body.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 運行結果6.1各功能界面截圖1.貪吃蛇游戲的基本運行界面(1)生成初始界面: 圖6.1 初始界面 (2)游戲菜單欄: 圖6.2 游戲菜單欄(3)速度菜單欄: 圖6.3 速度菜單欄2.程序開始運行界面(1)鼠標點擊New Game按鈕,開始游戲(紅色方塊為食物,藍黃相間為初始的蛇體): 圖6.4 游戲初始界面(2)按空格鍵,游戲開始運行,蛇開始移動,并且吃到一次食物即紅色方塊后就變成蛇體: 圖

溫馨提示

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

評論

0/150

提交評論