![基于J2ME平臺與Eclipse開發(fā)環(huán)境的貪吃蛇小游戲-畢業(yè)論文_第1頁](http://file4.renrendoc.com/view/c0ae70eb5dc643d065064c0f76ece812/c0ae70eb5dc643d065064c0f76ece8121.gif)
![基于J2ME平臺與Eclipse開發(fā)環(huán)境的貪吃蛇小游戲-畢業(yè)論文_第2頁](http://file4.renrendoc.com/view/c0ae70eb5dc643d065064c0f76ece812/c0ae70eb5dc643d065064c0f76ece8122.gif)
![基于J2ME平臺與Eclipse開發(fā)環(huán)境的貪吃蛇小游戲-畢業(yè)論文_第3頁](http://file4.renrendoc.com/view/c0ae70eb5dc643d065064c0f76ece812/c0ae70eb5dc643d065064c0f76ece8123.gif)
![基于J2ME平臺與Eclipse開發(fā)環(huán)境的貪吃蛇小游戲-畢業(yè)論文_第4頁](http://file4.renrendoc.com/view/c0ae70eb5dc643d065064c0f76ece812/c0ae70eb5dc643d065064c0f76ece8124.gif)
![基于J2ME平臺與Eclipse開發(fā)環(huán)境的貪吃蛇小游戲-畢業(yè)論文_第5頁](http://file4.renrendoc.com/view/c0ae70eb5dc643d065064c0f76ece812/c0ae70eb5dc643d065064c0f76ece8125.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
論文(設(shè)計)題目:邵小兵邵小兵姓名計算機(jī)與信息工程學(xué)院學(xué)號計算機(jī)與信息工程學(xué)院計算機(jī)科學(xué)與技術(shù)院系計算機(jī)科學(xué)與技術(shù)2011級2011級年級指導(dǎo)教師20年月日目錄摘要 1ABSTRACT 1第1章緒論 21.1研究意義及研究現(xiàn)狀 21.1.1研究意義 21.1.2研究現(xiàn)狀 21.2開發(fā)環(huán)境概述 31.2.1開發(fā)工具Eclipse 31.2.2開發(fā)平臺J2ME 31.2.3開發(fā)語言Java 3第2章系統(tǒng)分析 42.1需求分析 42.2可行性分析 52.2.1社會可行性分析 52.2.2技術(shù)可行性分析 52.2.3經(jīng)濟(jì)可行性分析 5第3章總體設(shè)計 63.1設(shè)計原則與實(shí)現(xiàn)目標(biāo) 63.2系統(tǒng)運(yùn)行總體流程設(shè)計 63.3系統(tǒng)功能模塊設(shè)計 83.3.1游戲總設(shè)計模塊 83.3.2游戲主界面模塊 83.3.3游戲控制模塊 83.3.4游戲進(jìn)度管理模塊 93.3.5游戲排行榜模塊 93.3.6游戲類模塊 10第4章詳細(xì)設(shè)計 114.1程序設(shè)計思路 114.2類模塊具體設(shè)計 114.2.1GameStart類 114.2.2GameFrame類 124.2.3GamePanel類 124.2.4Snake類 144.2.5Barrier類 144.2.6Food類 144.2.7GameRecords類 144.2.8Record類 144.2.9GameConstant類 144.2.10ReadRecord類 144.2.11WriteRecord類 144.3關(guān)鍵功能具體實(shí)現(xiàn) 154.3.1蛇、食物、石頭的表示 154.3.2蛇的移動方向表示 154.3.3食物及障礙物的隨機(jī)生成 174.3.4如何判斷蛇吃掉食物 184.3.5如何實(shí)現(xiàn)鍵盤控制蛇運(yùn)行方向 184.3.6如何判斷游戲結(jié)束 194.3.7如何實(shí)現(xiàn)游戲進(jìn)度的保存與加載 204.3.8如何實(shí)現(xiàn)游戲得分排行榜 21第5章系統(tǒng)測試 235.1游戲測試 235.1.1進(jìn)入游戲 235.1.2運(yùn)行游戲 235.1.3加載保存游戲 245.1.4游戲排行榜 265.2游戲創(chuàng)新與不足 275.2.1創(chuàng)新點(diǎn) 275.2.2不足點(diǎn) 27參考文獻(xiàn) 28致謝 29PAGE\*Arabic1摘要在當(dāng)今社會,隨著科技的發(fā)展,人們的生活節(jié)奏越來越快,工作生活壓力也隨之增大,此時一款可以隨時隨地娛樂的手機(jī)游戲就成了必需品。因此,設(shè)計一個操作簡單、娛樂性強(qiáng)、界面美觀的小游戲,在繁忙的工作之余適當(dāng)?shù)赝嫱孢@個游戲,不僅可以調(diào)節(jié)情緒,使人心情愉悅,更能健腦益智,為更好的投入學(xué)習(xí)工作做好準(zhǔn)備。
現(xiàn)在設(shè)計的這一款貪吃蛇游戲,就是滿足以上要求而開發(fā)出來的。貪吃蛇是一個經(jīng)典的游戲,它因操作簡單、娛樂性強(qiáng)而廣受歡迎。本論文基于J2ME平臺與Eclipse開發(fā)環(huán)境,采用Java語言,開發(fā)了一個貪吃蛇小游戲,整個游戲程序分為四個功能模塊,十一個類模塊,實(shí)現(xiàn)了游戲的開始、暫停、結(jié)束、得分、排行、保存加載進(jìn)度等功能。通過本次游戲的開發(fā),可以達(dá)到學(xué)習(xí)Java技術(shù)和熟悉軟件開發(fā)流程的目的。關(guān)鍵詞:手機(jī)游戲;J2ME;Eclipse;Java;貪吃蛇ABSTRACTIntoday'ssociety,withthedevelopmentofscienceandtechnology,therhythmofpeople'slifebecomemoreandmorefastandtheworkingstressalsoincrease.Atthispointaentertainmentgameonmobilephoneswhichcanbeplayedanywherehasbecomenecessary.Therefore,wocandesignasmallgamewhichissimple,entertainingandhaveabeautifulinterface.Toplaythesmallgameinthebusyworklife,itnotonlycanadjustthemood,makepeoplefeelbetter,butalsocanexercisethebrainandmakeapreparationfortherestwordandstudy.NowwedesigntheSnakegametomeettheaboverequirements.Snakegameisaclassicgameanditispopularforthesimpleoperationeandentertaining.ThisarticleisbasedonJ2MEplatformandtheEclipsedevelopmentenvironmenttodevelopaverygoodSnakegame.Thewholegameprogramisdividedintofourfunctionmodules,elevenclassmoduleandthefunctionofgamestart,pause,end,score,ranking,savingtheprogressorloadingtheprogressmustbeimplemented.Throughthisdevelopmentofthegame,wocanachievethepurposeoflearningJavatechnologyandbefamiliarwiththeprocessofsoftwaredevelopment.Keywords:cellphonegame;J2ME;Eclipse;Java;Snake第1章緒論本章先對系統(tǒng)的研究意義以及國內(nèi)外研究現(xiàn)狀進(jìn)行了詳細(xì)論述,然后介紹了系統(tǒng)的開發(fā)工具Eclipse,接著對開發(fā)平臺J2ME作了簡單說明,最后詳細(xì)闡述了Java開發(fā)語言的語言特點(diǎn)。1.1研究意義及研究現(xiàn)狀1.1.1研究意義在我們的生活中有很多的游戲,但是游戲不同,給玩家?guī)淼囊矔遣煌母杏X和生活理念,游戲平臺經(jīng)過游戲機(jī)到電視游戲,然后從電腦游戲到手機(jī)游戲,中間經(jīng)歷了很多的技術(shù)更新和變革[1]。隨著新技術(shù)的發(fā)展和人們生活水平的提高,手機(jī)逐漸普及。手機(jī)小巧便捷、易于攜帶,因此成為我們?nèi)粘I钪斜貍涞耐ㄓ嵐ぞ撸谑謾C(jī)平臺的游戲也就擁有了巨大的市場空間,而隨著3G的應(yīng)用與發(fā)展,手機(jī)游戲必然會迎來新的熱潮?,F(xiàn)在全世界有超過數(shù)十億部移動電話正在被使用,雖然這些手機(jī)只有一部分是支持Java游戲的手機(jī),但是這個數(shù)目正在快速地提高并且在幾年內(nèi)Java手機(jī)將要成為行業(yè)標(biāo)準(zhǔn),移動游戲的市場潛力比其它任何平臺都要大。在現(xiàn)代社會,人們的壓力日益增大,需要勞逸結(jié)合才能獲得更高的工作效率,工作之余的娛樂對每一個人來說都是必不可少的[2]。貪吃蛇游戲是一款非常經(jīng)典的手機(jī)游戲,它比較簡單有趣,深受男女老少喜歡。貪吃蛇的設(shè)計對每一個Java語言學(xué)習(xí)者都是一個很好的鍛煉機(jī)會,本次設(shè)計不僅考查了我綜合運(yùn)用以前所學(xué)知識的能力,同時也鍛煉了我的實(shí)際動手能力。1.1.2研究現(xiàn)狀目前的手機(jī)游戲數(shù)量眾多,但日本、韓國、歐美等地開發(fā)的游戲幾乎占據(jù)了中國手機(jī)游戲80%的市場。國內(nèi)手機(jī)游戲開發(fā)商開發(fā)能力與國外開發(fā)商比較,力量相對薄弱,目前國內(nèi)手機(jī)游戲仍以單機(jī)版游戲?yàn)橹鳎W(wǎng)游版游戲產(chǎn)品所占比重較低[3]。從整體行業(yè)來看,中國手機(jī)游戲行業(yè)正處于快速發(fā)展期,手機(jī)游戲市場未來前景巨大。這些年由于Java技術(shù)的不斷發(fā)展,Java程序的運(yùn)行速度有了顯著提升,而硬件技術(shù)的不斷發(fā)展,使得Java處理比較復(fù)雜的3D圖形成為可能[4]。Java3D技術(shù)的出現(xiàn),使Java語言可以充分的利用現(xiàn)有顯卡強(qiáng)大的硬件加速能力,目前已經(jīng)有很多基于Java的2D和3D游戲,其中不乏大型多人在線游戲。Java游戲正煥發(fā)著越來越蓬勃的生命力,在整個游戲產(chǎn)業(yè)中所占的比例也越來越大。1.2開發(fā)環(huán)境概述1.2.1開發(fā)工具Eclipse
Eclipse是一個基于Java的可擴(kuò)展開發(fā)平臺,是最強(qiáng)大的、最易于使用的Java快速開發(fā)工具之一[5]。Eclispse把Java編程語言的強(qiáng)大威力和圖形用戶界面化的快速開發(fā)環(huán)境的易用性有機(jī)地結(jié)合在一起,使創(chuàng)建應(yīng)用程序、類和工程的過程變得簡單,設(shè)計器與雙向開發(fā)工具的使用使圖形界面的設(shè)計變得非常容易。1.2.2開發(fā)平臺J2ME隨著無線應(yīng)用技術(shù)和嵌入式系統(tǒng)越來越受到人們的歡迎,Sun公司為了迎合這一發(fā)展趨勢推出了J2ME平臺。J2ME是于1999年在JavaOne大會上正式被提出來的,是Sun公司為小型電子產(chǎn)品的應(yīng)用程序開發(fā)專門提供的Java版本。從體系結(jié)構(gòu)上來看,J2ME按層來組織開發(fā)平臺,它主要由JVM層,Configuration層和Profile層三部分構(gòu)成[6]。J2ME的核心是配置層,其中定義了JVM,JVM的作用是與設(shè)備底層的操作系統(tǒng)溝通,Profile則提供訪問設(shè)備以及圖形界面的API,加上簡表層共同構(gòu)成了J2ME的運(yùn)行環(huán)境。1.2.3開發(fā)語言JavaJava是一種可以開發(fā)跨平臺應(yīng)用軟件的面向?qū)ο笳Z言,Java技術(shù)具有很好的通用性、高效性和安全性,廣泛應(yīng)用于個人電腦、游戲控制臺、數(shù)據(jù)中心、互聯(lián)網(wǎng)和移動電話[7]。在全球移動互聯(lián)網(wǎng)的產(chǎn)業(yè)大環(huán)境下,Java更是具備了顯著的優(yōu)勢和廣闊的前景。Java語言具有如下特點(diǎn):(1)簡單性。Java是一種面向?qū)ο蟮恼Z言,它通過提供最基本的方法來完成指定的任務(wù)[8],開發(fā)者只需要知道一些基本概念就能夠編寫出一些應(yīng)用程序。(2)面向?qū)ο笳Z言。Java的設(shè)計集中于對象及其接口,它提供了簡單的類機(jī)制以及動態(tài)的接口模型。(3)健壯性。Java致力于檢查程序在編譯時和運(yùn)行時的錯誤,減少了內(nèi)存出錯的可能性[9],并且提供垃圾收集器自動回收不用的內(nèi)存。第2章系統(tǒng)分析系統(tǒng)分析是軟件生命周期中重要的一步,也是起決定性的一步。通過它可以全面了解整個系統(tǒng)的功能和性能方面的要求,為軟件設(shè)計打下堅(jiān)實(shí)的基礎(chǔ)。系統(tǒng)分析工作主要包括需求分析與可行性分析。2.1需求分析需求分析的最基本任務(wù)是精準(zhǔn)地回答“系統(tǒng)必須做什么”這個問題[10]。為了能夠開發(fā)出真正令用戶滿意的產(chǎn)品,開發(fā)者首先要知道用戶的需求。對軟件需求的深層次理解是軟件開發(fā)工作獲得成功的前提條件,不論開發(fā)者把設(shè)計做得如何優(yōu)秀,如果不能夠真正滿足用戶的需求就只會令用戶失望,給自己帶來煩惱。本設(shè)計所開發(fā)的是基于Java的一個貪吃蛇游戲軟件,主要實(shí)現(xiàn)游戲的開始、暫停、退出、加速減速、統(tǒng)計分?jǐn)?shù)、排行榜等功能,游戲總體分為游戲主界面、游戲控制、游戲進(jìn)度管理和游戲排行榜四個模塊。其中游戲主界面模塊主要包括游戲圖形區(qū)域界面、游戲開始按鈕、暫停游戲按鈕、關(guān)閉按鈕、加載保存進(jìn)度按鈕、打開游戲排行榜按鈕等,游戲的主界面應(yīng)該力求美觀,爽心悅目。游戲控制模塊主要完成按鍵事件與邏輯事件的處理,這部分應(yīng)該做到易懂、易操作而且準(zhǔn)確率高,不易出錯。游戲進(jìn)度管理模塊主要實(shí)現(xiàn)當(dāng)前游戲進(jìn)度的保存與加載已保存的游戲進(jìn)度,游戲排行榜模塊主要實(shí)現(xiàn)玩家得分的排名。綜上所述,本系統(tǒng)需要滿足以下幾點(diǎn)要求:(1)有良好的方塊形狀設(shè)計方法來繪制小蛇、食物與障礙物,小蛇由幾個方塊組成,食物與障礙物由一個方塊組成。(2)能夠隨機(jī)產(chǎn)生食物與障礙物。(3)實(shí)現(xiàn)按鈕、鍵盤事件與邏輯事件的響應(yīng)。(4)實(shí)現(xiàn)游戲過程中的暫停、繼續(xù)以及貪吃蛇運(yùn)行速度調(diào)整。(5)實(shí)現(xiàn)得分功能,分?jǐn)?shù)每增加50分在原有基礎(chǔ)上隨機(jī)產(chǎn)生一個障礙物。(6)可以通過鍵盤方向鍵(上,下,左,右)來改變蛇的運(yùn)動方向。(7)實(shí)現(xiàn)游戲結(jié)束的判斷:蛇頭觸碰到蛇身或者蛇頭觸碰到障礙物。(8)通過序列化和反序列化來完成游戲進(jìn)度的保存和加載功能。(9)能夠?qū)崿F(xiàn)玩家得分排行榜功能,排行榜上列出前十名玩家的信息。2.2可行性分析可行性分析的主要目的是在該項(xiàng)目投資決策前,對項(xiàng)目有關(guān)工程技術(shù)、經(jīng)濟(jì)、社會等方面的情況進(jìn)行調(diào)查、研究、分析[11],對各種可能的技術(shù)方案進(jìn)行比較論證??尚行苑治鍪强疾焖_發(fā)軟件的可能性和可行性,進(jìn)而確定項(xiàng)目投資建設(shè)是否可行的科學(xué)分析方法。2.2.1社會可行性分析游戲開發(fā)至今已經(jīng)有三十多年,隨著硬件的水平的提高,游戲開發(fā)新技術(shù)層出不窮,經(jīng)典游戲比比皆是,游戲這個名稱一直存在于每個人的日常生活中,游戲?qū)τ诂F(xiàn)代人的成長歷程,絕對是一個不可或缺的重要角色,這些都為開發(fā)的這款貪吃蛇游戲提供了必要條件。2.2.2技術(shù)可行性分析(1)開發(fā)的軟件可行性本次設(shè)計我將運(yùn)用java語言來完成。Java語言是一種跨平臺、適合于分布式計算環(huán)境的面向?qū)ο缶幊陶Z言,用Java寫的應(yīng)用程序不用修改就可以在不同的軟硬件平臺上運(yùn)行。Eclipse開發(fā)工具是最強(qiáng)大的、最易于使用的Java快速開發(fā)工具之一[12]。Eclipse把Java編程語言的威力和圖形用戶界面化的快速開發(fā)環(huán)境的易用性有機(jī)地結(jié)合在一起,它使圖形界面的設(shè)計變得很容易,并能夠提高以后的工程性能。因此Java和Eclipse的結(jié)合,將使本次設(shè)計的技術(shù)可行性大大提高。(2)開發(fā)的硬件可行性電腦的發(fā)展速度一日千里,所以在硬件上應(yīng)該沒有問題,不過要注意的是硬件系統(tǒng)的穩(wěn)定性問題,這個是非常關(guān)鍵的問題。2.2.3經(jīng)濟(jì)可行性分析Java平臺的自由和開放性使得開發(fā)人員只需要很少的投資,游戲的易于維護(hù)性也使本游戲的開發(fā)投資大大減少[13]。因此本系統(tǒng)的開發(fā)在經(jīng)濟(jì)上對開發(fā)者來說不存在太大的壓力。第3章總體設(shè)計本系統(tǒng)開發(fā)過程中的總體設(shè)計,主要解決實(shí)現(xiàn)該游戲需求的程序模塊設(shè)計問題,包括如何把該游戲劃分成若干個模塊、實(shí)現(xiàn)各個模塊之間的接口、模塊之間相互傳遞信息以及模塊結(jié)構(gòu)的設(shè)計等。3.1設(shè)計原則與實(shí)現(xiàn)目標(biāo)軟件開發(fā)是一項(xiàng)系統(tǒng)工程,必須遵照共同的設(shè)計原則,以便保障系統(tǒng)的質(zhì)量,盡可能高地加強(qiáng)系統(tǒng)的各種指標(biāo)。(1)實(shí)用性原則:要盡最大可能滿足實(shí)際工作的需求,要充分考慮各管理環(huán)節(jié)以及各業(yè)務(wù)層次處理數(shù)據(jù)的實(shí)用性,界面設(shè)計要力爭做到美觀大方,功能設(shè)計要盡可能做到簡便實(shí)用。(2)可擴(kuò)展性原則:為適應(yīng)將來技術(shù)的發(fā)展,系統(tǒng)應(yīng)具備很好的可維護(hù)性和可擴(kuò)展性[14]。軟件設(shè)計應(yīng)力爭做到組織化、模塊化,使應(yīng)用系統(tǒng)盡可能靈活配置,能夠適應(yīng)不同的情況。從總體上來看,本系統(tǒng)的設(shè)計主要為了實(shí)現(xiàn)以下目標(biāo):(1)加深對面向?qū)ο缶幊趟枷氲睦斫?。?)掌握多線程技術(shù)的應(yīng)用。(3)熟悉JavaGUI圖形界面開發(fā)工具的使用。(4)了解Java流輸入輸出的應(yīng)用。3.2系統(tǒng)運(yùn)行總體流程設(shè)計根據(jù)游戲的需求分析,我們可以知道系統(tǒng)的總體運(yùn)行過程。首先,進(jìn)入游戲界面,單擊開始游戲,界面隨機(jī)產(chǎn)生食物,蛇體開始運(yùn)行,初始方向?yàn)橛?。游戲運(yùn)行過程中,可以通過鍵盤上的上下左右鍵控制蛇的運(yùn)動方向,可以通過單擊暫停按鈕暫停游戲,再次單擊開始按鈕游戲重新開始??梢酝ㄟ^保存游戲按鈕將當(dāng)前游戲的狀態(tài)存入磁盤文件,再次單擊載入游戲可以從剛才的地方重新游戲。當(dāng)蛇碰到障礙物或者自身時,本局游戲結(jié)束,會彈出對話框,要求輸入玩家姓名,然后彈出對話框詢問是否重新游戲,單擊是,重新游戲,單擊否,退出游戲,游戲的具體運(yùn)行流程如圖1所示。單擊開始游戲單擊開始游戲產(chǎn)生食物,蛇開始向右運(yùn)行鍵盤操作左移右移下移單擊保存游戲保存進(jìn)度單擊開始游戲游戲恢復(fù)進(jìn)入游戲界面是否暫停是否重新游戲蛇碰到蛇體或石頭單擊載入游戲打開進(jìn)度本局結(jié)束,得分寫入玩家分?jǐn)?shù)排行榜退出游戲上移是否保存進(jìn)度單擊暫停游戲暫停游戲是否圖1系統(tǒng)運(yùn)行流程圖3.3系統(tǒng)功能模塊設(shè)計3.3.1游戲總設(shè)計模塊本設(shè)計所開發(fā)的是基于Java的一個貪吃蛇游戲軟件,根據(jù)游戲需求中游戲所要實(shí)現(xiàn)的功能,整個游戲分為游戲主界面、游戲控制、游戲進(jìn)度管理、游戲排行榜四個模塊,如圖2所示。貪吃蛇游戲貪吃蛇游戲游戲主界面模塊游戲排行榜模塊游戲控制模塊游戲進(jìn)度管理模塊圖2游戲總設(shè)計模塊圖3.3.2游戲主界面模塊游戲的主界面是進(jìn)入游戲后,能夠給玩家第一感覺的部分,因此,游戲的主界面應(yīng)該力求美觀,爽心悅目,如圖3所示。游戲的主界面框架游戲的主界面框架游戲圖形區(qū)域界面游戲控制按鈕界面圖3游戲主界面模塊圖3.3.3游戲控制模塊這個模塊是游戲的中心環(huán)節(jié),主要實(shí)現(xiàn)監(jiān)聽游戲的按鍵事件與邏輯事件,為了能夠給玩家一個很好的游戲環(huán)境,這部分應(yīng)該做到易懂、易操作,如圖4所示。游戲控制模塊游戲控制模塊游戲按鍵控制游戲邏輯控制圖4游戲控制模塊圖3.3.4游戲進(jìn)度管理模塊這個模塊是為了實(shí)現(xiàn)游戲進(jìn)度的保存和加載功能,如圖5所示。游戲進(jìn)度管理模塊游戲進(jìn)度管理模塊游戲進(jìn)度存儲游戲進(jìn)度加載圖5游戲進(jìn)度管理模塊圖3.3.5游戲排行榜模塊該模塊主要是為了實(shí)現(xiàn)玩家得分的排行榜功能,主要有游戲得分寫入和游戲排行榜兩部分,如圖6所示。游戲排行榜模塊游戲排行榜模塊游戲排行榜實(shí)現(xiàn)游戲得分寫入圖6游戲排行榜模塊圖3.3.6游戲類模塊系統(tǒng)主要有十一個類,如描述蛇、食物、障礙、游戲面板等不同對象的類,各個類的具體功能見表1。表1游戲類模塊表序號類名主要功能1GameStart該文件為程序入口,含有main方法2GameFrame用來設(shè)計游戲的用戶界面3GamePanel游戲控制面板,作為整個程序的控制器4GameConstant該文件為一個工具類,存放一些常量5Food該文件實(shí)現(xiàn)食物類6Barrier該文件實(shí)現(xiàn)障礙物類7Snake該文件實(shí)現(xiàn)蛇類8GameRecords該文件用于實(shí)現(xiàn)玩家的排行榜9Record記錄玩家信息的類10ReadRecord讀取玩家信息11WriteRecord寫入玩家信息第4章詳細(xì)設(shè)計系統(tǒng)詳細(xì)設(shè)計主要對貪吃蛇游戲各模塊的功能、性能、輸入輸出、算法、接口、程序邏輯等給出詳細(xì)的設(shè)計方案,為軟件開發(fā)制定詳細(xì)的計劃,這是程序員進(jìn)行開發(fā)及未來測試的最重要步驟。4.1程序設(shè)計思路系統(tǒng)的事件控制器也叫事件監(jiān)聽器,是整個系統(tǒng)的核心,主要負(fù)責(zé)對按鍵事件與邏輯事件的處理,事件監(jiān)聽器主要由ActionListener接口和KeyListener接口實(shí)現(xiàn)。貪吃蛇通過鍵盤控制蛇的運(yùn)動方向是由KeyListener來負(fù)責(zé)監(jiān)聽,游戲的其他按鍵事件如游戲開始、暫停、退出等以及各種邏輯事件如判斷游戲是否結(jié)束是由ActionListener負(fù)責(zé)監(jiān)聽,事件監(jiān)聽機(jī)制如圖7所示。事件控制器處理按鍵事件事件控制器處理按鍵事件處理邏輯事件觸發(fā)按鍵事件Snake蛇GamePanel重新顯示根據(jù)不同情況,向Snake、Food、Barrier發(fā)出不同指令Barrier障礙物Food食物圖7事件監(jiān)聽機(jī)制圖4.2類模塊具體設(shè)計4.2.1GameStart類此類為程序的入口類,定義了GameFrame的對象frame,實(shí)現(xiàn)游戲的初始化。4.2.2GameFrame類(1)此類定義了用于實(shí)現(xiàn)游戲界面按鈕功能的全部變量,如描述游戲開始菜單項(xiàng)、游戲結(jié)束菜單項(xiàng)、游戲加速菜單項(xiàng)等,詳細(xì)內(nèi)容見表2。表2成員變量表成員變量描述變量類型名稱選項(xiàng)菜單欄JMenuBarmenuBar游戲面板privateGamePanelpanel速度標(biāo)簽privateintspeedFlag設(shè)置菜單privateJMenusetMenu幫助菜單privateJMenuhelpMenu開始菜單項(xiàng)privateJMenuItemstartGame暫停菜單項(xiàng)privateJMenuItempauseGame游戲加速項(xiàng)privateJRadioButtonMenuItemspeedGame打開進(jìn)度項(xiàng)privateJMenuItemloadGame保存進(jìn)度項(xiàng)privateJMenuItemsaveGame排行榜項(xiàng)privateJMenuItemrecordGame(2)以下為內(nèi)部私有類,都繼承于ActionListener接口,如描述開始游戲、暫停游戲、加載游戲等不同的按鍵事件,見表3。表3內(nèi)部私有類表內(nèi)部類描述類型名稱監(jiān)聽游戲是否要開始privateStartAction監(jiān)聽游戲是否要暫停privatePauseAction監(jiān)聽是否要讀取游戲privateLoadAction監(jiān)聽是否要保存游戲privateSaveAction監(jiān)聽是否要加速游戲privateSpeedAction監(jiān)聽是否要打開排行榜privateRecordAction4.2.3GamePanel類該類為顯示面板類,系統(tǒng)的最主要功能如監(jiān)聽機(jī)制都由該類來實(shí)現(xiàn)。(1)此類定義描述各個不同游戲?qū)ο蟮淖兞?,如蛇對象、障礙對象、食物對象等,主要成員變量見表4。表4主要成員變量表成員變量描述變量類型名稱游戲界面對象privateGameFrameframe蛇對象privateSnakesnake食物對象privateGridfood石頭對象privateBarrierbarrier計時器對象privateTimertimer是否產(chǎn)生石頭booleanneedToGenerateBarrie是否產(chǎn)生食物booleanneedToGenerateFood游戲網(wǎng)格對象privateGridgrid監(jiān)聽游戲狀態(tài)對象privateTimerActiontimerAction(2)GamePanel類里面共有兩個內(nèi)部私有類,分別為監(jiān)聽按鍵事件與監(jiān)聽邏輯事件的類,見表5。表5內(nèi)部私有類表內(nèi)部類描述類型名稱監(jiān)聽按鍵事件privateKeyHandler監(jiān)聽邏輯事件privateTimerAction(3)GamePanel類定義了實(shí)現(xiàn)系統(tǒng)功能的大部分方法,如游戲初始化、蛇吃掉食物、寫入分?jǐn)?shù)等方法,見表6。表6主要方法表方法名稱方法類型功能描述GamePanel()public構(gòu)造方法Init()private游戲初始化judgeGameOver()private判定游戲是否結(jié)束isFoodAvailable()boolean產(chǎn)生石頭是否與食物沖突isBarrierAvailable()boolean產(chǎn)生石頭石頭與墻體沖突generateFoodByRandom()private隨機(jī)產(chǎn)生食物eatFood()private蛇吃掉食物isSnakeHeadTouchBarrier()boolean蛇是否碰到石頭isSnakeHeadTouchBody()boolean蛇石頭碰到自身loadGameDataFromFile()private加載記錄的邏輯saveGameDataToFile()private保存記錄的邏輯writeScore()private寫入分?jǐn)?shù)4.2.4Snake類(1)成員變量有定義方向的變量direction與定義集合類privateList<Grid>的變量list。(2)此類定義了蛇對象實(shí)現(xiàn)運(yùn)動必須具備的幾個方法,如自行移動、改變方向等,主要方法見表7。表7主要方法表方法名方法類型功能描述Snake()public類構(gòu)造方法changeDirection()public改變蛇體運(yùn)動Draw()public繪制蛇體Move()public蛇體運(yùn)動setDirectionpublic設(shè)置蛇體運(yùn)動方向4.2.5Barrier類此類為描述障礙物的類,通過構(gòu)造函數(shù)由二維數(shù)組實(shí)現(xiàn)障礙墻體的初始化。4.2.6Food類此類為描述食物的類。4.2.7GameRecords類此類用于實(shí)現(xiàn)玩家的排行榜功能,主要通過內(nèi)部類RecordComparator實(shí)現(xiàn)Comparator接口來實(shí)現(xiàn)功能。4.2.8Record類此類用于記錄玩家游戲過程中的得分信息。4.2.9GameConstant類此類為工具類,其中存放了其他類中用到的一些常量,如表示蛇運(yùn)行方向的常量LEFT、RIGHT、UP、DOWN,表示窗體長寬的常量WIDTH、HEIGHT。4.2.10ReadRecord類此類為從排行榜讀取玩家信息的類,由方法readRecordsFromFile()實(shí)現(xiàn)讀取功能。4.2.11WriteRecord類此類為把玩家信息寫入排行榜的類,由方法writeRecordToFile()實(shí)現(xiàn)讀取功能。4.3關(guān)鍵功能具體實(shí)現(xiàn)4.3.1蛇、食物、石頭的表示我們可以把顯示區(qū)域想象成一個大大的表格,里面的格子就是組成蛇的基本單位,一個格子可以代表一個食物,也可以代表一個石頭,幾塊連在一起的石頭就可以代表一條蛇。使用坐標(biāo)來區(qū)分這些格子,如圖8所示。圖8蛇、石頭、食物的表示圖主要實(shí)現(xiàn)代碼為: protectedvoidpaintComponent(Graphicsg){ g.setColor(newColor(0xcfcfcf)); g.fillRect(0,0,Global.WIDTH*Global.CELL_SIZE, Global.HEIGHT*Global.CELL_SIZE); if(snake!=null&&food!=null&&ground!=null){ this.snake.drawMe(g); this.food.drawMe(g); this.ground.drawMe(g); } }4.3.2蛇的移動方向表示要區(qū)分蛇頭和蛇尾巴,這就要求這個數(shù)據(jù)結(jié)構(gòu)是有序的,還要經(jīng)常訪問第一個和最后一個節(jié)點(diǎn),所以LinkedList最合適,因?yàn)樗衋ddFirst(),removeLast()和getLast()等方法。蛇向前移動一步,可以看作是蛇頭前面增加了一個節(jié)點(diǎn),蛇的尾巴上少了一個節(jié)點(diǎn)(即去尾,加頭)。蛇下一步移動到哪里,是由方向來控制的。這里我們用int型常量來表示蛇的移動方向,因?yàn)槲覀兪歉鶕?jù)原蛇頭的坐標(biāo)和方向來確定新蛇頭的坐標(biāo)。在原坐標(biāo)的基礎(chǔ)上,根據(jù)蛇頭的運(yùn)動方向來確定新蛇頭的坐標(biāo),比如向上移動就是y-1。(1)相反方向。和上一次移動的方向相反的方向稱為相反方向,這種方向應(yīng)該忽略,這樣可以防止蛇從自己的身體中穿過。(2)無效方向。在蛇的這一次移動之后和下一次移動之前這個時間間隔內(nèi)輸入了多個非相反方向,只有最后一個是有效方向,其它的都是無效方向,蛇的最終運(yùn)動方向以有效方向?yàn)闇?zhǔn),如圖9所示。圖9蛇的移動方式主要實(shí)現(xiàn)代碼為:publicvoidmove(){ System.out.println("Snake'smove"); if(!(oldDirection+newDirection==0)){ oldDirection=newDirection; } oldTail=body.removeLast(); intx=body.getFirst().x; inty=body.getFirst().y; switch(oldDirection){ caseUP: y--; if(y<0) y=Global.HEIGHT-1; break; caseDOWN: y++; if(y>=Global.HEIGHT) y=0; break; caseLEFT: x--; if(x<0) x=Global.WIDTH-1; break; caseRIGHT: x++; if(x>=Global.WIDTH) x=0; break; } PointnewHead=newPoint(x,y); body.addFirst(newHead);}4.3.3食物及障礙物的隨機(jī)生成食物的隨機(jī)產(chǎn)生是當(dāng)蛇吃掉食物后,監(jiān)聽器監(jiān)聽到食物被吃掉后,會讓Food類再次調(diào)用隨機(jī)生成食物的方法newfood(),在游戲面板上隨機(jī)產(chǎn)生一個食物。隨機(jī)產(chǎn)生障礙物的功能可以有多種實(shí)現(xiàn),本系統(tǒng)將分?jǐn)?shù)的改變作為產(chǎn)生隨機(jī)數(shù)的條件,分?jǐn)?shù)每增加50分,在原有的基礎(chǔ)上隨機(jī)產(chǎn)生一個障礙物(不改變原來已經(jīng)有的障礙物位置)。主要實(shí)現(xiàn)代碼如下:privatevoidgenerateBarrierByRandom(){Randomr=newRandom();intrandomX=r.nextInt(SnakeGameConstant.GRID_COLUMN_NUMBER);intrandomY=r.nextInt(SnakeGameConstant.GRID_ROW_NUMBER);if(isBarrierAvailable(randomX,randomY)){barrier.getBarriersList().add(newGrid(randomX,randomY,Color.YELLOW));needToGenerateBarrie=false;}else{generateBarrierByRandom();}}4.3.4如何判斷蛇吃掉食物這里通過判定坐標(biāo)是否重合來判斷,只需要判斷蛇頭是否和食物重合就可以了,因?yàn)樯叩纳眢w都是走蛇頭走過的地方。蛇每走動一次,監(jiān)聽器會調(diào)用判斷食物是否被吃掉的方法isSnakeEatFood(),該方法返回True,則生成新的食物,返回Flase,則蛇繼續(xù)移動。主要實(shí)現(xiàn)代碼如下:publicbooleanisSnakeEatFood(Snakesnake){ System.out.println("Food'sisSnakeEatFood"); returnthis.equals(snake.getHead()); }publicvoideatFood(){ System.out.println("Snake'seatFood"); body.addLast(oldTail); }4.3.5如何實(shí)現(xiàn)鍵盤控制蛇運(yùn)行方向該功能主要通過實(shí)現(xiàn)KeyListener接口實(shí)現(xiàn),把鍵盤的四個方向鍵分別定義為常量LEFT、RIGHT、UP、DOWN,當(dāng)發(fā)生方向按鍵事件時,監(jiān)聽器會把表示方向的常量Direction傳遞給Snake類的move()方法,監(jiān)聽器會根據(jù)傳遞過去的方向來判斷蛇的移動方向,如果為有效方向,則蛇頭根據(jù)傳過來的方向移動,如果為相反方向或者無效方向,則忽略傳遞過來的方向,按照原來的方向繼續(xù)移動。主要實(shí)現(xiàn)代碼如下: publicvoidkeyPressed(KeyEvente){ switch(e.getKeyCode()){ case(KeyEvent.VK_UP): snake.changeDirection(Snake.UP); break; caseKeyEvent.VK_DOWN: snake.changeDirection(Snake.DOWN); break; caseKeyEvent.VK_LEFT: snake.changeDirection(Snake.LEFT); break; caseKeyEvent.VK_RIGHT: snake.changeDirection(Snake.RIGHT); break; } }4.3.6如何判斷游戲結(jié)束蛇移動后可能會出現(xiàn)三種情況,吃掉食物、碰到障礙、碰到自身,如果吃掉食物則生成新的食物然后游戲繼續(xù),如果碰到障礙或者自身則游戲結(jié)束。監(jiān)聽器會根據(jù)Snake類的isSnakeEatFood()方法與isSnakeEatRock()來判斷是否碰到自身或者障礙,如果碰到,則調(diào)用die()方法,游戲結(jié)束。主要實(shí)現(xiàn)代碼如下: publicvoidsnakeMoved(Snakesnake){ this.snake=snake; if(food.isSnakeEatFood(snake)){ snake.eatFood(); food.newFood(ground.getPoint()); } if(ground.isSnakeEatRock(snake)){ snake.die(); } gamePanel.display(snake,food,ground); }4.3.7如何實(shí)現(xiàn)游戲進(jìn)度的保存與加載游戲進(jìn)度的保存和加載功能是通過序列化和反序列化來完成的。保存進(jìn)度-->通過序列化的方式將當(dāng)前游戲運(yùn)行狀態(tài)中用到的一些重要對象序列化到文件中加以保存,從而達(dá)到記錄當(dāng)前游戲狀態(tài)的效果。加載進(jìn)度-->通過反序列化的方式將序列化后的對象讀取出來,從而達(dá)到恢復(fù)之前游戲保存時的狀態(tài)的效果。用戶可以在此基礎(chǔ)上繼續(xù)進(jìn)行游戲。Serializatio(序列化)是一種將對象以一連串的字節(jié)描述的過程,deserializatio(反序列化)是一種將這些字節(jié)重建成一個對象的過程[15]。在Java中,一切都是對象,在分布式環(huán)境中經(jīng)常需要將Object從這一端網(wǎng)絡(luò)或設(shè)備傳遞到另一端,這就需要有一種可以在兩端傳輸數(shù)據(jù)的協(xié)議。Java序列化機(jī)制就是為了解決這個問題而產(chǎn)生。一個對象能夠序列化的前提是實(shí)現(xiàn)Serializable接口,Serializable接口沒有方法,更像是個標(biāo)記,有了這個標(biāo)記的類就能被序列化機(jī)制處理。將對象序列化并輸出,ObjectOutputStream能把Object輸出成Byte流。publicstaticvoidmain(Stringargs[])throwsIOException{FileOutputStreamfos=newFileOutputStream("temp.out");ObjectOutputStreamoos=newObjectOutputStream(fos);TestSerialts=newTestSerial();oos.writeObject(ts);oos.flush();}反之,如果要從持久的文件中讀取Bytes重建對象,我們可以使用ObjectInputStream。4.3.8如何實(shí)現(xiàn)游戲得分排行榜本項(xiàng)目添加了游戲得分排行榜功能,得分排行榜上列出前十名玩家的得分信息,包括玩家名字、得分和名次。為了實(shí)現(xiàn)這一功能必須完成兩個最重要的過程,可以將玩家得分紀(jì)錄寫入排行榜并且反過來能夠從排行榜中讀出玩家紀(jì)錄,這里必須要用到Java的I/O操作。Java中I/O操作主要是指使用Java進(jìn)行輸入、輸出操作,Java所有的I/O機(jī)制都是基于數(shù)據(jù)流進(jìn)行輸入輸出,這些數(shù)據(jù)流表示了字符或者字節(jié)數(shù)據(jù)的流動序列。Java的I/O流提供了讀寫數(shù)據(jù)的標(biāo)準(zhǔn)方法,任何Java中表示數(shù)據(jù)源的對象都會提供以數(shù)據(jù)流的方式讀寫它的數(shù)據(jù)的方法。
數(shù)據(jù)流是一串連續(xù)不斷的數(shù)據(jù)的集合,就象水管里的水流,在水管的一端一點(diǎn)一點(diǎn)地供水,而在水管的另一端看到的是一股連續(xù)不斷的水流。數(shù)據(jù)寫入程序可以是一段、一段地向數(shù)據(jù)流管道中寫入數(shù)據(jù),這些數(shù)據(jù)段會按先后順序形成一個長的數(shù)據(jù)流。對數(shù)據(jù)讀取程序來說,看不到數(shù)據(jù)流在寫入時的分段情況,每次可以讀取其中的任意長度的數(shù)據(jù),但只能先讀取前面的數(shù)據(jù)后,再讀取后面的數(shù)據(jù)。不管寫入時是將數(shù)據(jù)分多次寫入,還是作為一個整體一次寫入,讀取時的效果都是完全一樣的。
流是一個很形象的概念,當(dāng)程序需要讀取數(shù)據(jù)的時候,就會開啟一個通向數(shù)據(jù)源的流,這個數(shù)據(jù)源可以是文件、內(nèi)存或是網(wǎng)絡(luò)連接。類似的,當(dāng)程序需要寫入數(shù)據(jù)的時候,就會開啟一個通向目的地的流。在整個Java.io包中最重要的就是5個類和一個接口,5個類指的是File、OutputStream、InputStream、Writer、Reader,一個接口指的是Serializable。本項(xiàng)目為了完成排行榜功能采用了InputStream和OutputStream的子類FileInputStream與FileOutputStream。文件輸入流類FileInputStream可以使用read()方法一次讀入一個字節(jié),并以int類型返回,或者是使用read()方法時讀入至一個byte數(shù)組,byte數(shù)組的元素有多少個,就讀入多少個字節(jié)。在將整個文件讀取完成或?qū)懭胪戤叺倪^程中,這么一個byte數(shù)組通常被當(dāng)作緩沖區(qū),因?yàn)檫@么一個byte數(shù)組通常扮演承接數(shù)據(jù)的中間角色。文件輸出流類FileOutputStream用來處理以文件作為數(shù)據(jù)輸出目的數(shù)據(jù)流或者說是從內(nèi)存區(qū)讀數(shù)據(jù)入文件。為了完成排行榜功能,本項(xiàng)目需要做的主要有如下幾點(diǎn),首先,創(chuàng)建與記錄相關(guān)的類,其次,完成游戲結(jié)束后對記錄文件更新的操作,
最后,完成點(diǎn)擊Record相關(guān)的MenuItem,讀取記錄信息,并用ScrollPane展示出來,主要實(shí)現(xiàn)代碼如下:public
class
WriteRecord
{
public
void
writeRecordToFile(SnakeGameRecords
records,
File
recordFile)
{
FileOutputStream
fileOutput
=
null;
try
{
fileOutput
=
new
FileOutputStream(recordFile);
}
catch
(FileNotFoundException
e)
{
e.printStackTrace();
}
ObjectOutputStream
objectOutput
=
null;
try
{
objectOutput
=
new
ObjectOutputStream(fileOutput);
}
catch
(IOException
e)
{
e.printStackTrace();
}
try
{
objectOutput.writeObject(records);
}
catch
(IOException
e)
{
e.printStackTrace();
}
try
{
objectOutput.close();
}
catch
(IOException
e)
{
e.printStackTrace();
}
try
{
fileOutput.close();
}
catch
(IOException
e)
{
e.printStackTrace();
}
}
}
第5章系統(tǒng)測試系統(tǒng)測試是開發(fā)過程中很關(guān)鍵的一個過程,開發(fā)者的開發(fā)是否成功、是否存在BUG、功能是否完善等在測試這一過程都能得到驗(yàn)證。5.1游戲測試5.1.1進(jìn)入游戲進(jìn)入游戲主界面,點(diǎn)擊設(shè)置按鈕,選擇游戲級別,分別有菜鳥、初級、中級、高手、專家五個級別,也可以不用選擇,系統(tǒng)會默認(rèn)菜鳥級別,然后單擊開始游戲,游戲開始運(yùn)行,如圖10所示。圖10游戲開始界面圖5.1.2運(yùn)行游戲游戲開始運(yùn)行,當(dāng)?shù)梅诌_(dá)到五十分后,系統(tǒng)會隨機(jī)產(chǎn)生一個障礙物,障礙物用黃顏色的方塊表示。隨機(jī)產(chǎn)生障礙物的功能可以有多種實(shí)現(xiàn),本系統(tǒng)將分?jǐn)?shù)的改變作為產(chǎn)生隨機(jī)數(shù)的條件,分?jǐn)?shù)每增加50分,在原有的基礎(chǔ)上隨機(jī)產(chǎn)生一個障礙物(不改變原來已經(jīng)有的障礙物位置),如圖11
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 供排水合同范本
- 別墅出租居間合同范本
- 養(yǎng)殖山羊合作合同范本
- 三間住房合同范本
- 買礦山合同范本
- 判決終止服務(wù)合同范本
- 2025年度國際貨物鐵路運(yùn)輸與全面保險服務(wù)合同
- 三人合伙開店分紅合同范本
- 勞動合同個人申請書
- 會務(wù)會展合同范例
- 2025年初中語文:春晚觀后感三篇
- 《教育強(qiáng)國建設(shè)規(guī)劃綱要(2024-2035年)》解讀講座
- 預(yù)算績效評價管理機(jī)構(gòu)入圍投標(biāo)文件(技術(shù)方案)
- 耳鼻咽喉科臨床診療指南
- 第二部分-3 植物纖維化學(xué)部分-纖維素
- 民法原理與實(shí)務(wù)課程教學(xué)大綱
- 2019北師大版高中英語選擇性必修四單詞表
- 園藝產(chǎn)品的品質(zhì)講義
- 鋼筋混凝土框架結(jié)構(gòu)工程監(jiān)理的質(zhì)量控制
- 桃花節(jié)活動方案
- 社區(qū)醫(yī)院建設(shè)標(biāo)準(zhǔn)
評論
0/150
提交評論