



版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 設(shè)計(jì)目的1.1 背景近年來(lái), Java 作為一種新的編程語(yǔ)言,以其簡(jiǎn)單性、可移植性和平臺(tái)無(wú)關(guān)性等優(yōu)點(diǎn),得到了廣泛地應(yīng)用,特別是 Java 與萬(wàn)維網(wǎng)的完美結(jié)合, 使其成為網(wǎng)絡(luò)編程和嵌入式編程領(lǐng)域的首選編程語(yǔ)言。 JBuilder 是 Borland 公司用于快速開(kāi)發(fā) Java 應(yīng)用的一款優(yōu)秀的集成開(kāi)發(fā)環(huán)境,它以其友好的開(kāi)發(fā)界面、強(qiáng)大的組件支持等優(yōu)點(diǎn),得到廣大程序員的接受和認(rèn)可。“貪吃蛇”游戲是一個(gè)經(jīng)典的游戲,它因操作簡(jiǎn)單、娛樂(lè)性強(qiáng)而廣受歡迎。本文基于Java 技術(shù)和 JBuilder 開(kāi)發(fā)環(huán)境,開(kāi)發(fā)了一個(gè)操作簡(jiǎn)單、界面美觀、功能較齊全的“貪吃蛇”游戲。整個(gè)游戲程序分為二個(gè)功能模塊,六個(gè)類模塊
2、,實(shí)現(xiàn)了游戲的開(kāi)始、暫停、結(jié)束。通過(guò)本游戲的開(kāi)發(fā),達(dá)到學(xué)習(xí) Java 技術(shù)和熟悉軟件開(kāi)發(fā)流程的目的。本文在介紹 Java 相關(guān)技術(shù)和國(guó)內(nèi)外發(fā)展現(xiàn)狀的基礎(chǔ)上,對(duì)“貪吃蛇”游戲的整個(gè)生命周期的各個(gè)開(kāi)發(fā)階段進(jìn)行了詳細(xì)地介紹。首先,分析了開(kāi)發(fā)本游戲軟件的可行性,重點(diǎn)分析本設(shè)計(jì)所采用的技術(shù)的可行性。其次,從游戲主界面等幾方面,分析了本游戲的功能需求;從可使用性和安全性方面分析了屬性需求。然后,進(jìn)行了游戲的概要設(shè)計(jì)和詳細(xì)設(shè)計(jì),這也是本文的重點(diǎn)。概要設(shè)計(jì)給出二個(gè)功能模塊的主框架以及六個(gè)類模塊的函數(shù)調(diào)用關(guān)系;詳細(xì)設(shè)計(jì)介紹了Java2 標(biāo)準(zhǔn)運(yùn)行環(huán)境的配置,重點(diǎn)給出各個(gè)類模塊的程序流程圖以及UML圖,列表介紹了各
3、個(gè)類包含的變量、使用的方法,展示了游戲的界面。為了保證程序代碼的正確性和功能實(shí)現(xiàn)的可靠性,本文還介紹了游戲軟件的程序調(diào)試過(guò)程和功能測(cè)試結(jié)果。1.2 目標(biāo)本軟件是針對(duì)貪吃蛇小游戲的JAVA程序,利用方向鍵來(lái)改變蛇的運(yùn)行方向,空格鍵暫停或繼續(xù)游戲,并在隨機(jī)的地方產(chǎn)生食物,吃到食物就變成新的蛇體,碰到壁或自身則游戲結(jié)束,否則正常運(yùn)行。2 總體設(shè)計(jì)2.1設(shè)計(jì)思路本系統(tǒng)主要是完成貪吃蛇游戲的基本操作。用戶可以自己練習(xí)和娛樂(lè)。本系統(tǒng)需要滿足以下幾點(diǎn)要求:(1) 利用方向鍵來(lái)改變蛇的運(yùn)行方向。(2) 空格鍵暫?;蚶^續(xù)游戲,并在隨機(jī)的地方產(chǎn)生食物。(3) 吃到食物就變成新的蛇體,碰到壁或自身則游戲結(jié)束,否則正
4、常運(yùn)行。2.2設(shè)計(jì)說(shuō)明本系統(tǒng)共包括1個(gè)java 源文件和 7個(gè)類文件。1. 類之間的關(guān)系如圖2.1 所示。SnakeGameSnakeFrameSnakeNodeSnakePanelStatusRunnableSnakeRunnable圖2.1 類之間的關(guān)系2 java 源文件及其功能如表所示。表 2.2java 源文件及其功能序號(hào)文件名主要功能1SnakeGame該文件為程序入口,含有main 方法。2SnakeFrame實(shí)現(xiàn)菜單控制運(yùn)行等總體要求,實(shí)現(xiàn)方向鍵控制蛇的方向,空格鍵控制游戲暫停或繼續(xù),還有分?jǐn)?shù)等。3Snake該文件實(shí)現(xiàn)蛇的結(jié)構(gòu)和具體運(yùn)動(dòng),如判斷食物是否和怎樣被吃掉及判斷后的動(dòng)作
5、。4Node該文件實(shí)現(xiàn)組成蛇身的單位- 食物。5SnakePanel該文件實(shí)現(xiàn)畫(huà)板功能,用紅藍(lán)間隔畫(huà)蛇身。6StatusRunnabl該文件為記錄狀態(tài)的線程。e7SnakeRunnable該文件為蛇運(yùn)動(dòng)以及記錄分?jǐn)?shù)的線程。3 關(guān)鍵技術(shù)3.1關(guān)鍵技術(shù)及實(shí)現(xiàn)程序關(guān)鍵在于表示蛇的圖形及蛇的移動(dòng)。用一個(gè)小矩形快表示蛇的一節(jié)身體,身體每長(zhǎng)一節(jié),增加一個(gè)矩形塊,蛇頭用倆節(jié)表示。移動(dòng)時(shí)必須從蛇頭開(kāi)始,所以蛇不能向相反的方向移動(dòng),如果不按任意鍵,蛇自行在當(dāng)前方向上前移,但按下有效方向鍵后,蛇頭朝著該方向移動(dòng),一步移動(dòng)一節(jié)身體,所以按下有效方向鍵后,先確定蛇頭的位置,而后蛇的身體隨蛇頭移動(dòng),圖形的實(shí)現(xiàn)是從蛇頭新
6、位置開(kāi)始畫(huà)出蛇,這時(shí),由于未清屏的原因,原來(lái)的蛇的位置和新蛇的位置差一個(gè)單位,所以看起來(lái)蛇多一節(jié)身體,所以將蛇的最后一節(jié)用背景色覆蓋。食物的出現(xiàn)與消失也是畫(huà)矩形塊和覆蓋矩形塊。3.2設(shè)計(jì)原理1. 主類 SnakeGame主類為此程序的入口,定義了SnakeFrame 的對(duì)象 frame, 開(kāi)始運(yùn)行此程序。2. 類 SnakeFrame( 1)成員變量見(jiàn)表 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蛇類對(duì)象private Snakesnake菜單條private JMenuBarbar游戲菜單JMenugameMenu幫助菜單JMenuhelpMenu速度菜單JMenuspeedMenu新菜單項(xiàng)JMenuItemnewItem暫停菜單項(xiàng)JMenuItempauseItem關(guān)于菜單項(xiàng)JMenuItemaboutItem慢菜單項(xiàng)JMenuItemslowItem中間菜單項(xiàng)JMenuItemmidItem快菜單項(xiàng)JMenuItemfastItem開(kāi)始菜單項(xiàng)JMenuItembeginItem幫助菜單項(xiàng)JMenuItemhelpItem( 2)方法見(jiàn)表3.2表
8、 3.2主要方法方法名功能SnakePanel()addKeyListenersetBounds()JLabel()JMenu()JMenuItem創(chuàng)建蛇的面板監(jiān)視器設(shè)置尺寸設(shè)置標(biāo)簽創(chuàng)建菜單構(gòu)造菜單項(xiàng)3. 類 Snake( 1)成員變量見(jiàn)表 3.3表 3.3 主要成員變量成員變量描述變量類型名稱是否運(yùn)動(dòng)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運(yùn)動(dòng)中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)方法見(jiàn)表 3.4表 3.4主要方法方法名功能判斷食物是否被蛇吃掉,如果食物在蛇isEaten()運(yùn)行方向的正前方
10、,并且與蛇頭接觸,則被吃掉isCollsion()判斷是否碰撞makeFood()在隨機(jī)的地方產(chǎn)生食物changeDerection(int改變運(yùn)行方向newDer)move()蛇在運(yùn)行中所采取的措施4. 類 Node( 1)成員變量見(jiàn)表 3.5表 3.5主要成員變量成員變量描述變量類型名稱食物塊寬public static final intW食物塊高public static final intH橫坐標(biāo)intx縱坐標(biāo)inty5. 類 SnakePanel此類為畫(huà)蛇的面板類,是實(shí)現(xiàn)紅藍(lán)間隔畫(huà)蛇身算法的類。6. 類 StatusRunnable此類為線程的子類,實(shí)現(xiàn)記錄狀態(tài)的功能。7. 類 S
11、nakeRunnable此類為線程的子類,實(shí)現(xiàn)蛇運(yùn)動(dòng)以及記錄分?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. 蛇運(yùn)動(dòng)以及記錄分?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. 在隨機(jī)的地方產(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. 改變運(yùn)行方向的代碼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 運(yùn)行結(jié)果6.1 各功能界面截圖1. 貪吃蛇游戲的基本運(yùn)行界面( 1)生成初始界面:圖 6.1初始界面( 2)游戲菜單欄 :圖 6.2游戲菜單欄( 3)速度菜單欄 :圖 6.3速度菜單欄2. 程序開(kāi)始運(yùn)行界面( 1)鼠標(biāo)點(diǎn)擊New Game按鈕,開(kāi)始游戲(紅色方塊為食物,藍(lán)黃相間為初始的蛇體):圖 6.4游戲初始界面( 2)按空格鍵,游戲開(kāi)始運(yùn)行,蛇開(kāi)始移動(dòng),并且吃到一次食物即紅色方塊后就變成蛇體
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鈍化層光熱轉(zhuǎn)換性能研究考核試卷
- 室內(nèi)游泳池設(shè)計(jì)考核試卷
- 保險(xiǎn)銷售中的心理投射與客戶信任建立分析考核試卷
- 期末模擬綜合試題-2024-2025學(xué)年人教版一年級(jí)數(shù)學(xué)下冊(cè)
- 乳品市場(chǎng)規(guī)模與增長(zhǎng)預(yù)測(cè)考核試卷
- 金屬基復(fù)合材料加工技術(shù)進(jìn)展考核試卷
- 化學(xué)實(shí)驗(yàn)基礎(chǔ)-高考化學(xué)二輪復(fù)習(xí)知識(shí)清單與專項(xiàng)練習(xí)(新高考專用)
- 化學(xué)品的合理使用 基礎(chǔ)檢測(cè)題-人教版高中化學(xué)必修第二冊(cè)
- 橋隧工高級(jí)模擬題(含參考答案解析)
- 期中考前沖刺復(fù)習(xí)之解答題-浙教版七年級(jí)數(shù)學(xué)下冊(cè)考點(diǎn)復(fù)習(xí)
- 校園超市經(jīng)營(yíng)投標(biāo)方案
- 心血管急危重癥診斷與處理
- 演出舞臺(tái)搭建施工方案
- 內(nèi)鏡室醫(yī)院感染預(yù)防與控制
- 機(jī)械公司生態(tài)環(huán)保C級(jí)申報(bào)資料
- 14 醫(yī)療器械分類目錄注輸、護(hù)理和防護(hù)器械說(shuō)明
- 70歲老人用工免責(zé)協(xié)議書(shū)
- 瓦工安全教育培訓(xùn)考試試卷模板
- 漢族民歌 課件-2024-2025學(xué)年高中音樂(lè)人音版(2019) 必修 音樂(lè)鑒賞
- 新聞采編與發(fā)布流程指南
- 《有限空間作業(yè)安全培訓(xùn)》
評(píng)論
0/150
提交評(píng)論