貪吃蛇的研究與設(shè)計(jì)樣本_第1頁(yè)
貪吃蛇的研究與設(shè)計(jì)樣本_第2頁(yè)
貪吃蛇的研究與設(shè)計(jì)樣本_第3頁(yè)
貪吃蛇的研究與設(shè)計(jì)樣本_第4頁(yè)
貪吃蛇的研究與設(shè)計(jì)樣本_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

廣東技術(shù)師范學(xué)院天河學(xué)院JAVA程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告題目:______貪吃蛇研究與設(shè)計(jì)____學(xué)號(hào):______班級(jí):______本軟件122班__________小構(gòu)成員:___林盛東郭威彭更明____指引教師:鄭英姿所屬系部:計(jì)算機(jī)科學(xué)與技術(shù)系4月25日貪吃蛇研究與設(shè)計(jì)摘要近年來(lái),Java作為一種新編程語(yǔ)言,以其簡(jiǎn)樸性、可移植性和平臺(tái)無(wú)關(guān)性等長(zhǎng)處,得到了廣泛地應(yīng)用,特別是Java與萬(wàn)維網(wǎng)完美結(jié)合,使其成為網(wǎng)絡(luò)編程和嵌入式編程領(lǐng)域首選編程語(yǔ)言。“貪吃蛇”游戲是一種典型游戲,它因操作簡(jiǎn)樸、娛樂(lè)性強(qiáng)而廣受歡迎。本文基于Java技術(shù)和NetBeans開(kāi)發(fā)環(huán)境,開(kāi)發(fā)了一種操作簡(jiǎn)樸、界面美觀、功能較齊全“貪吃蛇”游戲。整個(gè)游戲程序分為二個(gè)功能模塊,八個(gè)類模塊,實(shí)現(xiàn)了游戲開(kāi)始、暫停、結(jié)束。通過(guò)本游戲開(kāi)發(fā),達(dá)到學(xué)習(xí)Java技術(shù)和熟悉軟件開(kāi)發(fā)流程目。本文在簡(jiǎn)介Java有關(guān)技術(shù)和國(guó)內(nèi)外發(fā)呈現(xiàn)狀基本上,對(duì)“貪吃蛇”游戲整個(gè)生命周期各個(gè)開(kāi)發(fā)階段進(jìn)行了詳細(xì)地簡(jiǎn)介。一方面,分析了開(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ì)簡(jiǎn)介了Java2原則運(yùn)營(yíng)環(huán)境配備,重點(diǎn)給出各個(gè)類模塊程序列表,簡(jiǎn)介了各個(gè)類包括變量、用法,展示了游戲界面。為了保證程序代碼對(duì)的性和功能實(shí)現(xiàn)可靠性,本文還簡(jiǎn)介了游戲軟件程序調(diào)試過(guò)程和功能測(cè)試成果。核心詞:Java;NetBeans;貪吃蛇;開(kāi)發(fā)流程目錄摘要 ITOC\o"1-3"\h\u1引言 21.1課題簡(jiǎn)介 21.2設(shè)計(jì)背景和意義 22系統(tǒng)分析 32.1可行性分析 32.2系統(tǒng)需求分析 42.2.1功能需求 42.2.2性能需求 42.2.3界面需求 42.3開(kāi)發(fā)環(huán)境 43系統(tǒng)概要設(shè)計(jì) 53.1程序流程圖 53.2類模塊設(shè)計(jì) 63.3系統(tǒng)數(shù)據(jù)構(gòu)造設(shè)計(jì) 63.3.1蛇、食物表達(dá) 63.3.2蛇移動(dòng) 63.3.3存儲(chǔ)蛇身數(shù)據(jù)構(gòu)造 73.3.4蛇移動(dòng)方向 73.3.5如何顯示蛇身 73.3.6蛇身移動(dòng)方向 73.3.7吃到食物鑒定 74系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn) 74.1程序設(shè)計(jì) 74.1.1主類Main 74.1.2類MainGui 84.1.3類Snake 84.1.4類Food 94.1.5類Box 94.1.6類SnakeKeyListener 94.1.7類Clock 104.1.8類PropertyPanel 104.2各功能界面截圖 104.2.1貪吃蛇游戲基本運(yùn)營(yíng)界面 104.2.2程序開(kāi)始運(yùn)營(yíng)界面 115測(cè)試 135.1測(cè)試意義 136結(jié)論 13參照文獻(xiàn) 14附錄重要代碼清單 151引言1.1課題簡(jiǎn)介貪吃蛇是世界知名益智類小游戲,選取這個(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)樸,面向?qū)ο?,分布式,解釋型,健壯安全,?gòu)造中立,可移植,性能優(yōu)秀、多線程動(dòng)態(tài)語(yǔ)言。這里采用Java作為開(kāi)發(fā)語(yǔ)言重要是基于Java面向?qū)ο蠛涂梢浦残浴etBeans是一種開(kāi)放源代碼、基于Java可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其自身而言,它只是一種框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。數(shù)據(jù)構(gòu)造是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)方式。數(shù)據(jù)構(gòu)造是指互相之間存在一種或各種特定關(guān)系數(shù)據(jù)元素集合。普通狀況下,精心選取數(shù)據(jù)構(gòu)造可以帶來(lái)更高運(yùn)營(yíng)或者存儲(chǔ)效率。數(shù)據(jù)構(gòu)造往往同高效檢索算法和索引技術(shù)關(guān)于。類是面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言中一種概念。類(Class)事實(shí)上是對(duì)某種類型對(duì)象定義變量和辦法原型。它表達(dá)對(duì)現(xiàn)實(shí)生活中一類具備共同特性事物抽象,是面向?qū)ο缶幊袒?。類是?duì)某個(gè)對(duì)象定義。它包具關(guān)于對(duì)象動(dòng)作方式信息,涉及它名稱、辦法、屬性和事件。事實(shí)上它自身并不是對(duì)象,由于它不存在于內(nèi)存中。當(dāng)引用類代碼運(yùn)營(yíng)時(shí),類一種新實(shí)例,即對(duì)象,就在內(nèi)存中創(chuàng)立了。雖然只有一種類,但能從這個(gè)類在內(nèi)存中創(chuàng)立各種相似類型對(duì)象。1.2設(shè)計(jì)背景和意義貪吃蛇游戲一款非常典型手機(jī)游戲,由于它比較簡(jiǎn)樸有趣,無(wú)論老少都比較適合。貪吃蛇設(shè)計(jì)對(duì)每一種Java語(yǔ)言設(shè)計(jì)者進(jìn)行語(yǔ)言提高和進(jìn)階都是一種較好鍛煉機(jī)會(huì)。貪吃蛇游戲設(shè)計(jì)比較復(fù)雜,它涉及面廣、牽涉方面多,如果不好好考慮和設(shè)計(jì),將難以成功開(kāi)發(fā)出這個(gè)游戲。在這個(gè)游戲設(shè)計(jì)中,牽涉到圖形界面顯示與更新、數(shù)據(jù)收集與更新,并且在這個(gè)游戲開(kāi)發(fā)中,還要應(yīng)用類繼承機(jī)制以及某些設(shè)計(jì)模式。因而,如何設(shè)計(jì)和開(kāi)發(fā)好這個(gè)貪吃蛇游戲,對(duì)于提高Java開(kāi)發(fā)水平和系統(tǒng)設(shè)計(jì)能力有極大協(xié)助。在設(shè)計(jì)開(kāi)發(fā)過(guò)程中,需要解決好各個(gè)類之間繼承關(guān)系,還要解決各個(gè)類相應(yīng)封裝,并且還要協(xié)調(diào)好各個(gè)模塊之間邏輯依賴關(guān)系和數(shù)據(jù)通信關(guān)系。正是由于如此,本次畢業(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)行一種項(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可行性分析貪吃蛇游戲是一種簡(jiǎn)樸大眾游戲,自從計(jì)算機(jī)實(shí)現(xiàn)以來(lái),深受廣大電腦玩家愛(ài)慕,做一種簡(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í)候,則只需把食物入隊(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寫應(yīng)用程序不用修改就可在不同軟硬件平臺(tái)上運(yùn)營(yíng)。由于Java重要用于網(wǎng)絡(luò)應(yīng)用程序開(kāi)發(fā),因而對(duì)安全性有較高規(guī)定。如果沒(méi)有安全保證,顧客從網(wǎng)絡(luò)下載程序執(zhí)行就非常危險(xiǎn)。Java通過(guò)自己安全機(jī)制防止了病毒程序產(chǎn)生和下載程序?qū)Ρ镜叵到y(tǒng)威脅破壞。2.2系統(tǒng)需求分析2.2.1功能需求本系統(tǒng)重要是完畢貪吃蛇游戲基本操作。顧客可以自己練習(xí)和娛樂(lè)。本系統(tǒng)需要滿足如下幾點(diǎn)規(guī)定:(1)運(yùn)用方向鍵來(lái)變化蛇運(yùn)營(yíng)方向。(2)空格鍵暫?;蚶^續(xù)游戲,并在隨機(jī)地方產(chǎn)生食物。(3)吃到食物就變成新蛇體,遇到墻或者自身則游戲結(jié)束,否則正常運(yùn)營(yíng)。2.2.2性能需求本軟件在設(shè)計(jì)方面本著以便、實(shí)用及娛樂(lè)性高宗旨,在對(duì)界面進(jìn)行設(shè)計(jì)過(guò)程中,始終堅(jiān)持清晰明了,在性能方面可以實(shí)現(xiàn)效率高,不易出錯(cuò)等長(zhǎng)處。2.2.3界面需求游戲主界面模塊:重要涉及游戲圖形區(qū)域界面、游戲開(kāi)始按鈕、暫停游戲按鈕、關(guān)閉按鈕。游戲主界面力求美觀,爽心悅目。游戲控制模塊:重要完畢控制游戲開(kāi)始、暫停、退出等功能,這某些做到易懂、易操作并且精確率高,不易出錯(cuò)。游戲主界面是進(jìn)入游戲后,可以給玩家第一感官某些,重要涉及游戲圖形區(qū)域界面、游戲速度選取更新界面、游戲分?jǐn)?shù)顯示更新界面、新生方塊預(yù)覽、游戲開(kāi)始按鈕、暫停游戲按鈕、退出游戲按鈕以及游戲排行榜按鈕。從很大限度上決定了玩家對(duì)游戲興趣問(wèn)題,因而,游戲主界面力求美觀,爽心悅目。游戲控制模塊是游戲中心環(huán)節(jié),重要完畢控制游戲開(kāi)始、暫停、退出等功能。為了可以給玩家一種較好游戲環(huán)境,這某些做到易懂、易操作。2.3開(kāi)發(fā)環(huán)境操作系統(tǒng)及版本:Windows7工具軟件:jdk1.7,NetBeans編程語(yǔ)言:JAVA語(yǔ)言3系統(tǒng)概要設(shè)計(jì)3.1程序流程圖單擊單擊“開(kāi)始游戲”按鈕,游戲開(kāi)始,蛇開(kāi)始隨機(jī)。鍵盤操作:向上右移F11加速左移F12減速向下Enter開(kāi)始/暫停蛇遇到邊界或者遇到自己?jiǎn)螕簟笆恰痹賮?lái)一局單擊“否”退出游戲游戲半途欲中斷,稍后繼續(xù)游戲單擊“暫停游戲”游戲暫停進(jìn)入游戲畫面再次單擊開(kāi)始游戲,游戲恢復(fù)圖1游戲解決流程圖3.2類模塊設(shè)計(jì)本系統(tǒng)共涉及8個(gè)類文獻(xiàn)。java源文獻(xiàn)及其功能如表所示。表3.1java源文獻(xiàn)及其功能序號(hào)文獻(xiàn)名重要功能1Main該文獻(xiàn)為程序入口,具有main辦法。2MainGui主界面類,該類用來(lái)創(chuàng)立游戲顧客界面,繼承自JFrame類。對(duì)主窗口屬性設(shè)立、注冊(cè)監(jiān)聽(tīng)者等3SnakeKeyListener蛇監(jiān)聽(tīng)器,依照按鍵變化蛇方向、速度等設(shè)立4Food該文獻(xiàn)實(shí)現(xiàn)構(gòu)成蛇身單位-食物。5Box該文獻(xiàn)實(shí)現(xiàn)蛇活動(dòng)場(chǎng)合6Snake該文獻(xiàn)實(shí)現(xiàn)蛇類,包具關(guān)于蛇辦法屬性7Clock該文獻(xiàn)為工具類,實(shí)現(xiàn)時(shí)間,速度控制8PropertyPanelsettingPanel可視化設(shè)立.設(shè)立游戲運(yùn)營(yíng)狀態(tài),移動(dòng)以及分?jǐn)?shù)更新,實(shí)現(xiàn)上下左右移動(dòng)辦法接口。3.3系統(tǒng)數(shù)據(jù)構(gòu)造設(shè)計(jì)3.3.1蛇、食物表達(dá)咱們可以把顯示區(qū)域想象成一種大大表格,里面格子就是構(gòu)成蛇基本單位,一種格子可以代表一種食物,使用坐標(biāo)來(lái)區(qū)別這些格子。3.3.2蛇移動(dòng)蛇向前移動(dòng)一步,可以看作是蛇頭前面增長(zhǎng)了一種節(jié)點(diǎn),蛇尾巴上少了一種節(jié)點(diǎn)(即去尾,加頭)3.3.3存儲(chǔ)蛇身數(shù)據(jù)構(gòu)造由于要區(qū)別蛇頭和蛇尾,因而這個(gè)數(shù)據(jù)構(gòu)造必要是有序。另一方面,咱們需要經(jīng)常訪問(wèn)第一種和最后一種節(jié)點(diǎn),因此LinkedList最適當(dāng)。由于它有g(shù)etFirst(),getLast(),和removeLast()辦法。3.3.4蛇移動(dòng)方向這里討論蛇移動(dòng)方向控制。蛇下一步移動(dòng)到哪里,是由方向來(lái)控制。這里咱們用int型常量來(lái)表達(dá)蛇移動(dòng)方向。由于咱們是依照原蛇頭坐標(biāo)和方向來(lái)擬定新蛇頭坐標(biāo)。在原坐標(biāo)基本上,依照蛇頭運(yùn)動(dòng)方向來(lái)擬定新蛇頭坐標(biāo),例如向上移動(dòng)就是y-1.3.3.5如何顯示蛇身顯示蛇身,其實(shí)就是填充用顏色填充格子。需要4個(gè)參數(shù),像素坐標(biāo)x,像素坐標(biāo)y,格子寬度,格子高度。像素坐標(biāo)就是矩形左上角坐標(biāo)3.3.6蛇身移動(dòng)方向(1)相反方向和上一次移動(dòng)方向相反方向稱為相反方向,這種輸入應(yīng)當(dāng)忽視。這樣可以防止蛇從自己身體中穿過(guò)。(2)無(wú)效方向在蛇這一次移動(dòng)之后和下一次移動(dòng)之前這個(gè)時(shí)間間隔內(nèi)輸入了各種非相反方向,只有最后一種是有效方向,其她都是無(wú)效方向。蛇最后運(yùn)動(dòng)方向以有效方向?yàn)闇?zhǔn)。3.3.7吃到食物鑒定這里通過(guò)鑒定坐標(biāo)與否重疊來(lái)判斷,只需要判斷蛇頭與否和食物重疊就可以了,由于蛇身體都是走蛇頭走過(guò)地方。4系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)4.1程序設(shè)計(jì)4.1.1主類Main(1)主類為此程序入口,定義了Main對(duì)象frame,開(kāi)始運(yùn)營(yíng)此程序。(2)源代碼見(jiàn)文獻(xiàn)Main.Java4.1.2類MainGui(1)成員變量見(jiàn)表4.1表4.1重要成員變量成員變量描述變量類型名稱設(shè)立面板privatesettingPanelsettingPanel按鍵監(jiān)聽(tīng)privatekeyListenerkeyListener蛇場(chǎng)對(duì)象privateBoxBox主窗口高度intwindowHeightwindowHeight主窗口寬度intwindowWidthwindowWidth(2)辦法見(jiàn)表4.2表4.2重要辦法辦法名功能addListener()注冊(cè)監(jiān)聽(tīng)getBox()更新蛇長(zhǎng)getSettingPanel()更新方向4.1.3類Snake(1)成員變量見(jiàn)表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)辦法見(jiàn)表4.4表4.4重要辦法辦法名功能init()初始化蛇,方向初始化為向右,增長(zhǎng)初始節(jié)點(diǎn)countNewSite()計(jì)算下一種位置drawMe()將蛇畫出stareNewGame()死亡之后重新開(kāi)始游戲4.1.4類Food(1)成員變量見(jiàn)表4.5表4.5重要成員變量成員變量描述變量類型名稱顏色foodColorColor 表4.6重要辦法辦法名功能drawMe()將食物畫出newMe()重新產(chǎn)生一種食物4.1.5類Box蛇場(chǎng)類。繼承自JPanel,Box,蛇活動(dòng)場(chǎng)合,也是食物浮現(xiàn)地方.重寫了該類paint()辦法,當(dāng)重繪時(shí)時(shí)會(huì)調(diào)用蛇、食物、網(wǎng)格繪制辦法。由定期器Timer控制,每隔delay時(shí)間,執(zhí)行:1.重新計(jì)算一下位置2.繪制新圖像3.更新屬性面板顯示,即該游戲重要原理。屬性面板時(shí)間由countTimer中獲取,運(yùn)營(yíng)在此外一種線程中,減小計(jì)時(shí)誤差4.1.6類SnakeKeyListener此類為蛇監(jiān)聽(tīng)類,實(shí)現(xiàn)蛇運(yùn)動(dòng)監(jiān)聽(tīng),依照按鍵變化蛇方向、速度等設(shè)立該類包括控制器和解決按鍵邏輯,控制器,控制Box,Snake,F(xiàn)ood.負(fù)責(zé)游戲邏輯.解決按鍵事件,可以解決Snake觸發(fā)事件,該類覆蓋keyPressed()辦法:解決按鍵事件,依照按鍵不同,發(fā)出不同指令:UP:變化蛇移動(dòng)方向?yàn)橄蛏螪OWN:變化蛇移動(dòng)方向?yàn)橄蛳翷EFT:變化蛇移動(dòng)方向?yàn)橄蜃驲IGHT:變化蛇移動(dòng)方向?yàn)橄蛴襫ewGame()開(kāi)始新游戲辦法源代碼見(jiàn)文獻(xiàn)SnakeKeyListener.java4.1.7類Clock重要功能是計(jì)時(shí)。源代碼見(jiàn)文獻(xiàn)Globel.java4.1.8類PropertyPanelsettingPanel可視化設(shè)立.設(shè)立游戲運(yùn)營(yíng)狀態(tài),移動(dòng)以及分?jǐn)?shù)更新,實(shí)現(xiàn)上下左右移動(dòng)辦法接口。源代碼見(jiàn)文獻(xiàn)PropertyPanel.java4.2各功能界面截圖4.2.1貪吃蛇游戲基本運(yùn)營(yíng)界面圖4.1初始界面圖4.2控制面板4.2.2程序開(kāi)始運(yùn)營(yíng)界面(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é)束,選取與否繼續(xù)5測(cè)試5.1測(cè)試意義系統(tǒng)測(cè)試是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序過(guò)程,成功測(cè)試是發(fā)現(xiàn)了至今尚未發(fā)現(xiàn)錯(cuò)誤測(cè)試。測(cè)試目就是但愿能以至少人力和時(shí)間發(fā)現(xiàn)潛在各種錯(cuò)誤和缺陷。應(yīng)依照開(kāi)發(fā)各階段需求、設(shè)計(jì)等文檔或程序內(nèi)部構(gòu)造精心設(shè)計(jì)測(cè)試用例,并運(yùn)用這些實(shí)例來(lái)運(yùn)營(yíng)程序,以便發(fā)現(xiàn)錯(cuò)誤。系統(tǒng)測(cè)試是保證系統(tǒng)質(zhì)量和可靠性核心環(huán)節(jié),是對(duì)系統(tǒng)開(kāi)發(fā)過(guò)程中系統(tǒng)分析系統(tǒng)設(shè)計(jì)和實(shí)行最后復(fù)查。依照測(cè)試概念和目,在進(jìn)行信息系統(tǒng)測(cè)試時(shí)應(yīng)遵循以基本原則。(1)擬定測(cè)試籌劃。在制定測(cè)試籌劃時(shí),要充分考慮整個(gè)項(xiàng)目開(kāi)發(fā)時(shí)間和開(kāi)發(fā)進(jìn)童以及某些人為因素和客觀條件等,使得測(cè)試籌劃是可行。測(cè)試籌劃內(nèi)容重要有測(cè)試內(nèi)容、進(jìn)度安排、測(cè)試所需環(huán)境和條件、測(cè)試培訓(xùn)安排等。(3)依照測(cè)試大綱設(shè)計(jì)和生成測(cè)試用例。在設(shè)計(jì)測(cè)試用例時(shí)候,可綜合運(yùn)用前面簡(jiǎn)介測(cè)試用例和設(shè)計(jì)技術(shù),產(chǎn)生測(cè)試設(shè)計(jì)闡明文檔,其內(nèi)容重要有被測(cè)項(xiàng)目、輸人數(shù)據(jù)、測(cè)試過(guò)程、預(yù)期輸出成果等。(4)實(shí)行測(cè)試。測(cè)試實(shí)行階段是由一系列測(cè)試周期構(gòu)成。在每個(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)行概要闡明,列出測(cè)試結(jié)論,指出缺陷和錯(cuò)誤,此外,給出某些建議,如可采用修改辦法,各項(xiàng)修改預(yù)測(cè)工作量及修改負(fù)責(zé)人員。程序運(yùn)營(yíng)正常,沒(méi)有發(fā)現(xiàn)什么錯(cuò)誤。6結(jié)論通過(guò)這次課程設(shè)計(jì),我對(duì)上學(xué)期所學(xué)JAVA語(yǔ)言程序設(shè)計(jì)有一種更深刻理解,將所學(xué)知識(shí)應(yīng)用于實(shí)踐,由于所學(xué)知識(shí)有限,為了使游戲可以可以實(shí)現(xiàn)自己預(yù)先構(gòu)想,咱們這組通過(guò)上網(wǎng)找代碼和去圖書館借書找程序,比較畫好流程圖及功能模塊,不斷閱讀修改代碼使程序達(dá)到預(yù)期所要實(shí)現(xiàn)目的,完畢課程設(shè)計(jì)后,可以感覺(jué)到自己對(duì)Java程序又有了新結(jié)識(shí)。在做Java設(shè)計(jì)之前也有做過(guò)其她課程設(shè)計(jì),大多規(guī)模很小。綜合運(yùn)用此前所學(xué)習(xí)知識(shí),設(shè)計(jì)一種JAVA小游戲即貪吃蛇,并能實(shí)現(xiàn)如下功能:游戲背景及樣式控制、蛇與食物顏色控制、游戲速度控制、游戲暫停、游戲重新開(kāi)始、游戲結(jié)束。由于其各個(gè)模塊間聯(lián)系十分緊密,代碼重復(fù)執(zhí)行率高,當(dāng)通過(guò)無(wú)多次調(diào)試、修改后,能最后看到成品,有無(wú)比自豪心情??傊ㄟ^(guò)本次課程設(shè)計(jì),使我平時(shí)學(xué)到理論知識(shí)得到了較好地升華,理論與實(shí)際得到一次較好結(jié)合,為我此后參加工作打下了堅(jiān)實(shí)基本,使我受益匪淺。參照文獻(xiàn)[1]NarcisioTumushabe,TANGuan-zhengAnoverviewofauthenticationsecurityfeaturesinASP.NET,《SchoolofComputerScienceandInformationTechnology》(3)[2]AndersHejlsbergScottWiltamuthPeterGolde.TheC#ProgrammingLanguage[M].POSTS&TELECOMPress,.[3]KarliWatson.BeginningVisualC#[M].Wrox,[4]馬蘇拉,許錦興.校友通信錄UML建模和C#實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程,第12期[5]徐龍.基于ASP.NET技術(shù)電子留言板設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),第25期[6]劉震.廣播電視大學(xué)校友錄系統(tǒng)實(shí)現(xiàn)[J].江西廣播電視大學(xué)學(xué)報(bào),第1期[7]馬駿,鄭逢斌,沈夏炯.C#網(wǎng)絡(luò)應(yīng)用高檔編程.人民郵電出版社,[8]梅曉冬,顏燁青.VisualC#網(wǎng)絡(luò)編程技術(shù)與實(shí)踐.清華大學(xué)出版社,.[9]張軍偉.基于三層框架C#ASP.NE工程序設(shè)計(jì)[J].電腦編程技巧與維護(hù),第9期[10]劉克成,張凌曉.C#程序設(shè)計(jì).中華人民共和國(guó)鐵道出版社,.[11]劉艾俠.基于Awebservice調(diào)用[J].科技信息,,第23期[12]任艷斐基于VS.NET動(dòng)態(tài)移動(dòng)Web查詢系統(tǒng)設(shè)計(jì),《通信技術(shù)》4期[13]王西鋒,張曉孿.應(yīng)用程序中數(shù)據(jù)庫(kù)自動(dòng)備份實(shí)現(xiàn)[J].《當(dāng)代電子技術(shù)》8期附錄重要代碼清單MainGuiimportjava.awt.BorderLayout;importjava.awt.Dimension;importjava.awt.Toolkit;importjavax.swing.JFrame;importmysnake.box.Box;importmysnake.contral.SnakeKeyListener;importmysnake.settingground.PropertyPanel;publicclassMainGuiextendsJFrame{intwindowHeight;//加數(shù)字是為了顯示效果,下同intwindowWidth;privateBoxbox=newBox(this);SnakeKeyListenerkeyListener=newSnakeKeyListener(this);privatePropertyPanelsettingPanel=newPropertyPanel();publicMainGui(){super("貪吃蛇1.0");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);windowWidth=880+17;windowHeight=600+40;Toolkitkit=Toolkit.getDefaultToolkit();//定義工具包DimensionscreenSize=kit.getScreenSize();//獲取屏幕尺寸intscreenWidth=screenSize.width;//獲取屏幕寬intscreenHeight=screenSize.height;//獲取屏幕高setLocation(screenWidth/2-windowWidth/2,screenHeight/2-windowHeight/2);//設(shè)立窗口居中顯示setSize(windowWidth,windowHeight);setLayout(newBorderLayout());add(box,BorderLayout.CENTER);add(settingPanel,BorderLayout.SOUTH);addListener();setVisible(true);getBox().requestFocus();}publicBoxgetBox(){returnbox;}privatevoidaddListener(){this.addKeyListener(keyListener);box.addKeyListener(keyListener);settingPanel.addKeyListener(keyListener);settingPanel.getRuleText().addKeyListener(keyListener);}publicPropertyPanelgetSettingPanel(){returnsettingPanel;}}Box.javaimportmysnake.MainGui;importjava.awt.Color;importjava.awt.Graphics;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JPanel;importjavax.swing.Timer;importmysnake.settingground.Clock;publicclassBoxextendsJPanel{MainGuigui;privateSnakesnake;privateFoodfood;privateTimertimer;privateintdelay=100;privateColorbackgroundColor=Color.DARK_GRAY;privateColorwebColor=Color.DARK_GRAY;privateintwebStyle=1;privateClockclock;publicBox(MainGuiinGui){gui=inGui;snake=newSnake(this);food=newFood(this);setBackground(backgroundColor);timer=newTimer(delay,newActionListener(){publicvoidactionPerformed(ActionEvente){getSnake().countNewSite();repaint();updateProperty();}});clock=newClock();clock.getTimeThread().start();}@Overridepublicvoidpaint(Graphicsg){setBackground(getBackgroundColor());super.paint(g);paintBackgroundRect(g,getWebStyle());getSnake().drawMe(g);getFood().drawMe(g);}privatevoidpaintBackgroundRect(Graphicsg,intstyle){g.setColor(getWebColor());switch(style){case0:return;case1:for(inti=0;i<getWidth();i+=20){for(intj=0;j<getHeight();j+=20){g.fill3DRect(i,j,20,20,true);}}break;case2:for(inti=0;i<getWidth();i+=20){for(intj=0;j<getHeight();j+=20){g.fill3DRect(i,j,20,20,false);}}break;case3:for(inti=0;i<getWidth();i+=20){g.drawLine(i,0,i,getHeight());}for(inti=0;i<getHeight();i+=20){g.drawLine(0,i,getWidth(),i);}break;}}privatevoidupdateProperty(){gui.getSettingPanel().getSnakeLengthLabel().setText(""+getSnake().getBody().size());switch(gui.getBox().getSnake().getDirection()){caseSnake.DIRECTION_DOWN:gui.getSettingPanel().getDirectionLabel().setText("下,↓");break;caseSnake.DIRECTION_LEFT:gui.getSettingPanel().getDirectionLabel().setText("左,←");break;caseSnake.DIRECTION_RIGHT:gui.getSettingPanel().getDirectionLabel().setText("右,→");break;caseSnake.DIRECTION_UP:gui.getSettingPanel().getDirectionLabel().setText("上,↑");break;}gui.getSettingPanel().getSnakeSiteLabel().setText("("+(getSnake().getBody().getLast().x+20)/20+","+(getSnake().getBody().getLast().y+20)/20+")");gui.getSettingPanel().getFoodSiteLabel().setText("("+(getFood().x+20)/20+","+(getFood().y+20)/20+")");gui.getSettingPanel().getTimeLabel().setText(getClock().getTime()+"秒");gui.getSettingPanel().getSpeedLabel().setText("格/"+getTimer().getDelay()+"毫秒");}publicSnakegetSnake(){returnsnake;}publicTimergetTimer(){returntimer;}publicFoodgetFood(){returnfood;}publicClockgetClock(){returnclock;}publicColorgetBackgroundColor(){returnbackgroundColor;}publicintgetWebStyle(){returnwebStyle;}publicColorgetWebColor(){returnwebColor;}}Food.javaimportjava.awt.Color;importjava.awt.Graphics;importjava.awt.Point;importjava.util.Random;publicclassFoodextendsPoint{Boxbox;privateColorfoodColor=Color.GREEN;publicFood(BoxinBox){box=inBox;init();}publicvoidinit(){this.x=200;this.y=60;}publicvoidnewMe(){booleanisContinueCycle;do{inttempX=(newRandom()).nextInt(box.getWidth()-20);inttempY=(newRandom()).nextInt(box.getHeight()-20);this.x=tempX-tempX%20;this.y=tempY-tempY%20;isContinueCycle=false;for(Pointp:box.getSnake().getBody()){if(p.equals((Point)this)){isContinueCycle=true;}}}while(isContinueCycle);}publicvoiddrawMe(Graphicsg){g.setColor(getFoodColor());g.fill3DRect(box.getFood().x,box.getFood().y,20,20,true);}publicColorgetFoodColor(){returnfoodColor;}}Sanke.javaimportjava.awt.Color;importjava.awt.Graphics;importjava.awt.Point;importjava.util.LinkedList;importjavax.swing.JOptionPane;publicclassSnake{publicstaticfinalintDIRECTION_UP=1;publicstaticfinalintDIRECTION_DOWN=-1;publicstaticfinalintDIRECTION_LEFT=2;publicstaticfinalintDIRECTION_RIGHT=-2;privateLinkedList<Point>body=newLinkedList<Point>();privateintdirection;privateColorsnakeColor=Color.RED;privatebooleanisLive=true;PointnextSite;Boxbox;publicSnake(BoxinBox){box=inBox;init();}privatevoidinit(){setDirection(DIRECTION_RIGHT);body.add(newPoint(20,60));body.add(newPoint(40,60));body.add(newPoint(60,60));body.add(newPoint(80,60));nextSite=newPoint(100,60);}publicvoidcountNewSite(){if(!isLive){talkingdead();}getBody().addLast(newPoint(nextSite.x,nextSite.y));//頭部增長(zhǎng)一種節(jié)點(diǎn)if(nextSite.equals(box.getFood())){box.getFood().newMe();}else{getBody().remove();//移除最后一種節(jié)點(diǎn)}switch(getDirection()){caseDIRECTION_UP:nextSite.y-=20;break;caseDIRECTION_DOWN:nextSite.y+=20;break;caseDIRECTION_LEFT:nextSite.x-=20;break;caseDIRECTION_RIGHT:nextSite.x+=20;break;}if(nextSite.x<0){nextSite.x=(box.getWidth()/20-1)*20;}elseif(nextSite.x>box.getWidth()-20){nextSite.x=0;}if(nextSite.y<0){nextSite.y=(box.getHeight()/20-1)*20;}elseif(nextSite.y>box.getHeight()-20){nextSite.y=0;}for(Pointp:getBody()){if(nextSite.equals(p)){setIsLive(false);}}}publicvoiddrawMe(Graphicsg){g.setColor(snakeColor);for(Pointb:getBody()){g.fill3DRect(b.x,b.y,20,20,true);}}privatevoidtalkingdead(){box.getTimer().stop();intyourChoice=JOptionPane.showConfirmDialog(box,"與否再來(lái)一局","死了~~~",JOptionPane.YES_NO_OPTION);if(yourChoice==JOptionPane.YES_OPTION){startNewGame();}else{System.exit(0);}}privatevoidstartNewGame(){getBody().clear();this.init();box.getFood().init();box.getTimer().setDelay(100);box.getClock().setTime(0);setIsLive(true);}publicLinkedList<Point>getBody(){returnbody;}publicvoidsetBody(LinkedList<Point>body){this.body=body;}publicintgetDirection(){returndirection;}publicvoidsetDirection(intdirection){this.direction=direction;}publicbooleanisIsLive(){returnisLive;}publicvoidsetIsLive(booleanisLive){this.isLive=isLive;}publicColorgetSnakeColor(){returnsnakeColor;}}SnakeKeyListener.javaimportjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;importmysnake.MainGui;importmysnake.box.Snake;publicclassSnakeKeyListenerimplementsKeyListener{MainGuigui;publicSnakeKeyListener(MainGuiinGui){gui=inGui;}publicvoidkeyPressed(KeyEvente){switch(e.getKeyCode()){caseKeyEvent.VK_S:caseKeyEvent.VK_DOWN:if(gui.getBox().getSnake().getDirection()==Snake.DIRECTION_UP){return;}gui.getBox().getSnake().setDirection(Snake.DIRECTION_DOWN);break;caseKeyEvent.VK_W:caseKeyEvent.VK_UP:if(gui.getBox().getSnake().getDirection()==Snake.DIRECTION_DOWN){return;}gui.getBox().getSnake().setDirection(Snake.DIRECTION_UP);break;caseKeyEvent.VK_A:caseKeyEvent.VK_LEFT:if(gui.getBox().getSnake().getDirection()==Snake.DIRECTION_RIGHT){return;}gui.getBox().getSnake().setDirection(Snake.DIRECTION_LEFT);break;caseKeyEvent.VK_D:caseKeyEvent.VK_RIGHT:if(gui.getBox().getSnake().getDirection()==Snake.DIRECTION_LEFT){return;

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論