貪吃蛇的研究與設(shè)計(jì)_第1頁
貪吃蛇的研究與設(shè)計(jì)_第2頁
貪吃蛇的研究與設(shè)計(jì)_第3頁
貪吃蛇的研究與設(shè)計(jì)_第4頁
貪吃蛇的研究與設(shè)計(jì)_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余41頁可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、廣東技術(shù)師范學(xué)院天河學(xué)院JAVA程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告題目:貪吃蛇的研究與設(shè)計(jì)學(xué)號(hào):學(xué)120415432102012041543210 2012041543210 班級(jí): 本軟件122班小組成員:林盛東郭威彭更明 指導(dǎo)教師:鄭英姿所屬系部:計(jì)算機(jī)科學(xué)與技術(shù)系2014年4月25日貪吃蛇的研究與設(shè)計(jì)摘 要近年來,Java作為一種新的編程語言,以其簡(jiǎn)單性、可移植性和平臺(tái)無關(guān)性等優(yōu)點(diǎn), 得到了廣泛地應(yīng)用,特別是 Java與萬維網(wǎng)的完美結(jié)合,使其成為網(wǎng)絡(luò)編程和嵌入式編 程領(lǐng)域的首選編程語言?!柏澇陨摺庇螒蚴且粋€(gè)經(jīng)典的游戲,它因操作簡(jiǎn)單、娛樂性強(qiáng)而廣受歡迎。本文基 于Java技術(shù)和NetBeans開發(fā)環(huán)境,

2、開發(fā)了一個(gè)操作簡(jiǎn)單、界面美觀、功能較齊全的 “貪吃蛇”游戲。整個(gè)游戲程序分為二個(gè)功能模塊,八個(gè)類模塊,實(shí)現(xiàn)了游戲的開始、暫停、結(jié)束。通過本游戲的開發(fā),達(dá)到學(xué)習(xí) Java技術(shù)和熟悉軟件開發(fā)流程的目的。 本文在介紹Java相關(guān)技術(shù)和國內(nèi)外發(fā)展現(xiàn)狀的基礎(chǔ)上,對(duì)“貪吃蛇”游戲的整個(gè)生命 周期的各個(gè)開發(fā)階段進(jìn)行了詳細(xì)地介紹。首先,分析了開發(fā)本游戲軟件的可行性,重點(diǎn) 分析本設(shè)計(jì)所采用的技術(shù)的可行性。其次,從游戲主界面等幾方面,分析了本游戲的功 能需求;從可使用性和安全性方面分析了屬性需求。然后,進(jìn)行了游戲的概要設(shè)計(jì)和詳 細(xì)設(shè)計(jì),這也是本文的重點(diǎn)。概要設(shè)計(jì)給出二個(gè)功能模塊的主框架以及八個(gè)類模塊的函 數(shù)調(diào)用關(guān)

3、系;詳細(xì)設(shè)計(jì)介紹了 Java2標(biāo)準(zhǔn)運(yùn)行環(huán)境的配置,重點(diǎn)給出各個(gè)類模塊的程序列表,介紹了各個(gè)類包含的變量、使用的方法,展示了游戲的界面。為了保證程序代碼的正確性和功能實(shí)現(xiàn)的可靠性,本文還介紹了游戲軟件的程序調(diào)試過程和功能測(cè)試結(jié) 果。關(guān)鍵詞:Java; NetBeans ;貪吃蛇;開發(fā)流程摘要 I1引言3.1.1 課題介紹3.1.2 設(shè)計(jì)的背景和意義4.2系統(tǒng)分析4.2.1 可行性分析.42.2 系統(tǒng)需求分析 功能需求 性能需求 界面需求6.2.3 開發(fā)環(huán)境63系統(tǒng)概要設(shè)計(jì) 7.3.1 程序流程圖7.3.2 類模塊設(shè)計(jì) .8.3.3 系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 8.

4、3.3.1 蛇、食物的表示 蛇的移動(dòng) 存儲(chǔ)蛇身的數(shù)據(jù)結(jié)構(gòu) 蛇的移動(dòng)方向 如何顯示蛇身 蛇身的移動(dòng)方向 吃到食物判定.104系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn) 104.1 程序設(shè)計(jì).1 主類 Main1 04.1.2 類MainGui .104.1.3 類Snake 類Food 類Box 類SnakeKeyListener 類Clock 類 PropertyPanel 1.44.2 各功能界面截圖 貪吃蛇

5、游戲的基本運(yùn)行界面 程序開始運(yùn)行界面1.55測(cè)試1.65.1測(cè)試的意義1.6.6結(jié)論17參考文獻(xiàn).18附錄主要代碼清單1.91引言1.1 課題介紹貪吃蛇是世界知名的益智類小游戲, 選擇這個(gè)題目一方面的原因是為了將我們自己 的所學(xué)知識(shí)加以運(yùn)用;另一方面,雖然很小就接觸這個(gè)游戲,但是它的制作方法對(duì)我們 而言還是很神秘的。我們希望通過自己的所學(xué)知識(shí)把它剖析開來,通過自己的動(dòng)手實(shí)踐,真正的了解它的本質(zhì)和精髓。希望通過這次實(shí)踐,我們能從中提高自己的編程能力。并從中學(xué)會(huì)從零開始分析設(shè)計(jì)程序0本游戲的開發(fā)語言為Java。開發(fā)工具選用NetBeans。Java是一種簡(jiǎn)單的,面向 對(duì)象的,分布

6、式的,解釋型的,健壯安全的,結(jié)構(gòu)中立的,可移植的,性能優(yōu)異、多線 程的動(dòng)態(tài)語言。這里采用Java作為開發(fā)語言主要是基于Java的面向?qū)ο蠛涂梢浦残浴?NetBeans是一個(gè)開放源代碼的、基于 Java的可擴(kuò)展開發(fā)平臺(tái)。就其本身而言,它只 是一個(gè)框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)的方式。數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種 特定關(guān)系的數(shù)據(jù)元素的集合。通常情況下,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來更高的運(yùn)行或 者存儲(chǔ)效率。數(shù)據(jù)結(jié)構(gòu)往往同高效的檢索算法和索引技術(shù)有關(guān)。類是 面向?qū)ο蟪绦蛟O(shè)計(jì)語言中的一個(gè)概念。類(Class)實(shí)際上是對(duì)某種類型的對(duì)象定義變量和方法的原型。

7、它表示對(duì)現(xiàn)實(shí)生 活中一類具有共同特征的事物的抽象,是面向?qū)ο缶幊痰幕A(chǔ)。類是對(duì)某個(gè)對(duì)象的定義。它包含有關(guān)對(duì)象動(dòng)作方式的信息,包括它的名稱、方法、 屬性和事件。實(shí)際上它本身并不是對(duì)象,因?yàn)樗淮嬖谟趦?nèi)存中。當(dāng)引用類的代碼運(yùn)行時(shí),類的一個(gè)新的實(shí)例,即對(duì)象,就在內(nèi)存中創(chuàng)建了。雖然只有一個(gè)類,但能從這個(gè)類在內(nèi)存中創(chuàng)建多個(gè)相同類型的對(duì)象1.2 設(shè)計(jì)的背景和意義貪吃蛇游戲一款非常經(jīng)典的手機(jī)游戲,因?yàn)樗容^簡(jiǎn)單有趣,無論老少都比較適合。貪 吃蛇的設(shè)計(jì)對(duì)每一個(gè)Java語言設(shè)計(jì)者進(jìn)行語言提高和進(jìn)階都是一個(gè)很好的鍛煉機(jī)會(huì)。貪吃蛇游戲的設(shè)計(jì)比較復(fù)雜,它涉及面廣、牽涉方面多,如果不好好考慮和設(shè)計(jì), 將難以成功開發(fā)出這

8、個(gè)游戲。在這個(gè)游戲的設(shè)計(jì)中,牽涉到圖形界面的顯示與更新、數(shù) 據(jù)的收集與更新,并且在這個(gè)游戲的開發(fā)中,還要應(yīng)用類的繼承機(jī)制以及一些設(shè)計(jì)模式。 因此,如何設(shè)計(jì)和開發(fā)好這個(gè)貪吃蛇游戲,對(duì)于提高Java開發(fā)水平和系統(tǒng)的設(shè)計(jì)能力有極大的幫助。在設(shè)計(jì)開發(fā)過程中,需要處理好各個(gè)類之間的繼承關(guān)系,還要處理各個(gè) 類相應(yīng)的封裝,并且還要協(xié)調(diào)好各個(gè)模塊之間的邏輯依賴關(guān)系和數(shù)據(jù)通信關(guān)系。正是因?yàn)槿绱?,本次畢業(yè)設(shè)計(jì)的目的在于學(xué)習(xí)Java程序設(shè)計(jì)基本技術(shù),學(xué)習(xí)用NetBeans開發(fā)Java程序的相關(guān)技術(shù),熟悉游戲“貪吃蛇”的需求,熟悉項(xiàng)目開發(fā)的 完整過程。學(xué)會(huì)怎樣進(jìn)行一個(gè)項(xiàng)目的需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)等軟件開發(fā)過程,

9、 熟練地掌握J(rèn)ava程序設(shè)計(jì)的基本技術(shù)和方法,熟練地掌握NetBeans環(huán)境的使用方法, 培養(yǎng)起初步的項(xiàng)目分析能力和程序設(shè)計(jì)能力。2系統(tǒng)分析2.1 可行性分析貪吃蛇游戲是一種簡(jiǎn)單的大眾的游戲,自從計(jì)算機(jī)實(shí)現(xiàn)以來,深受廣大電腦玩家的 喜愛,做一個(gè)簡(jiǎn)單的貪吃蛇小游戲。貪吃蛇的核心算法時(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)、吃到食物身 體增長(zhǎng)、和碰到墻壁或自身死亡,能夠暫

10、停和開始。本次設(shè)計(jì)我將主要運(yùn)用java語言來完成。Java語言是一種跨平臺(tái),適合于分布式 計(jì)算環(huán)境的面向?qū)ο缶幊陶Z言,用 Java寫的應(yīng)用程序不用修改就可在不同的軟硬件平 臺(tái)上運(yùn)行。由于Java主要用于網(wǎng)絡(luò)應(yīng)用程序開發(fā),因此對(duì)安全性有較高的要求。如果沒 有安全保證,用戶從網(wǎng)絡(luò)下載程序執(zhí)行就非常危險(xiǎn)。Java通過自己的安全機(jī)制防止了病 毒程序的產(chǎn)生和下載程序?qū)Ρ镜叵到y(tǒng)的威脅破壞。2.2 系統(tǒng)需求分析2.2.1 功能需求本系統(tǒng)主要是完成貪吃蛇游戲的基本操作。用戶可以自己練習(xí)和娛樂。本系統(tǒng)需要 滿足以下幾點(diǎn)要求:(1)利用方向鍵來改變蛇的運(yùn)行方向。(2)空格鍵暫?;蚶^續(xù)游戲,并在隨機(jī)的地方產(chǎn)生食物。

11、(3)吃到食物就變成新的蛇體,碰到墻或者自身則游戲結(jié)束,否則正常運(yùn)行。2.2.2 性能需求本軟件在設(shè)計(jì)方面本著方便、實(shí)用及娛樂性高的宗旨,在對(duì)界面進(jìn)行設(shè)計(jì)的過程中, 始終堅(jiān)持清晰明了,在性能方面能夠?qū)崿F(xiàn)效率高,不易出錯(cuò)等優(yōu)點(diǎn)。2.2.3 界面需求游戲主界面模塊:主要包括游戲圖形區(qū)域界面、游戲開始按鈕、暫停游戲按鈕、關(guān) 閉按鈕。游戲的主界面力求美觀,爽心悅目。游戲控制模塊:主要完成控制游戲的開始、暫停、退出等功能,這部分做到易懂、 易操作而且準(zhǔn)確率高,不易出錯(cuò)。游戲的主界面是進(jìn)入游戲后,能夠給玩家第一感官的部分,主要包括游戲圖形區(qū)域 界面、游戲的速度選擇更新界面、游戲分?jǐn)?shù)的顯示更新界面、新生方塊

12、的預(yù)覽、游戲開 始按鈕、暫停游戲按鈕、退出游戲按鈕以及游戲排行榜按鈕。從很大程度上決定了玩家 對(duì)游戲的興趣問題,因此,游戲的主界面力求美觀,爽心悅目。游戲控制模塊是游戲的中心環(huán)節(jié),主要完成控制游戲的開始、暫停、退出等功能。 為了能夠給玩家一個(gè)很好的游戲環(huán)境,這部分做到易懂、易操作。2.3 開發(fā)環(huán)境操作系統(tǒng)及版本:Windows7工具軟件:jdk1.7 , NetBeans編程語百:JAVA語百3系統(tǒng)概要設(shè)計(jì)3.1程序流程圖圖1游戲處理流 程3.2 類模塊設(shè)計(jì)本系統(tǒng)共包括8個(gè)類文件。java源文件及其功能如表所示表3.1 java源文件及其功能序號(hào)文件名主要功能1Main該文件為程序入口,含有m

13、ain方法。2MainGui主界面類,該類用來創(chuàng)建游戲的用戶界面,繼承自JFrame類。對(duì)主窗口的屬性的設(shè)置、注冊(cè)監(jiān)聽者等3SnakeKeyListener蛇的監(jiān)聽器,根據(jù)按鍵改變蛇的方向、速度等設(shè)置4Food該文件實(shí)現(xiàn)組成蛇身的單位 -食物。5Box該文件實(shí)現(xiàn)蛇的活動(dòng)場(chǎng)所6Snake該文件實(shí)現(xiàn)蛇類,包含有美蛇的方法屬性7Clock該文件為工具類,實(shí)現(xiàn)時(shí)間,速度的控制8PropertyPanelsettingPanel的可視化設(shè)置.設(shè)置游戲運(yùn)行狀態(tài),移動(dòng)以及分?jǐn)?shù)更新,實(shí)現(xiàn)上下左右移動(dòng)的方法接口。3.3 系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)3.3.1 蛇、食物的表示我們可以把顯示區(qū)域想象成一個(gè)大大的表格,里面的格子

14、就是組成蛇的基本單位,一個(gè)格 子可以代表一個(gè)食物,使用坐標(biāo)來區(qū)分這些格子。3.3.2 蛇的移動(dòng)蛇向前移動(dòng)一步,可以看作是蛇頭前面增加了一個(gè)節(jié)點(diǎn),蛇的尾巴上少了一個(gè)節(jié)點(diǎn)(即去尾,加頭)3.3.3 存儲(chǔ)蛇身的數(shù)據(jù)結(jié)構(gòu)由于要區(qū)分蛇頭和蛇尾,因此這個(gè)數(shù)據(jù)結(jié)構(gòu)必須是有序的。另一方面,我們需要經(jīng)常的訪問第一個(gè)和最后一個(gè)節(jié)點(diǎn),所以LinkedList最合適。因?yàn)樗?getFirst() , getLast(),和removeLast()方法。3.3.4 蛇的移動(dòng)方向這里討論蛇的移動(dòng)方向控制。蛇下一步移動(dòng)到哪里,是由方向來控制的。這里我們用int型常量來表示蛇的移動(dòng)方向。因?yàn)槲覀兪歉鶕?jù)原蛇頭的坐標(biāo)和方向來確

15、定新蛇頭的坐標(biāo)。在原坐標(biāo)的基礎(chǔ)上,根據(jù)蛇頭的運(yùn)動(dòng)方向來確定新蛇頭的坐標(biāo),比如向上移動(dòng)就是y- 如何顯示蛇身顯示蛇身,其實(shí)就是填充用顏色填充格子。需要4個(gè)參數(shù),像素坐標(biāo)x,像素坐標(biāo)y,格子寬度,格子高度。像素坐標(biāo)就是矩形左上角的坐標(biāo)3.3.6 蛇身的移動(dòng)方向(1)相反方向和上一次移動(dòng)的方向相反的方向稱為相反方向,這種輸入應(yīng)該忽略。這樣可以防止蛇從自己的 身體中穿過。(2)無效方向在蛇的這一次移動(dòng)之后和下一次移動(dòng)之前這個(gè)時(shí)間間隔內(nèi)輸入了多個(gè)非相反方向,只有最后一 個(gè)是有效方向,其他的都是無效方向。蛇的最終運(yùn)動(dòng)方向以有效方向?yàn)闇?zhǔn)。3.3.7 吃到食物判定這里通過判定坐標(biāo)是否重合來判斷,

16、只需要判斷蛇頭是否和食物重合就可以了,因?yàn)樯叩纳眢w 都是走蛇頭走過的地方。4系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)4.1 程序設(shè)計(jì)4.1.1 主類 Main(1)主類為此程序的入口,定義了 Main的對(duì)象frame ,開始運(yùn)行此程序。(2)源代碼見文件 Main.Java4.1.2 類 MainGui(1)成員變量見表4.1表4.1主要成員變量成員變量描述變量類型名稱設(shè)置面板private settingPanelsettingPanel按鍵監(jiān)聽private keyListenerkeyListener蛇場(chǎng)對(duì)象private BoxBox主窗口局度int windowHeightwindowHeight主窗口寬

17、度int windowWidthwindowWidth(2)方法見表4.2表4.2主要方法方法名功能addListener()注冊(cè)監(jiān)聽getBox()更新蛇長(zhǎng)getSettingPanel()更新方向4.1.3 類 Snake(1)成員變量見表4.3表4.3主要成員變量成員變量描述變量類型名稱上下左右(方向)IntUP、DOWN、LEFT、RIGHT蛇體LinkedList<Point>body蛇場(chǎng)Boxbox前進(jìn)方向intdirection是否活著booleanislive顏色ColorsnakeColor下一節(jié)點(diǎn)坐標(biāo)PointnextSite(2)方法見表4.4表4.4主要方法

18、方法名功能init()初始化蛇,方向初始化為向右,增加初始的節(jié)點(diǎn)countNewSite()計(jì)算下一個(gè)位置drawMe()將蛇畫出stareNewGame()死亡之后重新開始游戲4.1.4 類 Food(1)成員變量見表4.5表4.5 主要成員變量成員變量描述變量類型名稱顏色foodColorColor表4.6主要方法方法名功能drawMe()將食物畫出newMe()重新廣一個(gè)食物4.1.5 類 Box蛇場(chǎng)類。繼承自JPanel , Box ,蛇的活動(dòng)場(chǎng)所,也是食物出現(xiàn)的地方.重寫了該類的paint()方法,當(dāng)重繪時(shí)時(shí)會(huì)調(diào)用蛇、食物、網(wǎng)格的繪制方法。由定時(shí)器Timer控制,每隔delay時(shí)間,

19、執(zhí)行:1.重新計(jì)算一下位置 2.繪制新圖像3.更新屬性面板的顯示,即該游戲的主要原理。屬性面板的時(shí)間由countTimer 中獲取,運(yùn)行在另外一個(gè)線程中,減小計(jì)時(shí)的誤差4.1.6 類 SnakeKeyListener此類為蛇的監(jiān)聽類,實(shí)現(xiàn)蛇運(yùn)動(dòng)的監(jiān)聽,根據(jù)按鍵改變蛇的方向、速度等設(shè)置該類包含控制器和處理按鍵邏輯,控制器,控制Box, Snake, Food.負(fù)責(zé)游戲的邏輯.處理按鍵事件,可以處理Snake觸發(fā)的事件,該類覆蓋keyPressed()方法:處理按鍵事件,根據(jù)按鍵不同,發(fā)出不同的指令:UP:改變蛇的移動(dòng)方向?yàn)橄蛏螪OWN:改變蛇的移動(dòng)方向?yàn)橄蛳翷EFT:改變蛇的移動(dòng)方向?yàn)橄蜃驲IG

20、HT:改變蛇的移動(dòng)方向?yàn)橄蛴襫ewGame()開始新游戲的方法源代碼見文件 SnakeKeyListener.java4.1.7 類 Clock主要功能是計(jì)時(shí)。源代碼見文件Globel.java4.1.8 類 PropertyPanelsettingPanel的可視化設(shè)置.設(shè)置游戲運(yùn)行狀態(tài),移動(dòng)以及分?jǐn)?shù)更新,實(shí)現(xiàn)上下左右移動(dòng)的方法接口。源代碼見文件 PropertyPanel.java4.2各功能界面截圖4.2.1 貪吃蛇游戲的基本運(yùn)行界面圖4.1初始界面圖4.2控制面板4.2.2 程序開始運(yùn)行界面(1)按enter鍵開始游戲,并有暫停和繼續(xù)功能:圖4.4開始游戲(地圖1)(2)、在蛇運(yùn)動(dòng)過程

21、中可以按F11、F12或Z、X進(jìn)行減速或加速。(3)、當(dāng)蛇運(yùn)動(dòng)過程中碰到壁時(shí)會(huì)死亡,選擇是否繼續(xù)。如圖(3)游戲過程中,若蛇頭碰到蛇尾則游戲結(jié)束,選擇是否繼續(xù)5測(cè)試5.1測(cè)試的意義系統(tǒng)測(cè)試是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過程,成功的測(cè)試是發(fā)現(xiàn)了至今尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。測(cè)試的目的就是希望能以最少的人力和時(shí)間發(fā)現(xiàn)潛在的各種錯(cuò)誤和缺陷。應(yīng)根據(jù)開發(fā)各階段的需求、設(shè)計(jì)等文檔或程序的內(nèi)部結(jié)構(gòu)精心設(shè)計(jì)測(cè)試用例,并利用這些實(shí)例來運(yùn)行程序,以便發(fā)現(xiàn)錯(cuò)誤。系 統(tǒng)測(cè)試是保證系統(tǒng)質(zhì)量和可靠性的關(guān)鍵步驟,是對(duì)系統(tǒng)開發(fā)過程中的系統(tǒng)分析系統(tǒng)設(shè)計(jì)和實(shí)施的最后復(fù)查。根據(jù)測(cè)試的概念和目的,在進(jìn)行信息系統(tǒng)測(cè)試時(shí)應(yīng)遵循以基本原則。(1)

22、擬定測(cè)試計(jì)劃。在制定測(cè)試計(jì)劃時(shí),要充分考慮整個(gè)項(xiàng)目的開發(fā)時(shí)間和開發(fā)進(jìn)童以及一些 人為因素和客觀條件等,使得測(cè)試計(jì)劃是可行的。測(cè)試計(jì)劃的內(nèi)容主要有測(cè)試的內(nèi)容、進(jìn)度安排、 測(cè)試所需的環(huán)境和條件、測(cè)試培訓(xùn)安排等。(3)根據(jù)測(cè)試大綱設(shè)計(jì)和生成測(cè)試用例。在設(shè)計(jì)測(cè)試用例的時(shí)候,可綜合利用前面介紹的測(cè)試用 例和設(shè)計(jì)技術(shù),產(chǎn)生測(cè)試設(shè)計(jì)說明文檔,其內(nèi)容主要有被測(cè)項(xiàng)目、輸人數(shù)據(jù)、測(cè)試過程、預(yù)期輸出 結(jié)果等。(4)實(shí)施測(cè)試。測(cè)試的實(shí)施階段是由一系列的測(cè)試周期組成的。在每個(gè)測(cè)試周期中,測(cè)試人員和 開發(fā)人員將依據(jù)預(yù)先編制好的測(cè)試大綱和準(zhǔn)備好的測(cè)試用例,對(duì)被測(cè)軟件或設(shè)備進(jìn)行完整的測(cè)試。(5)生成測(cè)試報(bào)告。測(cè)試完成后,要形

23、成相應(yīng)的測(cè)試報(bào)告,主要對(duì)測(cè)試進(jìn)行概要說明,列出測(cè)試 的結(jié)論,指出缺陷和錯(cuò)誤,另外,給出一些建議,如可采用的修改方法,各項(xiàng)修改預(yù)計(jì)的工作量及 修改的負(fù)責(zé)人員。程序運(yùn)行正常,沒有發(fā)現(xiàn)什么錯(cuò)誤。6結(jié)論通過這次課程設(shè)計(jì),我對(duì)上學(xué)期所學(xué)的JAVA語言程序設(shè)計(jì)有一個(gè)更深刻的了解, 將所學(xué)的知識(shí)應(yīng)用于實(shí)踐,由于所學(xué)知識(shí)有限,為了使游戲能夠能夠?qū)崿F(xiàn)自己預(yù)先的構(gòu) 想,我們這組通過上網(wǎng)找代碼和去圖書館借書找程序,比較畫好的流程圖及功能模塊, 不斷閱讀修改代碼使程序達(dá)到預(yù)期所要實(shí)現(xiàn)的目標(biāo),完成課程設(shè)計(jì)后,可以感覺到自己 對(duì)Java程序的又有了新的認(rèn)識(shí)。在做Java設(shè)計(jì)之前也有做過其他的課程設(shè)計(jì),大多規(guī)模很小。綜合運(yùn)

24、用以前所學(xué)習(xí) 的知識(shí),設(shè)計(jì)一個(gè)JAVA小游戲即貪吃蛇,并能實(shí)現(xiàn)以下的功能:游戲背景及樣式的控 制、蛇與食物的顏色控制、游戲的速度控制、游戲暫停、游戲重新開始、游戲的結(jié)束。因?yàn)槠涓鱾€(gè)模塊間的聯(lián)系十分緊密,代碼重復(fù)執(zhí)行率高,當(dāng)經(jīng)過無數(shù)次的調(diào)試、修改后, 能最終看到成品,有無比自豪的心情??傊?,通過本次的課程設(shè)計(jì),使我平時(shí)學(xué)到的理 論知識(shí)得到了很好地升華,理論與實(shí)際得到一次很好的結(jié)合,為我今后參加工作打下了 堅(jiān)實(shí)的基礎(chǔ),使我受益匪淺。參考文獻(xiàn)1Narcisio Tumushabe , TAN Guan-zheng An overview of authentication security feat

25、ures in ASP. NET, «School of Computer Science and Information Technology » 2003(3)2Anders Hejlsberg Scott Wiltamuth Peter Golde. The C# ProgrammingLanguageM. POSTS&TELECOM Press , 2008.3 Karli Watson. Beginning Visual C# 2005 M. Wrox , 20054馬蘇拉,許錦興.校友通信錄的UML建模和C#實(shí)現(xiàn)J.計(jì)算機(jī)與數(shù)字工程,2008年第12期5

26、徐龍.基于ASP.NET技術(shù)的電子留言板設(shè)計(jì)與實(shí)現(xiàn)J.電腦知識(shí)與技術(shù),2009年第25 期6劉震.廣播電視大學(xué)校友錄系統(tǒng)的實(shí)現(xiàn)J.江西廣播電視大學(xué)學(xué)報(bào),2009年第1期7馬駿,鄭逢斌,沈夏炯.C#網(wǎng)絡(luò)應(yīng)用高級(jí)編程.人民郵電出版社,20098梅曉冬,顏煒青.Visual C#網(wǎng)絡(luò)編程技術(shù)與實(shí)踐.清華大學(xué)出版社,2008.9張軍偉.基于三層框架的C# ASP.NE工程序設(shè)計(jì)J.電腦編程技巧與維護(hù),2010年第9 期10劉克成,張凌曉.C#程序設(shè)計(jì).中國鐵道出版社,2009.11劉艾俠.基于A的web service 調(diào)用J.科技信息,2010,第23期12任艷斐 基于VS.NET動(dòng)態(tài)移動(dòng) Web查

27、詢系統(tǒng)的設(shè)計(jì),通信技術(shù)2008年4期13王西鋒,張曉孚.應(yīng)用程序中數(shù)據(jù)庫自動(dòng)備份的實(shí)現(xiàn)J.現(xiàn)代電子技術(shù)2008年8期附錄主要代碼清單MainGuiimport java.awt.BorderLayout;import java.awt.Dimension;import java.awt.Toolkit;import javax.swing.JFrame;import mysnake.box.Box;import mysnake.contral.SnakeKeyListener;import mysnake.settingground.PropertyPanel;public class Mai

28、nGui extends JFrame int windowHeight;/加數(shù)字是為了顯示效果,下同int windowWidth;private Box box = new Box(this);SnakeKeyListener keyListener = new SnakeKeyListener(this);private PropertyPanel settingPanel = new PropertyPanel();public MainGui() super("貪吃蛇 1.0");setDefaultCloseOperation(JFrame.EXIT_ON_CL

29、OSE);windowWidth = 880 + 17;/定義工具包/獲取屏幕的尺寸/獲取屏幕的寬/獲取屏幕的高設(shè)置窗口居中顯示windowHeight = 600 + 40;Toolkit kit = T oolkit.getDefaultToolkit();Dimension screenSize = kit.getScreenSize();int screenWidth = screenSize.width;int screenHeight = screenSize.height;setLocation(screenWidth / 2 - windowWidth / 2,screenHe

30、ight / 2 - windowHeight / 2);setSize(windowWidth, windowHeight);setLayout(new BorderLayout();add(box, BorderLayout.CENTER);add(settingPanel, BorderLayout.SOUTH);addListener();setVisible(true);getBox().requestFocus();public Box getBox() return box;private void addListener() this.addKeyListener(keyLis

31、tener);box.addKeyListener(keyListener);settingPanel.addKeyListener(keyListener);settingPanel.getRuleText().addKeyListener(keyListener);public PropertyPanel getSettingPanel() return settingPanel;二. Box.javaimport mysnake.MainGui;import java.awt.Color;import java.awt.Graphics;import java.awt.event.Act

32、ionEvent;import java.awt.event.ActionListener;import javax.swing.JPanel;import javax.swing.Timer;import mysnake.settingground.Clock;public class Box extends JPanel MainGui gui;private Snake snake;private Food food;private Timer timer;private int delay = 100;private Color backgroundC010r = Color.DARK

33、_GRAY;private Color webColor = Color.DARK_GRAY;private int webStyle = 1;private Clock clock;public Box(MainGui inGui) gui = inGui;snake = new Snake(this);food = new Food(this);setBackground(backgroundColor);timer = new Timer(delay, new ActionListener() public void actionPerformed(ActionEvent e) getS

34、nake().countNewSite();repaint();updateProperty(););clock = new Clock();clock.getTimeThread().start();Overridepublic void paint(Graphics g) setBackground(getBackgroundColor();super.paint(g);paintBackgroundRect(g, getWebStyle();getSnake().drawMe(g);getFood().drawMe(g);private void paintBackgroundRect(

35、Graphics g, int style) g.setColor(getWebColor(); switch (style) case 0:return;case 1:for (int i = 0; i < getWidth(); i += 20) for (int j = 0; j < getHeight(); j += 20) g.fill3DRect(i, j, 20, 20, true);break;case 2:for (int i = 0; i < getWidth(); i += 20) for (int j = 0; j < getHeight();

36、j += 20) g.fill3DRect(i, j, 20, 20, false);break;case 3:for (int i = 0; i < getWidth(); i += 20) g.drawLine(i, 0, i, getHeight(); for (int i = 0; i < getHeight(); i += 20) g.drawLine(0, i, getWidth(), i);break;private void updateProperty() gui.getSettingPanel().getSnakeLengthLabel().setText(&q

37、uot;" + getSnake().getBody().size();switch (gui.getBox().getSnake().getDirection() case Snake.DIRECTION_DOWN:gui.getSettingPanel().getDirectionLabel().setText( break;case Snake.DIRECTION_LEFT:gui.getSettingPanel().getDirectionLabel().setText( break;case Snake.DIRECTION_RIGHT:gui.getSettingPanel

38、().getDirectionLabel().setText( break;case Snake.DIRECTION_UP:gui.getSettingPanel().getDirectionLabel().setText(下,J");左,一");右,一");上,甘);break;gui.getSettingPanel().getSnakeSiteLabel().setText("(+ (getSnake().getBody().getLast().x + 20) / 20+ ""+ (getSnake().getBody().get

39、Last().y + 20) / 20+ ")");gui.getSettingPanel().getFoodSiteLabel().setText("("+ (getFood().x + 20) / 20+ "."+ (getFood().y + 20) / 20+ ")");gui.getSettingPanel().getTimeLabel().setText(getClock().getTime()+"秒)毫秒gui.getSettingPanel().getSpeedLabel().setTex

40、t(" 格 /"+getTimer().getDelay()+");public Snake getSnake() return snake;public Timer getTimer() return timer;public Food getFood() return food;public Clock getClock() return clock;public Color getBackgroundColor() return backgroundColor;public int getWebStyle() return webStyle;public C

41、olor getWebC010ro return webColor;三. Food.javaimport java.awt.Color;import java.awt.Graphics;import java.awt.Point;import java.util.Random;public class Food extends Point Box box;private Color foodColor = Color.GREEN;public Food(Box inBox) box = inBox;init();public void init() this.x = 200;this.y =

42、60;public void newMe() boolean isContinueCycle;do int tempX = (new Random().nextInt(box.getWidth() - 20);int tempY = (new Random().nextInt(box.getHeight() - 20);this.x = tempX - tempX % 20;this.y = tempY - tempY % 20;isContinueCycle = false;for (Point p : box.getSnake().getBody() if (p.equals(Point)

43、 this) isContinueCycle = true; while (isContinueCycle);public void drawMe(Graphics g) g.setColor(getFoodColor();g.fill3DRect(box.getFood().x, box.getFood().y, 20, 20, true);public Color getFoodColor() return foodColor;4. Sanke.javaimport java.awt.Color;import java.awt.Graphics;import java.awt.Point;

44、import java.util.LinkedList;import javax.swing.JOptionPane;public class Snake public static final int DIRECTION" = 1;public static final int DIRECTION_DOWN = -1;public static final int DIRECTION_LEFT = 2;public static final int DIRECTION_RIGHT = -2;private LinkedList<Point> body = new Lin

45、kedList<Point>();private int direction;private Color snakeColor = Color.RED;private boolean isLive = true;Point nextSite;Box box;public Snake(Box inBox) box = inBox;init();private void init() setDirection(DIRECTION_RIGHT);body.add(new Point(20, 60);body.add(new Point(40, 60);body.add(new Point

46、(60, 60);body.add(new Point(80, 60);nextSite = new Point(100, 60);public void countNewSite() if (!isLive) talkingdead();頭部增加一個(gè)節(jié)點(diǎn)getBody().addLast(new Point(nextSite.x, nextSite.y);/if (nextSite.equals(box.getFood() box.getFood().newMe(); else getBody().remove();/移除最后一個(gè)節(jié)點(diǎn)switch (getDirection() case D

47、IRECTION_UP:nextSite.y -= 20;break;case DIRECTION_DOWN:nextSite.y += 20;break;case DIRECTION_LEFT:nextSite.x -= 20;break;case DIRECTION_RIGHT:nextSite.x += 20;break;if (nextSite.x < 0) nextSite.x = (box.getWidth() / 20 - 1) * 20; else if (nextSite.x > box.getWidth()-20) nextSite.x = 0;if (next

48、Site.y < 0) nextSite.y = (box.getHeight() / 20 - 1) * 20; else if (nextSite.y > box.getHeight()-20) nextSite.y = 0;for (Point p : getBody() if (nextSite.equals(p) setlsLive(false);public void drawMe(Graphics g) g.setColor(snakeColor);for (Point b : getBody() g.fill3DRect(b.x, b.y, 20, 20, true

49、);private void talkingdead() box.getTimer().stop();int yourChoice = JOptionPane.showConfirmDialog(box, "是否再來一局", "死了",JOptionPane.YES_NO_OPTION);if(yourChoice = JOptionPane.YES_OPTION) startNewGame();elseSystem.exit(0);private void startNewGame() getBody().clear();this.init();box

50、.getFood().init();box.getTimer().setDelay(100);box.getClock().setTime(0);setlsLive(true);public LinkedList<Point> getBody() return body;public void setBody(LinkedList<Point> body) this.body = body;public int getDirection() return direction;public void setDirection(int direction) this.dir

51、ection = direction;public boolean isIsLive() return isLive;public void setIsLive(boolean isLive) this.isLive = isLive;public Color getSnakeC010ro return snakeColor;5. SnakeKeyListener.javaimport java.awt.event.KeyEvent;import java.awt.event.KeyListener;import mysnake.MainGui;import mysnake.box.Snake

52、;public class SnakeKeyListener implements KeyListener MainGui gui;public SnakeKeyListener(MainGui inGui) gui = inGui;public void keyPressed(KeyEvent e) switch (e.getKeyCode() case KeyEvent.VK_S:case KeyEvent.VK_DOWN:if (gui.getBox().getSnake().getDirection() = Snake.DIRECTION_UP) return;gui.getBox().getSnake().setDirection(Snake.DIRECTION_DOWN);break;case KeyEvent.VK_W:case KeyEvent.VK_UP:if (gui.getBox().getSnake().getDirection() = Snake.D

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論