畢業(yè)論文java貪吃蛇小游戲開發(fā)_第1頁
畢業(yè)論文java貪吃蛇小游戲開發(fā)_第2頁
畢業(yè)論文java貪吃蛇小游戲開發(fā)_第3頁
畢業(yè)論文java貪吃蛇小游戲開發(fā)_第4頁
畢業(yè)論文java貪吃蛇小游戲開發(fā)_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、大連商務職業(yè)學院信息技術與藝術設計學院 畢業(yè)設計題目 java貪吃蛇小游戲開發(fā) 專 業(yè) 軟件技術 學 號 932008 姓 名 望月 指 導 教 師 鴻鵠 2012年3月1日 摘 要 近年來,java作為一種新的編程語言,以其簡單性、可移植性和平臺無關性等優(yōu)點,得到了廣泛地應用,特別是java與萬維網的完美結合,使其成為網絡編程和嵌入式編程領域的首選編程語言。jbuilder是borland公司用于快速開發(fā)java應用的一款優(yōu)秀的集成開發(fā)環(huán)境,它以其友好的開發(fā)界面、強大的組件支持等優(yōu)點,得到廣大程序員的接受和認可。 “貪吃蛇”游戲是一個經典的游戲,它因操作簡單、娛樂性強而廣受歡迎。本文基于ja

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

3、給出各個類模塊的程序流程圖以及uml圖,列表介紹了各個類包含的變量、使用的方法,展示了游戲的界面。為了保證程序代碼的正確性和功能實現(xiàn)的可靠性,本文還介紹了游戲軟件的程序調試過程和功能測試結果。關鍵詞:java貪吃蛇 貪吃蛇小游戲 貪吃蛇jdk 目 錄摘要.i1.引言.21.1開發(fā)工具.21.2應用環(huán)境.22.系統(tǒng)需求分析.32.1需求分析.32.2可行性分析.33.系統(tǒng)概要設計.43.1設計目標.43.2系統(tǒng)功能模塊.44.系統(tǒng)詳細設計.64.1程序設計.64.2程序源代碼.104.3各功能界面截圖.235.系統(tǒng)測試.29 5.1測試的意義.295.2測試過程.295.3測試結果.30參考文獻

4、.31致謝.321.引言1.1 開發(fā)工具 sun microsystems公司在推出java語言的同時,推出了一套開發(fā)工具jdk。sun提供的基于字符模式的java開發(fā)工具包jdk: java開發(fā)工具(jdk)是許多java專家最初使用的開發(fā)環(huán)境。java是平臺無關的語言是指用java寫的應用程序不用修改就可在不同的軟硬件平臺上運行。 java源程序編寫借助于記事本,editpuls,ultraedit等第三方編輯工具。 所有的java文件編輯、編譯、調試、解釋運行都是通過使用字符命令來執(zhí)行操作。jdk由一個標準類庫和一組建立,測試及建立文檔的java實用程序組成。其核心javaapi是一些預

5、定義的類庫,開發(fā)人員需要用這些類來訪問java語言的功能。jdk 是整個java的核心,包括了java運行環(huán)境(java runtimeenvirnment),一堆java工具和java基礎的類庫(rt.jar)。不論什么java應用服務器實質都是內置了某個版本的jdk。因此掌握jdk是學好java的第一步。 jdk里面是java類庫和java的語言規(guī)范,它提供的是無論你用何種開發(fā)軟件寫java程序都必須用到的類庫和java語言規(guī)范.沒有jdk,你的java程序根本就不能用。 最主流的jdk是sun公司發(fā)布的jdk,除了sun之外,還有很多公司和組織都開發(fā)了自己的jdk,例如ibm公司開發(fā)的j

6、dk,bea公司的jrocket,還有gnu組織開發(fā)的jdk等等。其中ibm的jdk包含的jvm(java virtual machine)運行效率要比sunjdk包含的jvm高出許多。而專門運行在x86平臺的jrocket在服務端運行效率也要比sunjdk好很多。但不管怎么說,我們還是需要先把sun jdk掌握好。1.2 應用環(huán)境(1)操作系統(tǒng):solaris、windows nt、windows 95等(2). 應用軟件:jdk1.52.系統(tǒng)需求分析2.1 需求分析本系統(tǒng)主要是完成貪吃蛇游戲的基本操作。用戶可以自己練習和娛樂。本系統(tǒng)需要滿足以下幾點要求:(1) 利用方向鍵來改變蛇的運行方向

7、。 (2) 空格鍵暫停或繼續(xù)游戲,并在隨機的地方產生食物。 (3) 吃到食物就變成新的蛇體,碰到壁或自身則游戲結束,否則正常運行。2.2 可行性分析貪吃蛇游戲是一種簡單的大眾的游戲,自從計算機實現(xiàn)以來,深受廣大電腦玩家的喜愛,做一個簡單的貪吃蛇小游戲。 貪吃蛇的核心算法時如何實現(xiàn)移動和吃掉食物,沒有碰到食物的時候,把當前運動方向上的下個節(jié)點入隊,并以蛇節(jié)點的顏色繪制這個節(jié)點,然后把頭指針所指的節(jié)點出隊,并以游戲框架內部背景色重繪出隊的節(jié)點,這樣就可以達到移動的效果。而在吃到食物的時候,則只需把食物入隊即可。實現(xiàn)貪吃蛇的基本的蛇身移動、吃到食物身體增長、和碰到墻壁或自身死亡,能夠暫停和開始。本次

8、設計我將主要運用java語言來完成。java語言是一種跨平臺,適合于分布式計算環(huán)境的面向對象編程語言,用java寫的應用程序不用修改就可在不同的軟硬件平臺上運行。由于java主要用于網絡應用程序開發(fā),因此對安全性有較高的要求。如果沒有安全保證,用戶從網絡下載程序執(zhí)行就非常危險。java通過自己的安全機制防止了病毒程序的產生和下載程序對本地系統(tǒng)的威脅破壞。3.系統(tǒng)概要設計3.1 設計目標本軟件是針對貪吃蛇小游戲的java程序,利用方向鍵來改變蛇的運行方向,空格鍵暫停或繼續(xù)游戲,并在隨機的地方產生食物,吃到食物就變成新的蛇體,碰到壁或自身則游戲結束,否則正常運行。3.2 系統(tǒng)功能模塊 本游戲系統(tǒng)共

9、包括1個java源文件和7個類文件。1. 類之間的關系如圖1所示。 snakegamesnakeframesnakerunnablestatusrunnablesnakepanelnodesnake圖1類之間的關系2java源文件及其功能如表所示。表1 java源文件及其功能序號文件名主要功能1snakegame該文件為程序入口,含有main方法。2snakeframe實現(xiàn)菜單控制運行等總體要求,實現(xiàn)方向鍵控制蛇的方向,空格鍵控制游戲暫?;蚶^續(xù),還有分數(shù)等。 3snake 該文件實現(xiàn)蛇的結構和具體運動,如判斷食物是否和怎樣被吃掉及判斷后的動作。 4node該文件實現(xiàn)組成蛇身的單位-食物。5sn

10、akepanel該文件實現(xiàn)畫板功能,用紅藍間隔畫蛇身。 6statusrunnable該文件為記錄狀態(tài)的線程。 7snakerunnable該文件為蛇運動以及記錄分數(shù)的線程。 4.系統(tǒng)詳細設計4.1 程序設計1.主類snakegame (1)主類為此程序的入口,定義了snakeframe的對象frame,開始運行此程序。 (2)源代碼見文件snakegame.java2.類snakeframe(1)成員變量見表2表2 主要成員變量成員變量描述變量類型名稱狀態(tài)標簽private jlabelstatuslabel分數(shù)標簽private jlabelscorelabel蛇面板private jpa

11、nelsnakepanel速度標簽private jlabelspeedlabel蛇類對象private snakesnake菜單條private jmenubarbar游戲菜單jmenugamemenu幫助菜單jmenuhelpmenu速度菜單jmenuspeedmenu新菜單項jmenuitemnewitem暫停菜單項jmenuitempauseitem關于菜單項jmenuitemaboutitem慢菜單項jmenuitemslowitem中間菜單項jmenuitemmiditem快菜單項jmenuitemfastitem開始菜單項jmenuitembeginitem幫助菜單項jmenui

12、temhelpitem (2)方法見表3表3 主要方法方法名功能snakepanel()創(chuàng)建蛇的面板addkeylistener監(jiān)視器setbounds()設置尺寸jlabel()設置標簽jmenu()創(chuàng)建菜單jmenuitem構造菜單項 3類snake (1)成員變量見表4表4 主要成員變量成員變量描述變量類型名稱是否運動booleanisrun蛇體arraylistbody食物nodefood方向intderection分數(shù)intscore狀態(tài)intstatus速度intspeed慢public static final intslow中public static final intmid

13、快public static final intfast運動中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)方法見表5表5 主要方法方法名功能iseaten()判斷食物是否被蛇吃掉,如果食物在蛇運行方向的正前方,并且與蛇頭

14、接觸,則被吃掉iscollsion()判斷是否碰撞makefood()在隨機的地方產生食物changederection(int newder)改變運行方向move()蛇在運行中所采取的措施 4. 類node (1)成員變量見表6表6 主要成員變量成員變量描述變量類型名稱食物塊寬public static final intw食物塊高public static final inth橫坐標intx縱坐標inty (2)源代碼見文件snakegame.java5.類snakepanel 此類為畫蛇的面板類,是實現(xiàn)紅藍間隔畫蛇身算法的類。 源代碼見文件源代碼見文件snakegame.java6.類s

15、tatusrunnable 此類為線程的子類,實現(xiàn)記錄狀態(tài)的功能。 源代碼見文件snakegame.java 7.類snakerunnable 此類為線程的子類,實現(xiàn)蛇運動以及記錄分數(shù)的功能。 4.2 程序源代碼import java.awt.color;import java.awt.component;import java.awt.graphics;import java.awt.event.actionevent;import java.awt.event.actionlistener;import java.awt.event.keyevent;import java.awt.eve

16、nt.keylistener;import java.util.arraylist;import javax.swing.borderfactory;import javax.swing.jframe;import javax.swing.jlabel;import javax.swing.jmenu;import javax.swing.jmenubar;import javax.swing.jmenuitem;import javax.swing.jpanel;public class snakegame public static void main(string args) snake

17、frame frame = new snakeframe(); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setvisible(true); / -記錄狀態(tài)的線程class statusrunnable implements runnable public statusrunnable(snake snake, jlabel statuslabel, jlabel scorelabel) this.statuslabel = statuslabel; this.scorelabel = scorelabel; thi

18、s.snake = snake; public void run() 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.score); try thread.s

19、leep(100); catch (exception e) private jlabel scorelabel; private jlabel statuslabel; private snake snake;/ -蛇運動以及記錄分數(shù)的線程class snakerunnable implements runnable public snakerunnable(snake snake, component component) this.snake = snake; ponent = component; public void run() while (true) try s

20、nake.move(); component.repaint(); thread.sleep(snake.speed); catch (exception e) private snake snake; private component component;class snake boolean isrun;/ -是否運動中 arraylist body;/ -蛇體 node food;/ -食物 int derection;/ -方向 int score; int status; int speed; public static final int slow = 500; public s

21、tatic final int 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 d

22、own = 4; public snake() speed = snake.slow; score = 0; isrun = false; status = snake.paused; derection = snake.right; body = new arraylist(); body.add(new node(60, 20); body.add(new node(40, 20); body.add(new node(20, 20); makefood(); / -判斷食物是否被蛇吃掉 / -如果食物在蛇運行方向的正前方,并且與蛇頭接觸,則被吃掉 private boolean isea

23、ten() node head = body.get(0); if (derection = snake.right & (head.x + node.w) = food.x & head.y = food.y) return true; if (derection = snake.left & (head.x - node.w) = food.x & head.y = food.y) return true; if (derection = snake.up & head.x = food.x & (head.y - node.h) = food.y) return true; if (de

24、rection = snake.down & head.x = food.x & (head.y + node.h) = food.y) return true; else return false; / -是否碰撞 private boolean iscollsion() node node = body.get(0); / -碰壁 if (derection = snake.right & node.x = 280) return true; if (derection = snake.up & node.y = 0) return true; if (derection = snake.

25、left & node.x = 0) return true; if (derection = snake.down & node.y = 380) return true; / -蛇頭碰到蛇身 node temp = null; int i = 0; for (i = 3; i body.size(); i+) temp = body.get(i); if (temp.x = node.x & temp.y = node.y) break; if (i body.size() return true; else return false; / -在隨機的地方產生食物 public void

26、makefood() node node = new node(0, 0); boolean isinbody = 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) br

27、eak; if (i body.size() isinbody = true; else isinbody = false; food = new node(x, y); / -改變運行方向 public void changederection(int newder) if (derection % 2 != newder % 2)/ -如果與原來方向相同或相反,則無法改變 derection = newder; public void move() if (iseaten() / -如果食物被吃掉 body.add(0, food);/ -把食物當成蛇頭成為新的蛇體 score += 10

28、; makefood();/ -產生食物 else if (iscollsion()/ -如果碰壁或自身 isrun = false; status = snake.gameover;/ -結束 else 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 += n

29、ode.w; break; case 4: y += node.h; break; body.add(0, new node(x, y); / -去掉蛇尾 body.remove(body.size() - 1); / -組成蛇身的單位,食物class node public static final int w = 20; public static final int h = 20; int x; int y; public node(int x, int y) this.x = x; this.y = y; / -畫板class snakepanel extends jpanel sna

30、ke snake; public snakepanel(snake snake) this.snake = snake; public void paintcomponent(graphics g) super.paintcomponent(g); node node = null; for (int i = 0; i snake.body.size(); i+) / -紅藍間隔畫蛇身 if (i % 2 = 0) g.setcolor(color.blue); else g.setcolor(color.yellow); node = snake.body.get(i); g.fillrec

31、t(node.x, node.y, node.h, node.w);/ *試用* node = snake.food; g.setcolor(color.red); g.fillrect(node.x, node.y, node.h, node.w); class snakeframe extends jframe private jlabel statuslabel; private jlabel speedlabel; private jlabel scorelabel; private jpanel snakepanel; private snake snake; private jme

32、nubar bar; jmenu gamemenu; jmenu helpmenu; jmenu speedmenu; jmenuitem newitem; jmenuitem pauseitem; jmenuitem beginitem; jmenuitem helpitem; jmenuitem aboutitem; jmenuitem slowitem; jmenuitem miditem; jmenuitem fastitem; public snakeframe() init(); actionlistener l = new actionlistener() public void actionperformed(actionevent e) if (e.getsource() = pauseitem) snake.isrun = false; if (e.getsource() = beginitem) snake.isrun =

溫馨提示

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

評論

0/150

提交評論