基于Java的貪吃蛇開發(fā)文檔_第1頁
基于Java的貪吃蛇開發(fā)文檔_第2頁
基于Java的貪吃蛇開發(fā)文檔_第3頁
基于Java的貪吃蛇開發(fā)文檔_第4頁
基于Java的貪吃蛇開發(fā)文檔_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、41中南林業(yè)科技大學(xué)小組軟件過程實驗實驗報告題目: 2D游戲貪食蛇軟件開發(fā) 專業(yè)班級: 11級軟件工程2班 組長: xxx 成員: xxxx 指導(dǎo)教師: xxxxx 完成日期: 2014/4/15 目 錄1 軟件項目開發(fā)計劃(頁碼)2 軟件需求規(guī)格說明書(頁碼)3 軟件配置管理計劃(頁碼)4 軟件設(shè)計規(guī)格說明(頁碼)5 軟件測試計劃(頁碼)6 軟件測試分析報告(頁碼)7 軟件項目開發(fā)總結(jié)報告(頁碼)附件A: 小組制定的軟件過程規(guī)范 (頁碼)附件B: 其他軟件開發(fā)過程記錄信息(頁碼)小組成員角色與分工情況表姓名職責(zé)和完成的工作項目組評定xxx組長,完成代碼,分配任務(wù)和總結(jié)良好xxx組員,完成部分

2、代碼和文檔五、六部分良好xxx組員,完成部分代碼和文檔三、四部分良好 xxx組員,完成部分代碼和文檔一、二部分良好一、軟件項目開發(fā)計劃完成人: xxxx 1引言1.1編寫目的本文檔的目的是明確基于JAVA的貪吃蛇項目的基本需求分析,明確項目中各個任務(wù)系統(tǒng)的不同分工,分析項目的核心功能和項目所需要達(dá)到的預(yù)期目標(biāo)。期望讀者包括:項目發(fā)起人、項目執(zhí)行團(tuán)隊、指導(dǎo)老師。1.2 背景 近年來,Java作為一種新的編程語言,以其簡單性、可移植性和平臺無關(guān)性等優(yōu)點,得到了廣泛地應(yīng)用,特別是Java與萬維網(wǎng)的完美結(jié)合,使其成為網(wǎng)絡(luò)編程和嵌入式編程領(lǐng)域的首選編程語言。貪吃蛇游戲的設(shè)計比較復(fù)雜,它涉及面廣、牽涉方面

3、多,如果不好好考慮和設(shè)計,將難以成功開發(fā)出這個游戲。在這個游戲的設(shè)計中,牽涉到圖形界面的顯示與更新、數(shù)據(jù)的收集與更新,并且在這個游戲的開發(fā)中,還要應(yīng)用類的繼承機(jī)制以及一些設(shè)計模式。因此,如何設(shè)計和開發(fā)好這個貪吃蛇游戲,對于提高Java開發(fā)水平和系統(tǒng)的設(shè)計能力有極大的幫助。在設(shè)計開發(fā)過程中,需要處理好各個類之間的繼承關(guān)系,還要處理各個類相應(yīng)的封裝,并且還要協(xié)調(diào)好各個模塊之間的邏輯依賴關(guān)系和數(shù)據(jù)通信關(guān)系。 “貪吃蛇”游戲是一個經(jīng)典的游戲,它因操作簡單、娛樂性強(qiáng)而廣受歡迎。本文基于Java技術(shù),開發(fā)了一個操作簡單、界面美觀、功能較齊全的“貪吃蛇”游戲。整個游戲程序分為二個功能模塊,四個類模塊,實現(xiàn)了

4、游戲的開始、暫停、結(jié)束。通過本游戲的開發(fā),達(dá)到學(xué)習(xí)Java技術(shù)和熟悉軟件開發(fā)流程的目的。1.3定義JAVA:Java是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言,是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計語言和java平臺的總稱。Java 技術(shù)具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應(yīng)用于個人PC、數(shù)據(jù)中心、游戲控制臺、科學(xué)超級計算機(jī)、移動電話和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群。在全球云計算和移動互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢和廣闊前景。運行環(huán)境:意指一種把半編譯的執(zhí)行碼在目標(biāo)機(jī)器上運行的環(huán)境。算法:算法可以理解為有基

5、本運算及規(guī)定的運算順序所構(gòu)成的完整的解題步驟?;蛘呖闯砂凑找笤O(shè)計好的有限的確切的計算序列,并且這樣的步驟和序列可以解決一類問題。編譯處理:利用編譯程序從源語言編寫的源程序產(chǎn)生目標(biāo)程序的過程;用編譯程序產(chǎn)生目標(biāo)程序的動作。 編譯就是把高級語言變成計算機(jī)可以識別的2進(jìn)制語言,計算機(jī)只認(rèn)識1和0,編譯程序把人們熟悉的語言換成2進(jìn)制的。 編譯程序把一個源程序翻譯成目標(biāo)程序的工作過程分為五個階段:詞法分析;語法分析;語義檢查和中間代碼生成;代碼優(yōu)化;目標(biāo)代碼生成。主要是進(jìn)行詞法分析和語法分析,又稱為源程序分析,分析過程中發(fā)現(xiàn)有語法錯誤,給出提示信息。調(diào)試運行:檢查和修改程序中的錯誤,保證它能正確無誤地

6、運行是程序設(shè)計工作中的重要一環(huán)。1.4參考資料1.Java從入門到精通 魔樂科技(MLDN)軟件實訓(xùn)中心編著/2010-04-01/人民郵電出版社2.Java編程思想(第4版) 2007-06-01/機(jī)械工業(yè)出版社3.輕量級Java EE企業(yè)應(yīng)用實戰(zhàn)(第3版)李剛 編著/2012-04-01/電子工業(yè)出版社4.瘋狂Java講義(第2版) 李剛編著/2012-01-01/電子工業(yè)出版社5.Java語言程序設(shè)計:基礎(chǔ)篇(第8版) (美)梁勇著,李娜譯/2011-06-01/機(jī)械工業(yè)出版社6.Effective Java中文版(第2版) (美)布洛克著,楊春花,俞黎敏機(jī)械工業(yè)出版社2項目概述2.1工

7、作內(nèi)容 本項目需開發(fā)出一個可以在windos操作系統(tǒng)上運行的貪吃蛇游戲,要用到J2EE開發(fā)環(huán)境和eclipse開發(fā)工具,使用的JDK版本為6.0。所需文檔包括可行性分析(研究)報告(FAR)和軟件需求規(guī)格說明書(SRS)。在系統(tǒng)生命周期中處于軟件開發(fā)時期。選用四人小組開發(fā)計劃,由四人配合一起完成軟件的開發(fā)。2.2主要參加人員xx 組長xxx 組員xx 組員xx 組員2.3產(chǎn)品2.3.1程序1. 對功能的規(guī)定本設(shè)計所開發(fā)的是基于Java的一個貪吃蛇游戲軟件,主要實現(xiàn)游戲的開始、暫停、退出等功能,分為:游戲主界面模塊、游戲控制模塊兩個模塊。游戲主界面模塊:主要包括游戲圖形區(qū)域界面、游戲開始、暫停、

8、退出、加速、減速。游戲控制模塊:主要完成游戲的開始、暫停、退出、加速、減速等功能。2. 對性能的規(guī)定本游戲在設(shè)計方面本著方便、實用及娛樂性高的宗旨,在對界面進(jìn)行設(shè)計的過程中,始終堅持清晰明了,在性能方面能夠?qū)崿F(xiàn)效率高,不易出錯等優(yōu)點。游戲主界面應(yīng)該力求美觀,賞心悅目。游戲控制模塊應(yīng)做到易懂、易操作,而且準(zhǔn)確率高,不易出錯。3. 輸入輸出要求輸入:玩家可以通過快捷鍵控制游戲,比如快捷鍵“ENTER”開始游戲,“空格”暫停游戲,“pageUp”貪食蛇加速,“pageDown”貪食蛇減速。鍵盤上的方向鍵控制蛇的移動方向。輸出:玩家所得的分?jǐn)?shù),玩家所用的時間。當(dāng)玩家所控制的蛇死亡后,要輸出一個提示消息

9、“OH,你死啦,需要重新開始么?”表示蛇的死亡,然后點擊確定重新開始游戲。4. 業(yè)務(wù)流程圖5. 數(shù)據(jù)流圖6. 功能分析圖2.3.3服務(wù)1. 設(shè)備WindowsXP2.支持軟件Eclipse3.接口KeyListener:監(jiān)聽按鍵,控制蛇的行動或游戲的運行;2.3.4非移交的產(chǎn)品測試版本:SG1.02.4驗收標(biāo)準(zhǔn)可運行的完整游戲程序。2.5完成項目的最遲期限 2014.4.162.6本計劃的批準(zhǔn)者和批準(zhǔn)日期3實施計劃3.1工作任務(wù)的分解與人員分工xxxx 任務(wù)分配,程序調(diào)試,代碼編寫,軟件開發(fā)項目總結(jié)xxx 程序調(diào)試,代碼編寫,計劃與需求文檔xx 程序調(diào)試,代碼編寫,設(shè)計規(guī)格說明書與軟件配置管理

10、計劃xx 程序調(diào)試,代碼編寫,軟件測試計劃與軟件測試分析報告3.2進(jìn)度對于需求分析、設(shè)計、編碼實現(xiàn)、測試、移交、培訓(xùn)和安裝等工作,給出每項工作任務(wù)的預(yù)定開始日期、完成日期及所需資源,規(guī)定各項工作任務(wù)完成的先后順序以及表征每項工作任務(wù)完成的標(biāo)志性事件(即所謂“里程碑)。3.3關(guān)鍵問題逐項列出能夠影響整個項目成敗的關(guān)鍵問題、技術(shù)難點和風(fēng)險,指出這些問題對項目的影響。4支持條件四臺能正常運行eclips的計算機(jī).二、需求規(guī)格說明書 完成人: xxx 1概述(Summary)1.1項目的目的與目標(biāo)(Purpose and Aim of Project)本系統(tǒng)主要是完成貪吃蛇游戲的基本操作。用戶可以自己

11、練習(xí)和娛樂。本系統(tǒng)需要滿足以下幾點要求:(1) 利用方向鍵來改變蛇的運行方向。 (2) 空格鍵暫?;蚶^續(xù)游戲,并在隨機(jī)的地方產(chǎn)生食物。 (3) 吃到食物就變成新的蛇體,碰到壁或自身則游戲結(jié)束,否則正常運行。2目標(biāo)系統(tǒng)功能需求(Function of Target System)本設(shè)計所開發(fā)的是基于Java的一個貪吃蛇游戲軟件,主要實現(xiàn)游戲的開始、暫停、退出等功能,分為:游戲主界面模塊、游戲控制模塊兩個模塊。游戲主界面模塊:主要包括游戲圖形區(qū)域界面、游戲開始、暫停、退出、減速、加速。游戲控制模塊:主要完成游戲的開始、暫停、退出等功能。3目標(biāo)系統(tǒng)性能需求(Performance of Target

12、 System)本游戲在設(shè)計方面本著方便、實用及娛樂性高的宗旨,在對界面進(jìn)行設(shè)計的過程中,始終堅持清晰明了,在性能方面能夠?qū)崿F(xiàn)效率高,不易出錯等優(yōu)點。4目標(biāo)系統(tǒng)界面與接口需求(Interface of Target System)4.1 界面需求(Interphase Requirement)游戲主界面應(yīng)該力求美觀,賞心悅目。游戲控制模塊應(yīng)做到易懂、易操作,而且準(zhǔn)確率高,不易出錯(。4.2 接口需求(Interface Requirement)無5目標(biāo)系統(tǒng)假設(shè)與約束條件(Suppose and Restriction of Target System)5.1. 設(shè)備WindowsXP5.2.支

13、持軟件Eclipse5.3.接口SnakeListener:Void SankeMoved(Snake); 三、軟件配置管理計劃完成人: xx 1.引言軟件配置管理計劃對于軟件開發(fā)管理是非常重要的,其主要思想在于版本控制。版本控制是軟件配置管理計劃的核心思想之一,是指對軟件開發(fā)過程中各種程序代碼、配置文件及說明文檔等文件變更的管理。版本控制最主要的功能就是追蹤文件的變更。它將什么時候、什么人更改了文件的什么內(nèi)容等信息忠實地記錄下來。每一次文件的改變,文件的版本號都將增加。除了記錄版本變更外,版本控制的另一個重要功能是并行開發(fā)1.目的 2D游戲貪食蛇軟件正常運行,記錄游戲運行時的各種狀態(tài),如:加

14、速、減速、重新開始以及暫停1.2 定義和縮寫詞 本計劃中用到的一些術(shù)語的定義按GB/T 11457 和GB/T 125041.3 參考資料GB/T 11457 軟件工程術(shù)語GB 8566 計算機(jī)軟件開發(fā)規(guī)范GB 8567 計算機(jī)軟件產(chǎn)品開發(fā)文件編制指南2 管理2.1 機(jī)構(gòu)在本游戲軟件整個開發(fā)期間,必須成立軟件配置管理小組負(fù)責(zé)配置管理工作。軟件配置管理人員應(yīng)該根據(jù)對該游戲的具體要求,制訂必要的規(guī)程和規(guī)定,以確保完全遵守本計劃規(guī)定的所有要求2.2 任務(wù)A .負(fù)責(zé)審定軟件基線的建立和配置的標(biāo)識B .實

15、施項目的配置好管理C .組長審核配置管理活動2.3 職責(zé)A對有關(guān)軟件配置管理的各項工作全面負(fù)責(zé),特別要對更改建議的審批和評審負(fù)責(zé);B負(fù)責(zé)監(jiān)督在軟件配置管理工作中認(rèn)真執(zhí)行軟件工程規(guī)范; C負(fù)責(zé)檢查配置更改時的質(zhì)量保證措施; D負(fù)責(zé)實施各自的配置管理工作,并參與游戲的功能配置檢查和物理配置檢查; E 用戶代表負(fù)責(zé)反映用戶對配置管理的要求,并協(xié)助檢查各類人員對軟件配置管理計劃的執(zhí)行情況; F負(fù)責(zé)審查所采用的配置管理工具、技術(shù)和方法,并負(fù)責(zé)匯總、維護(hù)和保存有關(guān)軟件配置管理活動的各項記錄2.4 接口控制KeyListener:按鍵控制Runnable:多線程Observer:觀察者模式2.5 實現(xiàn)

16、60; 建立軟件配置管理小組:在批準(zhǔn)軟件配置管理計劃之后,立即成立軟件配置管理小組。  建立各階段的配置基線:隨著貪食蛇軟件任務(wù)書的評審和批準(zhǔn),建立起功能基線;隨著貪食蛇游戲軟件需求規(guī)格說明書的批準(zhǔn),建立起指派基線;隨著游戲軟件的集成與系統(tǒng)測試的完成,建立起產(chǎn)品基線。 建立軟件庫:在本項目所屬的各個子系統(tǒng)的研制工作的開始,就建立起各個子系統(tǒng)的軟件開發(fā)庫,并在本項目配置管理小組的計算機(jī)上建立起有關(guān)該系統(tǒng)及其子系統(tǒng)的軟件受控庫。以后在每個開發(fā)階段的結(jié)束,建立各個子系統(tǒng)的新的開發(fā)庫,同時把這個階段的階段產(chǎn)品送入總的軟件受控庫,并在各個子系統(tǒng)的計算機(jī)上建立軟件受控庫的副本

17、。軟件受控庫必須以主軟件受控庫為準(zhǔn)。當(dāng)全部開發(fā)工作結(jié)束,在配置管理小組的計算機(jī)上建立起軟件產(chǎn)品庫,并在各子系統(tǒng)的計算機(jī)上建立軟件產(chǎn)品庫的副本3 軟件配置管理活動3.1 配置標(biāo)識標(biāo)題:貪食蛇(Snake Game)版本號:SG1.03.1.1 基線版本:“SG1.0”3.1.2 代碼,文檔GreedSnake:添加一個觀察者,開始游戲,多線程SnakeControl:監(jiān)聽處理,對按鍵進(jìn)行監(jiān)聽并產(chǎn)生行為SnakeModel:游戲模板,包括初始化蛇,對食物的初始化,分?jǐn)?shù)規(guī)則等SnakeView:游戲視圖,游戲的界面處理四、設(shè)計規(guī)格說明書完成人: xx 1引言(Introduction)本章對該文檔的

18、目的、功能范圍、術(shù)語、相關(guān)文檔、參考資料等進(jìn)行說明1.1 目的(Purpose)目的旨在推動軟件工程的規(guī)范化,使設(shè)計人員遵循統(tǒng)一的概要設(shè)計書寫規(guī)范,節(jié)省制作文檔的時間,降低系統(tǒng)實現(xiàn)的風(fēng)險,做到系統(tǒng)設(shè)計的規(guī)范性與全面性,以利于系統(tǒng)的實現(xiàn)、測試、維護(hù)、升級等1.2 命名規(guī)則(Naming Rule)變量對象命名規(guī)則:申明全局變量、局部變量對象的命名規(guī)則。數(shù)據(jù)庫對象命名規(guī)則:申明數(shù)據(jù)庫表名、字段名、索引名、視圖名等對象的命名規(guī)則。1.3 參考資料(References)1.Java從入門到精通 魔樂科技(MLDN)軟件實訓(xùn)中心編著/2010-04-01/人民郵電出版社2.Java編程思想(第4版)

19、2007-06-01/機(jī)械工業(yè)出版社3.輕量級Java EE企業(yè)應(yīng)用實戰(zhàn)(第3版)李剛 編著/2012-04-01/電子工業(yè)出版社4.瘋狂Java講義(第2版) 李剛編著/2012-01-01/電子工業(yè)出版社5.Java語言程序設(shè)計:基礎(chǔ)篇(第8版) (美)梁勇著,李娜譯/2011-06-01/機(jī)械工業(yè)出版社6.Effective Java中文版(第2版) (美)布洛克著,楊春花,俞黎敏機(jī)械工業(yè)出版社1.4 相關(guān)文檔(Related Documents)源程序GreedSnake:主體類public class GreedSnake public static void main(String

20、 args) SnakeModel model = new SnakeModel(20,30); SnakeControl control = new SnakeControl(model); SnakeView view = new SnakeView(model,control); /添加一個觀察者,讓view成為model的觀察者 model.addObserver(view); (new Thread(model).start(); SnakeControl:控制類import java.awt.event.KeyEvent;import java.awt.event.KeyListe

21、ner;public class SnakeControl implements KeyListener SnakeModel model;public SnakeControl(SnakeModel model) this.model = model;public void keyPressed(KeyEvent e) int keyCode = e.getKeyCode();if (model.running) / 運行狀態(tài)下,處理的按鍵switch (keyCode) case KeyEvent.VK_UP:model.changeDirection(SnakeModel.UP);bre

22、ak;case KeyEvent.VK_DOWN:model.changeDirection(SnakeModel.DOWN);break;case KeyEvent.VK_LEFT:model.changeDirection(SnakeModel.LEFT);break;case KeyEvent.VK_RIGHT:model.changeDirection(SnakeModel.RIGHT);break;case KeyEvent.VK_ADD:case KeyEvent.VK_PAGE_UP:model.speedUp();break;case KeyEvent.VK_SUBTRACT:

23、case KeyEvent.VK_PAGE_DOWN:model.speedDown();break;case KeyEvent.VK_SPACE:case KeyEvent.VK_P:model.changePauseState();break;default:/ 任何情況下處理的按鍵,按鍵導(dǎo)致重新啟動游戲if (keyCode = KeyEvent.VK_ENTER) model.reset();public void keyReleased(KeyEvent e) public void keyTyped(KeyEvent e) SnakeModel:模板類import javax.sw

24、ing.*;import java.util.Arrays;import java.util.LinkedList;import java.util.Observable;import java.util.Random;public class SnakeModel extends Observable implements Runnable boolean matrix; / 指示位置上有沒蛇體或食物 LinkedList nodeArray = new LinkedList(); / 蛇體 Node food; int maxX; int maxY; int direction = 2;

25、/ 蛇運行的方向 boolean running = false; / 運行狀態(tài) int timeInterval = 200; / 時間間隔,毫秒 double speedChangeRate = 0.75; / 每次得速度變化率 boolean paused = false; / 暫停標(biāo)志 int score = 0; / 得分 int countMove = 0; / 吃到食物前移動的次數(shù) / UP and DOWN should be even / RIGHT and LEFT should be odd public static final int UP = 2; public s

26、tatic final int DOWN = 4; public static final int LEFT = 1; public static final int RIGHT = 3; public SnakeModel( int maxX, int maxY) this.maxX = maxX; this.maxY = maxY; reset(); public void reset() direction = SnakeModel.UP; / 蛇運行的方向 timeInterval = 200; / 時間間隔,毫秒 paused = false; / 暫停標(biāo)志 score = 0; /

27、 得分 countMove = 0; / 吃到食物前移動的次數(shù) / initial matirx, 全部清0 matrix = new booleanmaxX; for (int i = 0; i < maxX; +i) matrixi = new booleanmaxY; Arrays.fill(matrixi, false); / initial the snake / 初始化蛇體,如果橫向位置超過20個,長度為10,否則為橫向位置的一半 int initArrayLength = maxX > 20 ? 10 : maxX / 2; nodeArray.clear(); fo

28、r (int i = 0; i < initArrayLength; +i) int x = maxX / 2 + i;/maxX被初始化為20 int y = maxY / 2; /maxY被初始化為30 /nodeArrayx,y: 10,15-11,15-12,1520,15 /默認(rèn)的運行方向向上,所以游戲一開始nodeArray就變?yōu)椋?/ 10,14-10,15-11,15-12,1519,15 nodeArray.addLast(new Node(x, y); matrixxy = true; / 創(chuàng)建食物 food = createFood(); matrixfood.xf

29、ood.y = true; public void changeDirection(int newDirection) / 改變的方向不能與原來方向同向或反向 if (direction % 2 != newDirection % 2) direction = newDirection; /* * 運行一次 * return */ public boolean moveOn() Node n = (Node) nodeArray.getFirst(); int x = n.x; int y = n.y; / 根據(jù)方向增減坐標(biāo)值 switch (direction) case UP: y-; b

30、reak; case DOWN: y+; break; case LEFT: x-; break; case RIGHT: x+; break; / 如果新坐標(biāo)落在有效范圍內(nèi),則進(jìn)行處理 if (0 <= x && x < maxX) && (0 <= y && y < maxY) if (matrixxy) / 如果新坐標(biāo)的點上有東西(蛇體或者食物) if (x = food.x && y = food.y) / 吃到食物,成功 nodeArray.addFirst(food); / 從蛇頭贈長 / 分?jǐn)?shù)

31、規(guī)則,與移動改變方向的次數(shù)和速度兩個元素有關(guān) int scoreGet = (10000 - 200 * countMove) / timeInterval; score += scoreGet > 0 ? scoreGet : 10; countMove = 0; food = createFood(); / 創(chuàng)建新的食物 matrixfood.xfood.y = true; / 設(shè)置食物所在位置 return true; else / 吃到蛇體自身,失敗 return false; else / 如果新坐標(biāo)的點上沒有東西(蛇體),移動蛇體 nodeArray.addFirst(new

32、 Node(x, y); matrixxy = true; n = (Node) nodeArray.removeLast(); matrixn.xn.y = false; countMove+; return true; return false; / 觸到邊線,失敗 public void run() running = true; while (running) try Thread.sleep(timeInterval); catch (Exception e) break; if (!paused) if (moveOn() setChanged(); / Model通知View數(shù)據(jù)

33、已經(jīng)更新 notifyObservers(); else int result=JOptionPane.showConfirmDialog(null, "OH,你死啦,需要重新開始么?", "Game Over", JOptionPane.OK_CANCEL_OPTION); if(result=0) reset(); else break; running = false; private Node createFood() int x = 0; int y = 0; / 隨機(jī)獲取一個有效區(qū)域內(nèi)的與蛇體和食物不重疊的位置 do Random r = n

34、ew Random(); x = r.nextInt(maxX); y = r.nextInt(maxY); while (matrixxy); return new Node(x, y); public void speedUp() timeInterval *= speedChangeRate; public void speedDown() timeInterval /= speedChangeRate; public void changePauseState() paused = !paused; public String toString() String result = &q

35、uot;" for (int i = 0; i < nodeArray.size(); +i) Node n = (Node) nodeArray.get(i); result += "" + n.x + "," + n.y + "" return result; class Node int x; int y; Node(int x, int y) this.x = x; this.y = y; SnakeView:視圖類import javax.swing.*;import java.awt.*;import ja

36、va.util.Iterator;import java.util.LinkedList;import java.util.Observable;import java.util.Observer;public class SnakeView implements Observer SnakeControl control = null; SnakeModel model = null; JFrame mainFrame; Canvas paintCanvas; JLabel labelScore; public static final int canvasWidth = 200; publ

37、ic static final int canvasHeight = 300; public static final int nodeWidth = 10; public static final int nodeHeight = 10; public SnakeView(SnakeModel model, SnakeControl control) this.model = model; this.control = control; mainFrame = new JFrame("GreedSnake"); mainFrame.setLocation(600, 200

38、); Container cp = mainFrame.getContentPane(); / 創(chuàng)建頂部的分?jǐn)?shù)顯示 labelScore = new JLabel("得分:"); cp.add(labelScore, BorderLayout.NORTH); / 創(chuàng)建中間的游戲顯示區(qū)域 paintCanvas = new Canvas(); paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1); paintCanvas.addKeyListener(control); cp.add(paintCanvas, Borde

39、rLayout.CENTER); / 創(chuàng)建底下的幫助欄 JPanel panelButtom = new JPanel(); panelButtom.setLayout(new BorderLayout(); JLabel labelHelp; labelHelp = new JLabel("PageUp:加速, PageDown:減速", JLabel.LEFT); panelButtom.add(labelHelp, BorderLayout.NORTH); labelHelp = new JLabel("ENTER:重新開始", JLabel.LE

40、FT); panelButtom.add(labelHelp, BorderLayout.CENTER); labelHelp = new JLabel("SPACE:暫停", JLabel.LEFT); panelButtom.add(labelHelp, BorderLayout.SOUTH); cp.add(panelButtom, BorderLayout.SOUTH); mainFrame.addKeyListener(control); mainFrame.pack(); mainFrame.setResizable(false); mainFrame.setD

41、efaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainFrame.setVisible(true); void repaint() Graphics g = paintCanvas.getGraphics(); /draw background g.setColor(Color.WHITE); g.fillRect(0, 0, canvasWidth, canvasHeight); / draw the snake g.setColor(Color.BLACK); LinkedList na = model.nodeArray; Iterator it

42、 = na.iterator(); while (it.hasNext() Node n = (Node) it.next(); drawNode(g, n); / draw the food g.setColor(Color.RED); Node n = model.food; drawNode(g, n); updateScore(); private void drawNode(Graphics g, Node n) g.fillRect(n.x * nodeWidth, n.y * nodeHeight, nodeWidth - 1, nodeHeight - 1); public v

43、oid updateScore() String s = "得分: " + model.score; labelScore.setText(s); public void update(Observable o, Object arg) repaint(); 2系統(tǒng)設(shè)計(Design of Collective)2.1 體系結(jié)構(gòu)設(shè)計(Design of Architecture)采用包圖畫出體統(tǒng)的體系結(jié)構(gòu)模型,然后進(jìn)行擴(kuò)展,畫出個子系統(tǒng)內(nèi)構(gòu)成及模塊之間的關(guān)系。2.2 模塊設(shè)計(Module Design)對象類用類圖說明各個類屬性和方法以及類之間的關(guān)系,對于復(fù)雜對象要畫出狀

44、態(tài)圖。2.3 功能模塊清單(Module List)模塊(類)清單表3-3 模塊清單模 塊 編 號模塊英文名模塊功能簡述模塊的接口簡述M 1-1GreedSnake主體類,添加一個觀察者,開始游戲無M 2-1SnakeControl監(jiān)聽按鍵,對游戲控制進(jìn)行處理KeyListener:按鍵的監(jiān)聽M 2-2SnakeModel游戲基礎(chǔ)的定義,例如蛇的初始化,食物的初始化,分?jǐn)?shù)初始化等Runnable:多線程M 2-3SnakeView游戲視圖,對游戲的窗口樣式進(jìn)行定義,規(guī)劃Observer:觀察者模式五、軟件測試計劃 完成人: xx 1引言1.1編寫目的本測試計劃文檔作為指導(dǎo)此測試項目循序漸進(jìn)的基礎(chǔ),幫助我們安排合適的資源和進(jìn)度,避免可能的風(fēng)險。本文檔有助于實現(xiàn)以下目標(biāo):1) 確定現(xiàn)有項目的信息和應(yīng)測試的軟件結(jié)構(gòu)。2) 列出推薦的測試需求3) 推薦可采用的測試策略,并對這些策略加以詳細(xì)說明4) 確定所需的資源,并對測試的工作量進(jìn)行估計。5) 列出測試項目的可交付元素,包括用例以及測試報告等。1.2背景軟件系統(tǒng)名稱:

溫馨提示

  • 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

提交評論