版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 android實(shí)訓(xùn)項(xiàng)目院系:計(jì)算機(jī)與信息工程系 班級(jí):10軟件技術(shù) 姓名: 學(xué)號(hào):“貪吃蛇”游戲是一個(gè)經(jīng)典的游戲,它因操作簡單、娛樂性強(qiáng)而廣受歡迎。本文基于java技術(shù),開發(fā)了一個(gè)操作簡單、界面美觀、功能較齊全的“貪吃蛇”游戲。整個(gè)游戲程序分為二個(gè)功能模塊,六個(gè)類模塊,實(shí)現(xiàn)了游戲的開始、暫停、結(jié)束。通過本游戲的開發(fā),達(dá)到學(xué)習(xí)java技術(shù)和熟悉軟件開發(fā)流程的目的。本文在介紹java相關(guān)技術(shù)和國內(nèi)外發(fā)展現(xiàn)狀的基礎(chǔ)上,對“貪吃蛇”游戲的整個(gè)生命周期的各個(gè)開發(fā)階段進(jìn)行了詳細(xì)地介紹。首先,分析了開發(fā)本游戲軟件的可行性,重點(diǎn)分析本設(shè)計(jì)所采用的技術(shù)的可行性。其次,從游戲主界面等幾方面,分析了本游戲的功能需
2、求;從可使用性和安全性方面分析了屬性需求。然后,進(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圖,列表介紹了各個(gè)類包含的變量、使用的方法,展示了游戲的界面。為了保證程序代碼的正確性和功能實(shí)現(xiàn)的可靠性,本文還介紹了游戲軟件的程序調(diào)試過程和功能測試結(jié)果。一、研究目的程序關(guān)鍵在于表示蛇的圖形及蛇的移動(dòng)。用一個(gè)小矩形快表示蛇的一節(jié)身體,身體每長一節(jié),增加一個(gè)矩形塊,蛇頭用倆節(jié)表示。移動(dòng)時(shí)必須從蛇頭開始,所以蛇不能向相反的方向移動(dòng),如果不按任意鍵,蛇自行在
3、當(dāng)前方向上前移,但按下有效方向鍵后,蛇頭朝著該方向移動(dòng),一步移動(dòng)一節(jié)身體,所以按下有效方向鍵后,先確定蛇頭的位置,而后蛇的身體隨蛇頭移動(dòng),圖形的實(shí)現(xiàn)是從蛇頭新位置開始畫出蛇,這時(shí),由于未清屏的原因,原來的蛇的位置和新蛇的位置差一個(gè)單位,所以看起來蛇多一節(jié)身體,所以將蛇的最后一節(jié)用背景色覆蓋。食物的出現(xiàn)與消失也是畫矩形塊和覆蓋矩形塊。為了便于理解,定義兩個(gè)結(jié)構(gòu)體:食物與蛇 目的 本程序?qū)崿F(xiàn)主要技巧在于java語言的應(yīng)用。目的在于提高編程的水平。二、系統(tǒng)需求分析1. 需求分析本系統(tǒng)主要是完成貪吃蛇游戲的基本操作。用戶可以自己練習(xí)和娛樂。本系統(tǒng)需要滿足以下幾點(diǎn)要求:(1) 利用方向鍵來改變蛇的運(yùn)行方
4、向。(2) 空格鍵暫?;蚶^續(xù)游戲,并在隨機(jī)的地方產(chǎn)生食物。(3) 吃到食物就變成新的蛇體,碰到壁或自身則游戲結(jié)束,否則正常運(yùn)行。 2.可行性分析貪吃蛇游戲是一種簡單的大眾的游戲,自從計(jì)算機(jī)實(shí)現(xiàn)以來,深受廣大電腦玩家的喜愛,做一個(gè)簡單的貪吃蛇小游戲。貪吃蛇的核心算法時(shí)如何實(shí)現(xiàn)移動(dòng)和吃掉食物,沒有碰到食物的時(shí)候,把當(dāng)前運(yùn)動(dòng)方向上的下個(gè)節(jié)點(diǎn)入隊(duì),并以蛇節(jié)點(diǎn)的顏色繪制這個(gè)節(jié)點(diǎn),然后把頭指針?biāo)傅墓?jié)點(diǎn)出隊(duì),并以游戲框架內(nèi)部背景色重繪出隊(duì)的節(jié)點(diǎn),這樣就可以達(dá)到移動(dòng)的效果。而在吃到食物的時(shí)候,則只需把食物入隊(duì)即可。實(shí)現(xiàn)貪吃蛇的基本的蛇身移動(dòng)、吃到食物身體增長、和碰到墻壁或自身死亡,能夠暫停和開始。本次設(shè)計(jì)我
5、將主要運(yùn)用java語言來完成。java語言是一種跨平臺(tái),適合于分布式計(jì)算環(huán)境的面向?qū)ο缶幊陶Z言,用java寫的應(yīng)用程序不用修改就可在不同的軟硬件平臺(tái)上運(yùn)行。三、設(shè)計(jì)方案本次設(shè)計(jì)的重點(diǎn)之處在于編程思想的形成,設(shè)計(jì)圖像界面,產(chǎn)生隨機(jī)食物及其位置。同時(shí)通過軟件工具的處理,將其轉(zhuǎn)換為exe文件,使得該程序的運(yùn)行可以隨處運(yùn)行,而不需要安裝java虛擬機(jī)。難點(diǎn)程序編寫中,整個(gè)程序框架的架構(gòu)。這就要求我們不僅要對這個(gè)游戲的玩法特別熟悉,而且還要熟練掌握java語言。這個(gè)程序的關(guān)鍵是表示蛇的圖形以及蛇的移動(dòng)。用一個(gè)小矩形表示蛇的一節(jié)身體,身體每長一節(jié),增加一個(gè)矩形塊。移動(dòng)時(shí)必須從蛇頭開始,所以蛇不能向相反方向
6、移動(dòng),也就是蛇尾不能改作蛇頭。如果不按任何鍵,蛇自行在當(dāng)前方向上前移,當(dāng)游戲者按了有效的方向鍵后,蛇頭朝著指定的方向移動(dòng),一步移動(dòng)一節(jié)身體,所以當(dāng)按了有效的方向鍵后,先確定蛇頭的位置,然后蛇身體隨著蛇頭移動(dòng),圖形的實(shí)現(xiàn)是從蛇頭的新位置開始畫出蛇。四、貪吃蛇游戲的基本運(yùn)行界面五、代碼package entity;import java.awt.color;import java.awt.graphics;import java.util.linkedlist;import control.controller;import service.serviceimp;import view.pane;
7、public class snake private linkedlist body = new linkedlist(); private int dir; private bean bean; private controller controller; public static final int up = -1; public static final int down = 1; public static final int left = -10; public static final int right = 10; public snake() init(); public v
8、oid setbean(bean bean) this.bean = bean; public void setcontroller(controller controller) this.controller = controller; public void setdir(int dir) this.dir = dir; public int getdir() return this.dir; public void init() body.clear(); body.add(new unit(10,10); body.add(new unit(9,10); body.add(new un
9、it(8,10); body.add(new unit(7,10); this.dir = snake.right; public void paintme(graphics g) g.setcolor(color.green); for(unit unit:body) unit.paint(g); public boolean contains(int x,int y) return body.contains(new unit(x,y); public void move() unit head = body.getfirst(); int x = head.getx()/unit.len
10、gth+dir/10; int y = head.gety()/unit.length+dir%10; if(this.contains(x, y) controller.gameover(); return;/remember this! /穿越四周 if(x=pane.length/unit.length) x = 0; else if(x=pane.width/unit.length) y = 0; else if(y0) y = pane.width/unit.length; /如果吃到豆子,就重新生成 if(bean.contains(x,y) system.out.println(
11、well done!); controller.setscore(controller.getscore()+1); bean.init(); body.addfirst(new unit(x,y); return; body.addfirst(new unit(x,y); body.removelast(); package entity;import java.awt.color;import java.awt.graphics;import java.util.random;import view.pane;public class bean private unit bean = ne
12、w unit(); private snake snake; public void setsnake(snake snake) this.snake = snake; public bean() public void init() random r = new random(); while(true) int x = r.nextint(pane.length/unit.length); int y = r.nextint(pane.width/unit.length); if(snake.contains(x, y) continue; this.bean = new unit(x,y
13、); break; public void paintme(graphics g) g.setcolor(color.red); bean.paint(g); public boolean contains(int x,int y) return bean.equals(new unit(x,y); package entity;import java.awt.graphics;/* * 單元格(構(gòu)成蛇和豆子的基本單位) */public class unit public static final int length = 15; private int x; private int y;
14、public unit() public unit(int x,int y) this.x = x*unit.length; this.y = y*unit.length; public void paint(graphics g) g.fill3drect(x, y, unit.length, unit.length, true); override public boolean equals(object obj) if(obj = this) return true; if(obj instanceof unit) unit u = (unit)obj; return this.x=u.
15、x & this.y=u.y; return false; override public int hashcode() return this.x+this.y; public int getx() return x; public int gety() return y; package control;/* * 控制器 */import java.awt.jobattributes;import java.awt.event.keyadapter;import java.awt.event.keyevent;import javax.swing.joptionpane;import se
16、rvice.service;import view.snakeframe;public class controller extends keyadapter private snakeframe snakeframe; private service service; private int score; public void setsnakeframe(snakeframe snakeframe) this.snakeframe = snakeframe; public void setservice(service sevice) this.service = sevice; publ
17、ic void setscore(int score) this.score = score; public int getscore() return this.score; public void changedir(int keycode) service.changedirection(keycode); public void start() snakeframe.updatebtn(false,true,true,true); service.startgame(); public void pause() service.pausegame(); public void restart() int value = joptionpane.showconfirmdialog(snakeframe, 確定要重新開始嗎?); if(value = joptionpane.yes_option) service.restartgame(); public void exit() int value = joptionpane.showconfi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 場所機(jī)械租賃合同范例
- 2025水暖工程合同大全
- 教育機(jī)構(gòu)中介合同范例
- 2025合同結(jié)算流程(試行)
- 石材純安裝合同范例
- 2025飯店承包經(jīng)營合同
- 公司合作合同范例4篇
- 報(bào)關(guān)咨詢服務(wù)合同范例
- 銅陵職業(yè)技術(shù)學(xué)院《中學(xué)物理專題訓(xùn)練與研究》2023-2024學(xué)年第一學(xué)期期末試卷
- 完整版100以內(nèi)加減法混合運(yùn)算4000道46
- 高考英語單項(xiàng)選擇題題庫題
- 檢驗(yàn)檢測機(jī)構(gòu)資質(zhì)認(rèn)定現(xiàn)場評審日程表及簽到表
- 完整版高低壓開關(guān)柜投標(biāo)文件技術(shù)標(biāo)
- 蘭州市行政區(qū)劃代碼表
- 鐵路貨場平面圖和縱斷面CAD(共3頁)
- 管鮑之交-歷史劇劇本(共4頁)
- [交流][jtag]跟我學(xué)jtag協(xié)議破解——第一彈初識(shí)jtagtap狀態(tài)機(jī)
- 尼康FM2說明書25頁
- You-are-My-Sunshine中英文歌詞
- 甲醇制氫裝置冷凝器(E0103)設(shè)計(jì)
- 學(xué)校德育活動(dòng)安排表
評論
0/150
提交評論