




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(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ì)號(hào) 20120415432102012041543210 2012041543210本軟件122班鄭英姿小組成員:林盛東郭威彭更明 指導(dǎo)教師:所屬系部:計(jì)算機(jī)科學(xué)與技術(shù)系2014年4月25日貪吃蛇的研究與設(shè)計(jì)近年來(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ǔ)言?!柏澇陨摺庇螒蚴且粋€(gè)經(jīng)典的游戲,它因操作簡(jiǎn)單、娛樂(lè)性強(qiáng)而廣受歡迎。本文基 于Java技術(shù)和NetBeans開(kāi)發(fā)環(huán)境,開(kāi)發(fā)了一個(gè)操作簡(jiǎn)單、界面
2、美觀、功能較齊全的“貪吃蛇”游戲。整個(gè)游戲程序分為二個(gè)功能模塊,八個(gè)類(lèi)模塊,實(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è)類(lèi)模塊的函 數(shù)調(diào)用關(guān)系;詳細(xì)設(shè)計(jì)介紹了 Java2
3、標(biāo)準(zhǔn)運(yùn)行環(huán)境的配置,重點(diǎn)給出各個(gè)類(lèi)模塊的程序列表,介紹了各個(gè)類(lèi)包含的變量、使用的方法,展示了游戲的界面。為了保證程序代碼的正確性和功能實(shí)現(xiàn)的可靠性,本文還介紹了游戲軟件的程序調(diào)試過(guò)程和功能測(cè)試結(jié)果。關(guān)鍵詞:Java ; NetBeans ;貪吃蛇;開(kāi)發(fā)流程3.1引言1.1課題介紹3.1.2設(shè)計(jì)的背景和意義4.2系統(tǒng)分析2.1可行性分析.4.2.2系統(tǒng)需求分析2.2.1功能需求性能需求界面需求6.2.3開(kāi)發(fā)環(huán)境6.3系統(tǒng)概要設(shè)計(jì)7.3.1程序流程圖7.3.2類(lèi)模塊設(shè)計(jì).8.3.3系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)3.3.1蛇、食物的表示蛇的移動(dòng)存儲(chǔ)蛇身的數(shù)據(jù)
4、結(jié)構(gòu)蛇的移動(dòng)方向如何顯示蛇身蛇身的移動(dòng)方向吃到食物判定系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)4.1程序設(shè)計(jì)....8.1.0101.0.主類(lèi)Main類(lèi) MainGui類(lèi) Snake類(lèi) Food類(lèi)Box類(lèi) SnakeKeyListener類(lèi) Clock類(lèi) PropertyPanel4.2各功能界面截圖4.2.1貪吃蛇游戲的基本運(yùn)行界面4.2.2程序開(kāi)始運(yùn)行界面101031.4.1414,14.15測(cè)試165.1測(cè)試的意義結(jié)論17參考文獻(xiàn)18附錄主要代碼清單1.9161引言
5、1.1課題介紹貪吃蛇是世界知名的益智類(lèi)小游戲, 選擇這個(gè)題目一方面的原因是為了將我們自己 的所學(xué)知識(shí)加以運(yùn)用;另一方面,雖然很小就接觸這個(gè)游戲,但是它的制作方法對(duì)我們 而言還是很神秘的。我們希望通過(guò)自己的所學(xué)知識(shí)把它剖析開(kāi)來(lái), 通過(guò)自己的動(dòng)手實(shí)踐,真正的了解它的本質(zhì)和精髓。希望通過(guò)這次實(shí)踐,我們能從中提高自己的編程能力。并從中學(xué)會(huì)從零開(kāi)始分析設(shè)計(jì)程序。本游戲的開(kāi)發(fā)語(yǔ)言為Java。開(kāi)發(fā)工具選用NetBeans。Java是一種簡(jiǎn)單的,面向 對(duì)象的,分布式的,解釋型的,健壯安全的,結(jié)構(gòu)中立的,可移植的,性能優(yōu)異、多線(xiàn) 程的動(dòng)態(tài)語(yǔ)言。這里采用Java作為開(kāi)發(fā)語(yǔ)言主要是基于Java的面向?qū)ο蠛涂梢浦残浴?/p>
6、NetBeans是一個(gè)開(kāi)放源代碼的、基于 Java的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開(kāi)發(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)可以帶來(lái)更高的運(yùn)行或 者存儲(chǔ)效率。數(shù)據(jù)結(jié)構(gòu)往往同高效的檢索算法和索引技術(shù)有關(guān)。類(lèi)是 面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言中的一個(gè)概念。類(lèi)(Class)實(shí)際上是對(duì)某種類(lèi)型的對(duì)象定義變量和方法的原型。它表示對(duì)現(xiàn)實(shí)生 活中一類(lèi)具有共同特征的事物的抽象,是面向?qū)ο缶幊痰幕A(chǔ)。類(lèi)是對(duì)某個(gè)對(duì)象的定義。它包含有關(guān)對(duì)象動(dòng)作方式的信息,包括它的名稱(chēng)、方法、 屬性和
7、事件。實(shí)際上它本身并不是對(duì)象,因?yàn)樗淮嬖谟趦?nèi)存中。當(dāng)引用類(lèi)的代碼運(yùn)行 時(shí),類(lèi)的一個(gè)新的實(shí)例,即對(duì)象,就在內(nèi)存中創(chuàng)建了。雖然只有一個(gè)類(lèi),但能從這個(gè)類(lèi) 在內(nèi)存中創(chuàng)建多個(gè)相同類(lèi)型的對(duì)象。1.2設(shè)計(jì)的背景和意義貪吃蛇游戲一款非常經(jīng)典的手機(jī)游戲,因?yàn)樗容^簡(jiǎn)單有趣,無(wú)論老少都比較適合。貪 吃蛇的設(shè)計(jì)對(duì)每一個(gè)Java語(yǔ)言設(shè)計(jì)者進(jìn)行語(yǔ)言提高和進(jìn)階都是一個(gè)很好的鍛煉機(jī)會(huì)。貪吃蛇游戲的設(shè)計(jì)比較復(fù)雜,它涉及面廣、牽涉方面多,如果不好好考慮和設(shè)計(jì), 將難以成功開(kāi)發(fā)出這個(gè)游戲。在這個(gè)游戲的設(shè)計(jì)中,牽涉到圖形界面的顯示與更新、數(shù) 據(jù)的收集與更新,并且在這個(gè)游戲的開(kāi)發(fā)中,還要應(yīng)用類(lèi)的繼承機(jī)制以及一些設(shè)計(jì)模式。因此,如何
8、設(shè)計(jì)和開(kāi)發(fā)好這個(gè)貪吃蛇游戲,對(duì)于提高Java開(kāi)發(fā)水平和系統(tǒng)的設(shè)計(jì)能力有極大的幫助。在設(shè)計(jì)開(kāi)發(fā)過(guò)程中,需要處理好各個(gè)類(lèi)之間的繼承關(guān)系,還要處理各個(gè) 類(lèi)相應(yīng)的封裝,并且還要協(xié)調(diào)好各個(gè)模塊之間的邏輯依賴(lài)關(guān)系和數(shù)據(jù)通信關(guān)系。正是因?yàn)槿绱耍敬萎厴I(yè)設(shè)計(jì)的目的在于學(xué)習(xí)Java程序設(shè)計(jì)基本技術(shù),學(xué)習(xí)用NetBeans開(kāi)發(fā)Java程序的相關(guān)技術(shù),熟悉游戲“貪吃蛇”的需求,熟悉項(xiàng)目開(kāi)發(fā)的完整過(guò)程。學(xué)會(huì)怎樣進(jìn)行一個(gè)項(xiàng)目的需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)等軟件開(kāi)發(fā)過(guò)程, 熟練地掌握J(rèn)ava程序設(shè)計(jì)的基本技術(shù)和方法,熟練地掌握NetBeans環(huán)境的使用方法, 培養(yǎng)起初步的項(xiàng)目分析能力和程序設(shè)計(jì)能力。2系統(tǒng)分析2.1可行性
9、分析貪吃蛇游戲是一種簡(jiǎn)單的大眾的游戲,自從計(jì)算機(jī)實(shí)現(xiàn)以來(lái),深受廣大電腦玩家的 喜愛(ài),做一個(gè)簡(jiǎn)單的貪吃蛇小游戲。貪吃蛇的核心算法時(shí)如何實(shí)現(xiàn)移動(dòng)和吃掉食物,沒(méi)有碰到食物的時(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í)候,貝U只需把食物入隊(duì)即可。實(shí)現(xiàn)貪吃蛇的基本的蛇身移動(dòng)、吃到食物身 體增長(zhǎng)、和碰到墻壁或自身死亡,能夠暫停和開(kāi)始。本次設(shè)計(jì)我將主要運(yùn)用java語(yǔ)言來(lái)完成。Java語(yǔ)言是一種跨平臺(tái),適合于分布式計(jì)算環(huán)境的面向?qū)ο缶幊陶Z(yǔ)言,用Java寫(xiě)的應(yīng)用程序不用修改就可
10、在不同的軟硬件平臺(tái)上運(yùn)行。由于Java主要用于網(wǎng)絡(luò)應(yīng)用程序開(kāi)發(fā),因此對(duì)安全性有較高的要求。如果沒(méi)有安全保證,用戶(hù)從網(wǎng)絡(luò)下載程序執(zhí)行就非常危險(xiǎn)。Java通過(guò)自己的安全機(jī)制防止了病 毒程序的產(chǎn)生和下載程序?qū)Ρ镜叵到y(tǒng)的威脅破壞。2.2系統(tǒng)需求分析221功能需求本系統(tǒng)主要是完成貪吃蛇游戲的基本操作。用戶(hù)可以自己練習(xí)和娛樂(lè)。本系統(tǒng)需要 滿(mǎn)足以下幾點(diǎn)要求:(1) 利用方向鍵來(lái)改變蛇的運(yùn)行方向。(2) 空格鍵暫停或繼續(xù)游戲,并在隨機(jī)的地方產(chǎn)生食物。 吃到食物就變成新的蛇體,碰到墻或者自身則游戲結(jié)束,否則正常運(yùn)行。2.2.2性能需求本軟件在設(shè)計(jì)方面本著方便、實(shí)用及娛樂(lè)性高的宗旨,在對(duì)界面進(jìn)行設(shè)計(jì)的過(guò)程中, 始
11、終堅(jiān)持清晰明了,在性能方面能夠?qū)崿F(xiàn)效率高,不易出錯(cuò)等優(yōu)點(diǎn)。223界面需求游戲主界面模塊:主要包括游戲圖形區(qū)域界面、游戲開(kāi)始按鈕、暫停游戲按鈕、關(guān) 閉按鈕。游戲的主界面力求美觀,爽心悅目。游戲控制模塊:主要完成控制游戲的開(kāi)始、暫停、退出等功能,這部分做到易懂、易操作而且準(zhǔn)確率咼,不易出錯(cuò)。游戲的主界面是進(jìn)入游戲后,能夠給玩家第一感官的部分,主要包括游戲圖形區(qū)域 界面、游戲的速度選擇更新界面、游戲分?jǐn)?shù)的顯示更新界面、新生方塊的預(yù)覽、游戲開(kāi) 始按鈕、暫停游戲按鈕、退出游戲按鈕以及游戲排行榜按鈕。從很大程度上決定了玩家 對(duì)游戲的興趣問(wèn)題,因此,游戲的主界面力求美觀,爽心悅目。游戲控制模塊是游戲的中心環(huán)
12、節(jié),主要完成控制游戲的開(kāi)始、暫停、退出等功能。為了能夠給玩家一個(gè)很好的游戲環(huán)境,這部分做到易懂、易操作。2.3開(kāi)發(fā)環(huán)境操作系統(tǒng)及版本:Win dows7工具軟件:jdk1.7,NetBeans編程語(yǔ)言:JAVA語(yǔ)言3系統(tǒng)概要設(shè)計(jì)3.1程序流程圖圖1游戲處理流程3.2類(lèi)模塊設(shè)計(jì)本系統(tǒng)共包括8個(gè)類(lèi)文件。java源文件及其功能如表所示。表3.1 java源文件及其功能序號(hào)文件名主要功能1Mai n該文件為程序入口,含有main方法。2Mai nGui主界面類(lèi),該類(lèi)用來(lái)創(chuàng)建游戲的用戶(hù)界面,繼承自JFrame類(lèi)。對(duì)主窗口的屬性的設(shè)置、注冊(cè)監(jiān)聽(tīng)者等3Sn akeKeyListe ner蛇的監(jiān)聽(tīng)器,根據(jù)按鍵
13、改變蛇的方向、速度等設(shè)置4Food該文件實(shí)現(xiàn)組成蛇身的單位-食物。5Box該文件實(shí)現(xiàn)蛇的活動(dòng)場(chǎng)所6Snake該文件實(shí)現(xiàn)蛇類(lèi),包含有關(guān)蛇的方法屬性7Clock該文件為工具類(lèi),實(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è)大大的表格,里面的格子就是組成蛇的基本單位,一個(gè)格子可以代表一個(gè)食物,使用坐標(biāo)來(lái)區(qū)分這些格子。332蛇的移動(dòng)蛇向前移動(dòng)一步,可以看作是蛇頭前面增加了一個(gè)節(jié)點(diǎn),蛇的尾巴上少了一個(gè)節(jié)點(diǎn)(即去尾, 加頭)
14、3.3.3存儲(chǔ)蛇身的數(shù)據(jù)結(jié)構(gòu)由于要區(qū)分蛇頭和蛇尾,因此這個(gè)數(shù)據(jù)結(jié)構(gòu)必須是有序的。另一方面,我們需要經(jīng)常的訪問(wèn)第一個(gè)和最后一個(gè)節(jié)點(diǎn),所以LinkedList最合適。因?yàn)樗?getFirst() ,getLast(),和removeLast()方 法。3.3.4蛇的移動(dòng)方向這里我們用int型常這里討論蛇的移動(dòng)方向控制。蛇下一步移動(dòng)到哪里,是由方向來(lái)控制的。量來(lái)表示蛇的移動(dòng)方向。因?yàn)槲覀兪歉鶕?jù)原蛇頭的坐標(biāo)和方向來(lái)確定新蛇頭的坐標(biāo)。在原坐標(biāo)的基y-1.礎(chǔ)上,根據(jù)蛇頭的運(yùn)動(dòng)方向來(lái)確定新蛇頭的坐標(biāo),比如向上移動(dòng)就是3.3.5如何顯示蛇身顯示蛇身,其實(shí)就是填充用顏色填充格子。需要4個(gè)參數(shù),像素坐標(biāo)x,像素
15、坐標(biāo)y,格子寬度,格子高度。像素坐標(biāo)就是矩形左上角的坐標(biāo)3.3.6蛇身的移動(dòng)方向(1)相反方向和上一次移動(dòng)的方向相反的方向稱(chēng)為相反方向,這種輸入應(yīng)該忽略。這樣可以防止蛇從自己的身體中穿過(guò)。(2 )無(wú)效方向在蛇的這一次移動(dòng)之后和下一次移動(dòng)之前這個(gè)時(shí)間間隔內(nèi)輸入了多個(gè)非相反方向,只有最后個(gè)是有效方向,其他的都是無(wú)效方向。蛇的最終運(yùn)動(dòng)方向以有效方向?yàn)闇?zhǔn)。337 吃到食物判定這里通過(guò)判定坐標(biāo)是否重合來(lái)判斷,只需要判斷蛇頭是否和食物重合就可以了,因?yàn)樯叩纳眢w都是走蛇頭走過(guò)的地方。4系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)4.1程序設(shè)計(jì)4.1.1 主類(lèi) Main(1)主類(lèi)為此程序的入口,定義了Ma in的對(duì)象frame,開(kāi)始運(yùn)
16、行此程序。(2)源代碼見(jiàn)文件 Mai n. Java4.1.2 類(lèi) MainGui(1 )成員變量見(jiàn)表4.1表4.1主要成員變量成員變量描述變量類(lèi)型名稱(chēng)設(shè)置面板P rivate sett ingPanelsett ingPanel按鍵監(jiān)聽(tīng)p rivate keyListe nerkeyListe ner蛇場(chǎng)對(duì)象P rivate BoxBox主窗口高度intwin dowHeightwin dowHeight主窗口寬度int win dowWidthwin dowWidth(2 )方法見(jiàn)表4.2表4.2主要方法方法名功能addListe ner()注冊(cè)監(jiān)聽(tīng)getBox()更新蛇長(zhǎng)getSetti
17、 ngPan el()更新方向4.1.3 類(lèi) Snake(1)成員變量見(jiàn)表4.3表4.3主要成員變量成員變量描述變量類(lèi)型名稱(chēng)上下左右(方向)IntUP、DOWN、LEFT、RIGHT蛇體Li nkedListv Pointbody蛇場(chǎng)Boxbox前進(jìn)方向intdirect ion是否活著boolea nislive顏色Colorsn akeColor下一節(jié)點(diǎn)坐標(biāo)P oi ntn extSite(2 )方法見(jiàn)表4.4表4.4主要方法方法名功能ini t()初始化蛇,方向初始化為向右,增加初始的節(jié)點(diǎn)coun tNewSite()計(jì)算下一個(gè)位置drawMe()將蛇畫(huà)出stareNewGame()死亡
18、之后重新開(kāi)始游戲4.1.4 類(lèi) Food(1)成員變量見(jiàn)表4.5表4.5 主要成員變量成員變量描述變量類(lèi)型名稱(chēng)顏色foodColorColor表4.6主要方法方法名功能drawMeO將食物畫(huà)出n ewMe()重新產(chǎn)生一個(gè)食物4.1.5 類(lèi) Box蛇場(chǎng)類(lèi)。繼承自JPanel,Box,蛇的活動(dòng)場(chǎng)所,也是食物出現(xiàn)的地方.重寫(xiě)了該類(lèi)的paint()方Timer控制,每隔delay時(shí)間,執(zhí)行:法,當(dāng)重繪時(shí)時(shí)會(huì)調(diào)用蛇、食物、網(wǎng)格的繪制方法。由定時(shí)器1.重新計(jì)算一下位置 2.繪制新圖像3.更新屬性面板的顯示,即該游戲的主要原理。屬性面板的時(shí)間 由countTimer中獲取,運(yùn)行在另外一個(gè)線(xiàn)程中,減小計(jì)時(shí)的誤
19、差4.1.6 類(lèi) SnakeKeyListener此類(lèi)為蛇的監(jiān)聽(tīng)類(lèi),實(shí)現(xiàn)蛇運(yùn)動(dòng)的監(jiān)聽(tīng),根據(jù)按鍵改變蛇的方向、速度等設(shè)置該類(lèi)包含控制器和處理按鍵邏輯,控制器,控制Box, Snake, Food.負(fù)責(zé)游戲的邏輯.處理按鍵事件,可以處理Snake觸發(fā)的事件,該類(lèi)覆蓋keyPressed()方法:處理按鍵事件,根據(jù)按鍵不同, 發(fā)出不同的指令:UP:改變蛇的移動(dòng)方向?yàn)橄蛏螪OWN:改變蛇的移動(dòng)方向?yàn)橄蛳翷EFT:改變蛇的移動(dòng)方向?yàn)橄蜃驲IGHT:改變蛇的移動(dòng)方向?yàn)橄蛴襫ewGameO開(kāi)始新游戲的方法源代碼見(jiàn)文件 Sn akeKeyListe ner.java4.1.7 類(lèi) Clock主要功能是計(jì)時(shí)。源
20、代碼見(jiàn)文件Globel.java4.1.8 類(lèi) PropertyPanelsettingPanel的可視化設(shè)置.設(shè)置游戲運(yùn)行狀態(tài),移動(dòng)以及分?jǐn)?shù)更新,實(shí)現(xiàn)上下左右移動(dòng)的方法接口。源代碼見(jiàn)文件 Prop erty Pan el.java4.2各功能界面截圖 4.2.1貪吃蛇游戲的基本運(yùn)行界面圖4.1初始界面圖4.2控制面板4.2.2程序開(kāi)始運(yùn)行界面(1 )按enter鍵開(kāi)始游戲,并有暫停和繼續(xù)功能:圖4.4開(kāi)始游戲(地圖1)(2)、在蛇運(yùn)動(dòng)過(guò)程中可以按F11、F12或Z、X進(jìn)行減速或加速。(3)、當(dāng)蛇運(yùn)動(dòng)過(guò)程中碰到壁時(shí)會(huì)死亡,選擇是否繼續(xù)。如圖(3)游戲過(guò)程中,若蛇頭碰到蛇尾則游戲結(jié)束,選擇是否繼
21、續(xù)5測(cè)試 5.1測(cè)試的意義系統(tǒng)測(cè)試是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過(guò)程,成功的測(cè)試是發(fā)現(xiàn)了至今尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。應(yīng)根據(jù)開(kāi)發(fā)各階段的需求、測(cè)試的目的就是希望能以最少的人力和時(shí)間發(fā)現(xiàn)潛在的各種錯(cuò)誤和缺陷。設(shè)計(jì)等文檔或程序的內(nèi)部結(jié)構(gòu)精心設(shè)計(jì)測(cè)試用例,并利用這些實(shí)例來(lái)運(yùn)行程序,以便發(fā)現(xiàn)錯(cuò)誤。系 統(tǒng)測(cè)試是保證系統(tǒng)質(zhì)量和可靠性的關(guān)鍵步驟,是對(duì)系統(tǒng)開(kāi)發(fā)過(guò)程中的系統(tǒng)分析系統(tǒng)設(shè)計(jì)和實(shí)施的最后復(fù)查。根據(jù)測(cè)試的概念和目的,在進(jìn)行信息系統(tǒng)測(cè)試時(shí)應(yīng)遵循以基本原則。(1)擬定測(cè)試計(jì)劃。在制定測(cè)試計(jì)劃時(shí),要充分考慮整個(gè)項(xiàng)目的開(kāi)發(fā)時(shí)間和開(kāi)發(fā)進(jìn)童以及一些人為因素和客觀條件等,使得測(cè)試計(jì)劃是可行的。測(cè)試計(jì)劃的內(nèi)容主要有測(cè)試的內(nèi)容、
22、進(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ì)說(shuō)明文檔,其內(nèi)容主要有被測(cè)項(xiàng)目、輸人數(shù)據(jù)、測(cè)試過(guò)程、預(yù)期輸出鄉(xiāng)士里絕 結(jié)果等。(4) 實(shí)施測(cè)試。測(cè)試的實(shí)施階段是由一系列的測(cè)試周期組成的。在每個(gè)測(cè)試周期中,測(cè)試人員和開(kāi)發(fā)人員將依據(jù)預(yù)先編制好的測(cè)試大綱和準(zhǔn)備好的測(cè)試用例,對(duì)被測(cè)軟件或設(shè)備進(jìn)行完整的測(cè)試。(5) 生成測(cè)試報(bào)告。測(cè)試完成后,要形成相應(yīng)的測(cè)試報(bào)告,主要對(duì)測(cè)試進(jìn)行概要說(shuō)明,列出測(cè)試的結(jié)論,指出缺陷和錯(cuò)誤,另外,給出一些建議,如可采用的修改方法,各項(xiàng)修改預(yù)計(jì)的工作量及修改的負(fù)責(zé)人
23、員。程序運(yùn)行正常,沒(méi)有發(fā)現(xiàn)什么錯(cuò)誤。6結(jié)論通過(guò)這次課程設(shè)計(jì),我對(duì)上學(xué)期所學(xué)的JAVA語(yǔ)言程序設(shè)計(jì)有一個(gè)更深刻的了解,將所學(xué)的知識(shí)應(yīng)用于實(shí)踐,由于所學(xué)知識(shí)有限,為了使游戲能夠能夠?qū)崿F(xiàn)自己預(yù)先的構(gòu)想,我們這組通過(guò)上網(wǎng)找代碼和去圖書(shū)館借書(shū)找程序,比較畫(huà)好的流程圖及功能模塊,不斷閱讀修改代碼使程序達(dá)到預(yù)期所要實(shí)現(xiàn)的目標(biāo),完成課程設(shè)計(jì)后,可以感覺(jué)到自己對(duì)Java程序的又有了新的認(rèn)識(shí)。在做Java設(shè)計(jì)之前也有做過(guò)其他的課程設(shè)計(jì),大多規(guī)模很小。綜合運(yùn)用以前所學(xué)習(xí)的知識(shí),設(shè)計(jì)一個(gè)JAVA小游戲即貪吃蛇,并能實(shí)現(xiàn)以下的功能:游戲背景及樣式的控制、蛇與食物的顏色控制、游戲的速度控制、游戲暫停、游戲重新開(kāi)始、游戲的
24、結(jié)束。因?yàn)槠涓鱾€(gè)模塊間的聯(lián)系十分緊密,代碼重復(fù)執(zhí)行率高,當(dāng)經(jīng)過(guò)無(wú)數(shù)次的調(diào)試、修改后, 能最終看到成品,有無(wú)比自豪的心情??傊?,通過(guò)本次的課程設(shè)計(jì),使我平時(shí)學(xué)到的理 論知識(shí)得到了很好地升華,理論與實(shí)際得到一次很好的結(jié)合,為我今后參加工作打下了 堅(jiān)實(shí)的基礎(chǔ),使我受益匪淺。參考文獻(xiàn)1Narcisio Tumushabe , TAN Guan-zheng An overview of authentication security features in ASP. NET, School of Computer Science and InformationTechno logy2003(3) 2A
25、nders Hejlsberg Scott Wiltamuth P eter Golde. The C# P rogrammi ngLanguageM. 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期徐龍.基于ASP.NET技術(shù)的電子留言板設(shè)計(jì)與實(shí)現(xiàn)J.電腦知識(shí)與技術(shù),2009年第25 期 劉震.廣播電視大學(xué)校友錄系統(tǒng)的實(shí)現(xiàn)J.江西廣播電視大學(xué)學(xué)報(bào),2009年第1期7 馬駿,鄭逢斌,
26、沈夏炯.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ì)中國(guó)鐵道出版社,2009.11 劉艾俠.基于A的web service 調(diào)用J.科技信息,2010,第23期12 任艷斐 基于VS.NET動(dòng)態(tài)移動(dòng) Web查詢(xún)系統(tǒng)的設(shè)計(jì),通信技術(shù)2008年4期13王西鋒,張曉孿.應(yīng)用程序中數(shù)據(jù)庫(kù)自動(dòng)備份的實(shí)現(xiàn)J.現(xiàn)代電子技術(shù)2008年附錄主要代碼清單Mai nGuiimport java.awt.
27、BorderLayout;import java.awt.Dime nsion;import java.awt.Toolkit;import javax.swi ngJFrame;import mys nake.box.Box;import mys nake.c on tral.S nakeKeyListe ner;import mys nake.sett in ggro und.PropertyPan el;p ublic class Mai nGui exte nds JFrame intwin dowHeight;/加數(shù)字是為了顯示效果,下同int win dowWidth;p riva
28、te Box box = new Box(this);Sn akeKeyListe ner keyListe ner = new Sn akeKeyListe ner(this);p rivate PropertyPanel sett ingPanel = new PropertyPan el();public Mai nGui() super(” 貪吃蛇 1.0");setDefaultCloseO peratio n( JFrame.EXIT_ON_CLOSE);wi ndowWidth = 880 + 17;win dowHeight = 600 + 40;Toolkit ki
29、t = T oolkit.getDefaultToolkit();/定義工具包Dime nsion scree nSize = kit.getScree nSize();/獲取屏幕的尺寸int scree nWidth = scree nSize.width;/獲取屏幕的寬int scree nH eight = scree nSize.height;/獲取屏幕的高setLocatio n(scree nWidth / 2 - win dowWidth / 2,scree nH eight / 2 - win dowHeight / 2);/設(shè)置窗口居中顯示setSize(wi ndowWid
30、th, wi ndowHeight);setLayout (new BorderLayout();add(box, BorderLayout.CENTER);add(setti ngPanel, BorderLayout.SOUTH);addListe ner();setVisible(true);getBox().requestFocus();import java.awt.eve nt.Act ion Liste ner;p ublic Box getBox() return box;p rivate void addListe ner() this.addKeyListe ner(key
31、Liste ner);box.addKeyListe ner(keyListe ner);sett ingPan el.addKeyListe ner(keyListe ner);sett ingPan el.getRuleText().addKeyListe ner(keyListe ner);p ublic PropertyPanel getSett ingPan el() retur n sett ingPan el;Box.javaimport mys nake.Ma in Gui;import java.awt.Color;import java.awt.Gra phics;impo
32、rt java.awt.eve nt.Act ionEvent;import javax.swi ngJ Pan el;import javax.swi ng.Timer;import mysn ake.setti nggro un d.Clock;p ublic class Box exte nds JPanel Mai nGui gui;p rivate Sn ake sn ake;p rivate Food food;p rivate Timer timer;p rivate int delay = 100;private Color backgrou ndColor = Color.D
33、ARK_GRAY;private Color webColor = Color.DARK_GRAY;p rivate int webStyle = 1;p rivate Clock clock;public Box(Mai nGui in Gui) gui = in Gui;sn ake = new Sn ake(this);food = new Food(this);setBackgro un d(backgro un dColor);timer = new Timer(delay, new Acti on Liste ner() p ublic void actionP erformed(
34、Acti onEvent e) gets nake().cou ntNewSite();repain t();up date Prop erty(););clock = new Clock();clock.getTimeThread().start();Override p ublic void pain t(Gra phics g) setBackgro un d(getBackgro un dColor();super.pain t(g);pai ntBackgrou ndRect(g, getWebStyle();getS nake().drawMe(g);getFood().drawM
35、e(g);p rivate void pain tBackgro un dRect(Gra phics 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 +
36、= 20) for (int j = 0; j < getHeight(); j += 20) g.fill3DRect(i, j, 20, 20, false);break;case 3:for (int i = 0; i < getWidth(); i += 20) g.drawL in e(i, 0, i, getHeight();for (int i = 0; i < getHeight(); i += 20) g.drawL in e(0, i, getWidth(), i);break;p rivate void up date Prop erty() gui.g
37、etSett ingPan el().getS nakeLe ngthLabel().setText("” +gets nake().getBody().size();switch (gui.getBox().getS nake().getDirecti on() case Snake.DIRECTION DOWN:gui.getSett ingPan el().getDirectio nLabel().setText(”下,J");break;case Snake.DIRECTION LEFT:gui.getSett ingPan el().getDirect ion L
38、abel().setText("左,J ");break;case Snake.DIRECTION RIGHT:右,gui.getSett ingPan el().getDirectio nLabel().setText(” break;case Snake.DIRECTION UP:gui.getSett ingPan el().getDirect ion Label().setText("上,t");break;gui.getSett ingPan el().getS nakeSiteLabel().setText("("+ (g
39、etS nake().getBody().getLast().x + 20) / 20+ (getS nake().getBody().getLast().y + 20) / 20 + ")");gui.getSetti ngPan el().getFoodSiteLabel().setText("("+ (getFood().x + 20) / 20+ (getFood().y + 20) / 20 + ")");秒");gui.getSett ingPan el().getTimeLabel().setText(getC
40、lock().getTime()+"gui.getSett ingPan el().getS peedLabel().setText(”格 /"+getTimer().getDelay()+"毫秒");p ublic Sn ake getS nake() retur n sn ake;p ublic Timer getTimer() retur n timer;return food;public Clock getClock() retur n clock;p ublic Color getBackgro un dColor() retur n bac
41、kgro un dColor;public in t getWebStyle() return webStyle;public Color getWebColor() retur n webColor;Food.javaimport java.awt.Color;import java.awt.Gra phics;import java.awt .Point;import java.util.Ra ndom;p ublic class Food exte nds Point Box box;private Color foodColor = Color.GREEN;p ublic Food(B
42、ox in Box) box = in Box;init();p ublic void in it() this.x = 200;this.y = 60;p ublic void n ewMe() boolea n isC on ti nu eCycle;do int tempX = (new Ra ndom(). next In t(box.getWidth() - 20);int tempY = (new Ran dom(). next In t(box.getHeight() - 20);this.x = tempX - tempX % 20;this.y = tempY - tempY
43、 % 20;isContinu eCycle = false;for (P oi nt p : box.getS nake().getBody() if (p. equals( Poi nt) this) isContinu eCycle = true; while (isC on ti nu eCycle);p ublic void drawMe(Gra phics g) g.setColor(getFoodColor();g.fill3DRect(box.getFood().x, box.getFood().y, 20, 20, true);public Color getFoodColo
44、r() retur n foodColor;四.San ke.javaimport java.awt.Color;import java.awt.Gra phics;import java.awt .Point;import java.util.L in kedList;import javax.swi ng.J Op tio nPane;p ublic class Sn ake public static final int DIRECTION _UP = 1;public static final int DIRECTION_DOWN = -1;public static final in
45、t DIRECTION_LEFT = 2;public static final int DIRECTION_RIGHT = -2;p rivate Lin kedList <Point> body = new Lin kedList <Poin t>();p rivate int direct ion;p rivate Color sn akeColor = Color.RED;p rivate boolea n isLive = true;Poi nt nextSite;Box box;public Snake(Box in Box) box = in Box;in
46、it();p rivate void in it() setDirectio n(DIRECTION_RIGHT);body.add( new Poin t(20, 60);body.add( new Poin t(40, 60);body.add( new Poin t(60, 60);body.add( new Poin t(80, 60);nextSite = new Poi nt(100, 60);p ublic void coun tNewSite() if (!isLive) talk in gdead();頭部增加一個(gè)節(jié)點(diǎn)getBody().addLast( new P oi n
47、t(n extSite.x, nextSite.y);/ if (n extSite.equals(box.getFood() box.getFood( ).n ewMe(); else getBody().remove();/移除最后一個(gè)節(jié)點(diǎn)switch (getDirectio n() case DIRECTION UP:nextSite.y -= 20;break;case DIRECTION DOWN:nextSite.y += 20;break;case DIRECTION LEFT:nextSite.x -= 20;break;case DIRECTION RIGHT:nextSi
48、te.x += 20;break;if (n extSite.x < 0) nextSite.x = (box.getWidth() / 20 - 1) * 20; else if (n extSite.x > box.getWidth()-20) nextSite.x = 0;if (n extSite.y < 0) nextSite.y = (box.getHeight() / 20 - 1) * 20; else if (n extSite.y > box.getHeight()-20) nextSite.y = 0;for (Point p : getBody(
49、) if (n extSite.equals( p) setlsLive(false);p ublic void drawMe(Gra phics g) g.setColor(s nakeColor);for (Point b : getBodyO) g.fill3DRect(b.x, b.y, 20, 20, true);p rivate void talk in gdead() box.getTimer().st op();int yourChoice = JOp tio nPan e.showC on firmDialog(box,"是否再來(lái)一局”,"死了 一&quo
50、t;JOp tio nPan e.YES_NO_ OP TION);if(yourChoice = JOp tio nPan e.YES_ OP TION)startNewGame();elseSystem.exit(0);p rivate void startNewGame() getBody().clear();this.i nit();box.getFood().i nit();box.getTimer().setDelay(100);box.getClock().setTime(0);setlsLive(true);public Lin kedList< Poi nt> g
51、etBody() retur n body;p ublic void setBody(L in kedList <Point> body) this.body = body;p ublic int getDirect ion() return directio n;p ublic void setDirect ion (i nt direct ion) this.directio n = direct ion;p ublic boolea n islsLive() return isLive;p ublic void setlsLive(boolea n isLive) this.
52、isLive = isLive;public Color getS nakeColor() retur n sn akeColor;五.Sn akeKeyListe ner.javacase KeyEve nt.VK_S:import java.awt.eve nt.KeyEve nt;import java.awt.eve nt.KeyListe ner;import mys nake.Mai nGui;import mys nake.box.S nake;p ublic class Sn akeKeyListe ner imp leme nts KeyListe ner Mai nGui
53、gui;public Sn akeKeyListe ner(Mai nGui in Gui) gui = in Gui;p ublic void keyP ressed(KeyEve nt e) switch (e.getKeyCodeO) case KeyEve nt.VK_DOWN:if (gui.getBox().getS nake().getDirectio n() = Sn ake.DIRECTION _UP) return;gui.getBox().getS nake().setDirectio n(Sn ake.DIRECTION_DOWN);break;case KeyEve nt.VK_W: case KeyEve nt.VK_ UP:if (gui.getBox().getS nake().getDire
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 多方投資擔(dān)保合同
- 建筑工程分包合同5篇
- 賠償協(xié)議書(shū)的格式年
- 公路交通工程與道路養(yǎng)護(hù)作業(yè)指導(dǎo)書(shū)
- 煤炭進(jìn)口合同6篇
- 針織橫機(jī)電控產(chǎn)業(yè)分析報(bào)告
- 南瓜收購(gòu)合同范本
- 養(yǎng)殖用電合同范本
- 賣(mài)窯洞合同范本
- 一般經(jīng)濟(jì)購(gòu)買(mǎi)合同范本
- GB/T 25890.7-2010軌道交通地面裝置直流開(kāi)關(guān)設(shè)備第7-1部分:直流牽引供電系統(tǒng)專(zhuān)用測(cè)量、控制和保護(hù)裝置應(yīng)用指南
- FZ/T 81013-2016寵物狗服裝
- 市政級(jí)安全管理
- 《社保知識(shí)培訓(xùn)》教學(xué)課件
- 肌力與肌張力課件
- 學(xué)生檔案登記表
- is620p系列伺服用戶(hù)手冊(cè)-v0.2綜合版
- 電信渠道管理人員考核管理辦法
- 勘察工作內(nèi)容及方案
- 八年級(jí)數(shù)學(xué)(上冊(cè))整式計(jì)算題練習(xí)100道無(wú)答案_新人教版
- 橋梁施工危險(xiǎn)源辨識(shí)與防控措施
評(píng)論
0/150
提交評(píng)論