已閱讀5頁(yè),還剩48頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于JAVA的超級(jí)瑪麗設(shè)計(jì)與實(shí)現(xiàn)摘要隨著計(jì)算機(jī)技術(shù)及網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,電子游戲越來(lái)越普及。經(jīng)典游戲“超級(jí)瑪麗”因其本身所具有的娛樂(lè)性與教育意義而被人們廣泛接受,在廣大的青少年玩家中享有極高的知名度。JAVA語(yǔ)言作為一種完全面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,在游戲設(shè)計(jì)方面具有獨(dú)特優(yōu)勢(shì)。JAVA語(yǔ)言由C語(yǔ)言發(fā)展而來(lái),但比C語(yǔ)言簡(jiǎn)單。它具有簡(jiǎn)單、與平臺(tái)無(wú)關(guān)、高效、安全、多線(xiàn)程等特點(diǎn),在游戲設(shè)計(jì)開(kāi)發(fā)方面得到廣泛應(yīng)用。本課題在大學(xué)生自主創(chuàng)業(yè)的大背景下,利用JAVA語(yǔ)言重新設(shè)計(jì)開(kāi)發(fā)了“超級(jí)瑪麗”游戲,基本實(shí)現(xiàn)了舊版游戲的所有功能。目前該版本游戲已經(jīng)發(fā)布在學(xué)校的公共論壇上,已被許多同學(xué)下載并試玩,反響較好,但是仍暴露了一些問(wèn)題,如人物形象設(shè)計(jì)過(guò)于單調(diào)等,這些問(wèn)題的優(yōu)化將會(huì)在下一個(gè)版本中得到實(shí)現(xiàn)。本文在對(duì)整個(gè)游戲的各種需求及可行性分析的基礎(chǔ)上,詳細(xì)論述了游戲的設(shè)計(jì)過(guò)程與實(shí)現(xiàn)方案。論文包括緒論、相關(guān)技術(shù)研究、可行性分析、系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)以及結(jié)論等部分內(nèi)容。關(guān)鍵詞JAVA;超級(jí)瑪麗;CDESIGNANDIMPLEMENTATIONOFAJAVABASEDSUPERMARIOGAMEABSTRACTWITHTHEDEVELOPMENTOFCOMPUTERANDNETWORKTECHNOLOGY,VIDEOGAMESHAVEBECOMEMOREANDMOREPOPULARSUPERMARIOASACLASSICALGAME,WHICHENJOYSHIGHPOPULARITYINTHEMAJORITYOFJUVENILEGAMEPLAYERSWASWIDELYACCEPTEDDUETOITSENTERTAINMENTANDEDUCATIONALSIGNIFICANCEJAVALANGUAGEASAPROGRAMMINGLANGUAGETHATISCOMPLETELYOBJECTORIENTED,HASANUNIQUEADVANTAGEINGAMEDESIGNJAVALANGUAGEDEVELOPEDFROMCLANGUAGEISMUCHMORESIMPLETHANCLANGUAGEITSADVANTAGESSUCHASSIMPLICITY,PLATFORMINDEPENDENCE,EFFICIENCY,SECURITYANDMULTITHREADINGETC,HASBEENWIDELYUSEDINTHEASPECTSOFGAMEDESIGNTHISTOPICWHICHISINTHECONTEXTOFCOLLEGESTUDENTSENTREPRENEURSHIP,USEJAVALANGUAGETODESIGNANDDEVELOPTHE“SUPERMARIO“GAMEAGAINTHATBASICALLYACHIEVETHEFEATURESOFTHEOLDVERSIONOFTHEGAMETHECURRENTVERSIONOFTHEGAMEBEINGRELEASEDINTHESCHOOLPUBLICFORUMHAVEBEENDOWNLOADEDANDPLAYEDBYMANYSTUDENTSALTHOUGHTHEEVALUATIONOFTHEGAMEWASGOOD,THEREARESTILLSOMEPROBLEMS,SUCHASTHECHARACTERIMAGEISTOOMONOTONOUSOPTIMIZATIONOFALLTHESEPROBLEMSWILLBEIMPLEMENTEDINTHENEXTVERSIONBASEDONTHEDEMANDANDFEASIBILITYANALYSISOFTHEWHOLEGAME,THEGAMEDESIGNPROCESSANDIMPLEMENTATIONPLANWEREDISCUSSEDINDETAILTHETHESISINCLUDESINTRODUCTION,RELATEDTECHNOLOGYRESEARCH,FEASIBILITYANALYSIS,SYSTEMDESIGNANDIMPLEMENTATIONASWELLASTHECONCLUSIONPARTKEYWORDSJAVASUPERMARIOC目錄摘要IABSTRACTII1緒論111課題研究背景112課題研究意義113課題研究?jī)?nèi)容22可行性分析321經(jīng)濟(jì)可行性分析322技術(shù)可行性分析323系統(tǒng)性能需求分析33相關(guān)技術(shù)研究531開(kāi)發(fā)工具及環(huán)境5311JAVA語(yǔ)言5312ECLIPSE環(huán)境632面向?qū)ο蟪绦蛟O(shè)計(jì)633C/S結(jié)構(gòu)與B/S結(jié)構(gòu)64系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)741開(kāi)發(fā)工作742游戲素材管理743游戲場(chǎng)景布置844游戲用例圖845游戲狀態(tài)圖946游戲時(shí)序圖947游戲類(lèi)圖10471游戲總體類(lèi)圖10472MARIO圖類(lèi)11473ENEMY類(lèi)圖13474OBSTRUCTION類(lèi)圖14475BACKGROUND類(lèi)15476STATICVALUE類(lèi)圖16477MYFRAME類(lèi)圖1748游戲功能與代碼實(shí)現(xiàn)18481游戲功能18482代碼實(shí)現(xiàn)185游戲運(yùn)行截圖及程序說(shuō)明25結(jié)論30參考文獻(xiàn)31致謝32外文原文331緒論11課題研究背景超級(jí)瑪麗全名為超級(jí)馬里奧兄弟,是由任天堂公司出品的著名橫版過(guò)關(guān)游戲。1981年,任天堂員工宮本茂設(shè)計(jì)的意大利水管工形象在游戲大金剛中初次亮相,隨后在全世界廣泛流行,之后陸續(xù)推出的數(shù)十款游戲累計(jì)總銷(xiāo)量超過(guò)了一億七千萬(wàn)份,超級(jí)瑪麗成為了任天堂公司的招牌人物并為任天堂創(chuàng)造了高達(dá)70億美圓的巨額商業(yè)利潤(rùn)。目前,超級(jí)瑪麗形象已深入人心,其知名度與商業(yè)價(jià)值可與美國(guó)迪士尼的米老鼠相媲美,為全世界的青少年玩家們帶來(lái)了無(wú)限的歡樂(lè)與夢(mèng)想。自2010年5月國(guó)家教育部成功召開(kāi)“全國(guó)推進(jìn)高等學(xué)校創(chuàng)新創(chuàng)業(yè)教育和大學(xué)生自主創(chuàng)業(yè)工作”視頻會(huì)議1,大學(xué)生自主創(chuàng)業(yè)得到廣泛支持與推廣,為響應(yīng)國(guó)家政策,大學(xué)生應(yīng)積極利用所學(xué)來(lái)自主創(chuàng)業(yè),基于經(jīng)典游戲“超極瑪麗”本身具有的巨大影響力和商業(yè)價(jià)值,以自主創(chuàng)業(yè),鍛煉能力為目的,利用JAVA語(yǔ)言重新設(shè)計(jì)編寫(xiě)“超級(jí)瑪麗”,并將游戲推廣,在為廣大青少年游戲愛(ài)好者帶來(lái)歡樂(lè)的同時(shí),減輕家庭的負(fù)擔(dān),實(shí)現(xiàn)自己的創(chuàng)業(yè)夢(mèng)想。12課題研究意義隨著電腦和手機(jī)的普及,超級(jí)瑪麗游戲被世界廣大的青少年游戲玩家所接受,游戲人物本身的教育作用,益智作用和商業(yè)價(jià)值得到推廣。超級(jí)瑪麗游戲人物的不畏艱險(xiǎn),百折不撓的奮斗精神不斷鼓舞著每一代的游戲玩家,充分發(fā)揮了電子游戲積極有益的一面,從正面去引導(dǎo)兒童和青少年對(duì)人生的態(tài)度,同時(shí),也逐漸改變家長(zhǎng)對(duì)游戲的片面看法,為電子游戲的發(fā)展起到推動(dòng)作用;據(jù)日本新聞網(wǎng)報(bào)道,德國(guó)馬克斯普朗克進(jìn)化人類(lèi)研究所發(fā)布的一項(xiàng)研究報(bào)告稱(chēng),超級(jí)瑪麗游戲可以促使人類(lèi)大腦的某些部位更為發(fā)達(dá)。這一研究成果可能對(duì)今后的阿爾茲海默氏癥,腦部某些部位萎縮等精神癥狀的治療有所幫助;馬里奧的金字招牌幫助任天堂連續(xù)五年蟬聯(lián)日本年末圣誕商戰(zhàn)冠軍的寶座,充分證明其具有的左右業(yè)界局勢(shì)的市場(chǎng)號(hào)召力2,除了游戲本身具有很好的教育意義外,利用JAVA設(shè)計(jì)研發(fā)“超級(jí)瑪麗”的過(guò)程也具有重大的意義??偟母爬ㄓ腥缦氯c(diǎn)(1)在個(gè)人知識(shí)拓展方面。通過(guò)參與本次課題的設(shè)計(jì),進(jìn)一步鞏固所學(xué)的JAVA語(yǔ)言編程技術(shù)。通過(guò)軟件的開(kāi)發(fā),我鞏固了JAVA語(yǔ)言等相關(guān)專(zhuān)業(yè)知識(shí),并且設(shè)計(jì)過(guò)程中查閱大量的資料,進(jìn)一步豐富了自己的知識(shí),拓展了自己的視野。通過(guò)軟件的調(diào)試,初步掌握了部分調(diào)試的方法,并且調(diào)試能夠按照軟件工程的要求進(jìn)行規(guī)范化測(cè)試。(2)在個(gè)人能力提升方面。實(shí)踐出真知,針對(duì)自己以往學(xué)習(xí)往往只注重書(shū)本理論知識(shí)而忽視了動(dòng)手實(shí)踐的詬病,希望通過(guò)參與該課題,能夠提高自己的程序設(shè)計(jì)水平、編程水平和動(dòng)手調(diào)試水平,成功完成將個(gè)人知識(shí)升華為能力的過(guò)程。(3)在課題借鑒意義方面。利用JAVA語(yǔ)言重新設(shè)計(jì)編寫(xiě)經(jīng)典游戲“超級(jí)瑪麗”,可以研究與探討游戲開(kāi)發(fā)過(guò)程中主要技術(shù)問(wèn)題,并且增加人們對(duì)JAVA技術(shù)在桌游戲開(kāi)發(fā)方面的認(rèn)識(shí),同時(shí)也對(duì)其他經(jīng)典游戲的重新編寫(xiě)設(shè)計(jì)具有重要的借鑒意義。13課題研究?jī)?nèi)容分析研究了JAVA語(yǔ)言的特點(diǎn)及其實(shí)用性,并對(duì)游戲編寫(xiě)進(jìn)行了可行性分析,確定了其市場(chǎng)需求性,在此基礎(chǔ)上,重新設(shè)計(jì)開(kāi)發(fā)了超級(jí)瑪麗游戲,闡述了游戲的總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)以及相關(guān)的關(guān)鍵技術(shù),并對(duì)課題進(jìn)行總結(jié),得出相應(yīng)結(jié)論和對(duì)今后的研究方向的展望。論文的結(jié)構(gòu)如下第一章介紹本課題的研究背景、研究意義,以及本文主要內(nèi)容和結(jié)構(gòu)安排;第二章針對(duì)課題的實(shí)際情況,對(duì)設(shè)計(jì)開(kāi)發(fā)過(guò)程中所用的相關(guān)技術(shù)做了大致的介紹;第三章在現(xiàn)有技術(shù)和條件的前提下,對(duì)課題開(kāi)展的可行性分析并得出相關(guān)結(jié)論;第四章詳細(xì)地分析了系統(tǒng)具體的實(shí)現(xiàn)過(guò)程,包括開(kāi)發(fā)工作、游戲素材管理、游戲場(chǎng)景布置、游戲用例圖、游戲狀態(tài)圖、游戲時(shí)序圖以及游戲類(lèi)圖;第五章將新設(shè)計(jì)開(kāi)發(fā)的JAVA版本超級(jí)瑪麗運(yùn)行測(cè)試,檢查游戲設(shè)計(jì)是否完善,并在運(yùn)行過(guò)程中截圖做相應(yīng)的程序說(shuō)明;結(jié)論總結(jié)本文所做工作,并對(duì)后續(xù)的工作和研究方向做了展望。2可行性分析21經(jīng)濟(jì)可行性分析目前市場(chǎng)上基于JAVA的超級(jí)瑪麗游戲相對(duì)較少,因此,相對(duì)市場(chǎng)競(jìng)爭(zhēng)就相對(duì)小得多。設(shè)計(jì)開(kāi)發(fā)整個(gè)游戲所需支出部分為寢室的電力消耗和設(shè)計(jì)人員的時(shí)間,完全可以承受。試營(yíng)業(yè)單位可以?xún)?yōu)先選擇學(xué)校的論壇或者公共主頁(yè)對(duì)其進(jìn)行宣傳試用并可獲得相應(yīng)的修改意見(jiàn),線(xiàn)上的宣傳和后期的調(diào)整調(diào)整工作完全可以個(gè)人獨(dú)立完成,極大地節(jié)約了經(jīng)濟(jì)費(fèi)用。低成本、高效率、響應(yīng)時(shí)間短將會(huì)成為本游戲立足于長(zhǎng)期發(fā)展的支柱,很快會(huì)實(shí)現(xiàn)盈利的狀態(tài)。此外,還可以借助其他的營(yíng)銷(xiāo)模式開(kāi)展以此游戲?yàn)榛A(chǔ)的一系列的營(yíng)銷(xiāo)活動(dòng),將其做大做好。綜上所述,此次設(shè)計(jì)研發(fā)的JAVA超級(jí)瑪麗具有市場(chǎng)前景好,成本低,收益快的優(yōu)勢(shì),在經(jīng)濟(jì)上是可行的。22技術(shù)可行性分析重新設(shè)計(jì)的JAVA版本的超級(jí)瑪麗可以完成基本的前進(jìn)、后退、跳躍、頂金幣、吃蘑菇并變大,發(fā)子彈打怪物等功能。所建議的系統(tǒng)是基于ANDROID手機(jī)系統(tǒng)的平臺(tái),結(jié)合JAVA技術(shù)而建立的信息搜索平臺(tái)4。圖形的處理更加逼真,馬里奧主人公的形象有大的改觀,游戲的關(guān)卡會(huì)更加復(fù)雜;掌上操作,隨處都可以玩,有利于提高系統(tǒng)的效率;能實(shí)現(xiàn)數(shù)據(jù)交互,能夠給廣大游戲愛(ài)好者帶來(lái)較多便利,打發(fā)無(wú)聊的時(shí)間。ECLIPSE作為JAVA程序的開(kāi)發(fā)工具,是一個(gè)開(kāi)源軟件,插件比較多,大多數(shù)企業(yè)用它來(lái)做開(kāi)發(fā),是目前最流行的JAVA開(kāi)發(fā)工具。它集成有比較多而且比較容易使用的類(lèi),在新建類(lèi)的時(shí)候也方便繼承其他類(lèi)22。而且ECLIPSE具有極為高效的GUI、先進(jìn)的代碼編輯器等,其項(xiàng)目包括許多各種各樣的子項(xiàng)目組,包括ECLIPSE插件、功能部件等。任何人都能夠輕易的將自己的軟件做成ECLIPSE的插件,而且這些插件只需簡(jiǎn)單的復(fù)制到ECLIPSE的插件文件夾下就可以被集成。主要采用SWING界面庫(kù),支持多種本機(jī)界面風(fēng)格。另外很重要的一點(diǎn)是,ECLIPSE具有多種數(shù)據(jù)庫(kù)支持23,24。23系統(tǒng)性能需求分析一個(gè)系統(tǒng)的好壞與它的性能直接相關(guān),對(duì)一個(gè)系統(tǒng)進(jìn)行性能需求分析是在系統(tǒng)設(shè)計(jì)中是必不可少的一個(gè)階段。所謂系統(tǒng)性能需求分析就是對(duì)系統(tǒng)需求中的各項(xiàng)性能指標(biāo)進(jìn)行分析,分析每項(xiàng)性能指標(biāo)是否達(dá)到系統(tǒng)的要求,以提供一個(gè)穩(wěn)定的,可靠的實(shí)用系統(tǒng)。對(duì)于基于JAVA的超級(jí)瑪麗游戲來(lái)說(shuō),需要對(duì)系統(tǒng)的以下性能進(jìn)行分析(1)實(shí)用性系統(tǒng)操作要求簡(jiǎn)單,界面友好,用戶(hù)不需要經(jīng)過(guò)培訓(xùn)或者只需要經(jīng)過(guò)簡(jiǎn)單的培訓(xùn)即可熟練地使用。(2)美觀性系統(tǒng)的開(kāi)始界面以及運(yùn)行中的界面需要美觀,避免人物及背景顏色和樣式的設(shè)計(jì)過(guò)于單調(diào)而無(wú)法對(duì)游戲玩家產(chǎn)生足夠的吸引力。此外游戲中人物變化時(shí)的過(guò)度效果要好,對(duì)比性要強(qiáng)。(3)故障率游戲運(yùn)行時(shí)發(fā)生故障的頻率要低,而且這些故障都必須能夠及時(shí)進(jìn)行修復(fù),此外游戲進(jìn)度的存儲(chǔ)不可丟失,盡量避免因游戲故障率帶來(lái)游戲玩家的差評(píng)。(4)可維護(hù)性系統(tǒng)能夠定期地對(duì)數(shù)據(jù)進(jìn)行備份,當(dāng)發(fā)生故障時(shí),可以從另外的服務(wù)器中將數(shù)據(jù)進(jìn)行恢復(fù)。(5)可擴(kuò)展性當(dāng)系統(tǒng)需求發(fā)生改變時(shí),如增加新的功能,在對(duì)系統(tǒng)功能模塊擴(kuò)展時(shí),不會(huì)影響客戶(hù)端的使用。(6)響應(yīng)時(shí)間系統(tǒng)在加載和運(yùn)行時(shí)需要及時(shí)地做出響應(yīng),不能延遲太久,較短的響應(yīng)時(shí)間將對(duì)游戲的推廣帶來(lái)極大的效率,在等待的時(shí)候也需要有進(jìn)度提示。3相關(guān)技術(shù)研究31開(kāi)發(fā)工具及環(huán)境311JAVA語(yǔ)言JAVA是一種跨平臺(tái)的程序設(shè)計(jì)語(yǔ)言,它屬于面向?qū)ο笮偷模蒘UN公司于1995年推出3,4,5,6,7,被美國(guó)著名雜志評(píng)為1995年十大優(yōu)秀科技產(chǎn)品,這是因?yàn)?,傳統(tǒng)的軟件往往與具體的實(shí)現(xiàn)環(huán)境相關(guān),一旦環(huán)境改變就需要對(duì)軟件進(jìn)行一番改動(dòng),而JAVA編寫(xiě)的軟件能在執(zhí)行碼上兼容,這樣,只要計(jì)算機(jī)提供了JAVA解釋器,用JAVA編寫(xiě)的軟件就能在其上運(yùn)行。JAVA包括三個(gè)版本J2SE、J2ME和J2EE,分別面向普通用戶(hù),移動(dòng)用戶(hù)和企業(yè)用戶(hù)。JAVA語(yǔ)言具有如下眾多的優(yōu)點(diǎn)簡(jiǎn)單性這是JAVA的顯著特點(diǎn)。編程簡(jiǎn)單是每位應(yīng)用開(kāi)發(fā)者所希望的。JAVA很接近C,但它摒棄了C很多難用和幾乎不用的功能。JAVA不支持運(yùn)算符重載、多態(tài)繼承及廣泛自動(dòng)強(qiáng)制等功能,而增加了內(nèi)存空間自動(dòng)收集即自動(dòng)分配和釋放內(nèi)存空間功能。此外,JAVA很小,它的基本解釋類(lèi)支持部分只占40K字節(jié),附加的基本標(biāo)準(zhǔn)庫(kù)和線(xiàn)程也只需175K字節(jié),所以應(yīng)用軟件可以在相當(dāng)小的系統(tǒng)上獨(dú)立工作8,9。分布性JAVA是專(zhuān)為網(wǎng)絡(luò)設(shè)計(jì)的。為了支持INTERNET中的TCP/IP協(xié)議和FTP協(xié)議等,JAVA提供了附加的例程。JAVA應(yīng)用程序能自由地打開(kāi)和訪(fǎng)問(wèn)網(wǎng)絡(luò)上的對(duì)象,就象這些對(duì)象在本地的文件系統(tǒng)中一樣9,10。高安全性JAVA的安全機(jī)制分為好幾層。JAVA編譯器保證源代碼不能違反安全性原則,JAVA字節(jié)代碼在運(yùn)行前要經(jīng)過(guò)一個(gè)確認(rèn)過(guò)程;加載器保證從網(wǎng)絡(luò)或文件系統(tǒng)被加載的軟件不違反名字空間和訪(fǎng)問(wèn)限制。HOTJAVA瀏覽器提供一種安全對(duì)話(huà)機(jī)制,可為JAVA應(yīng)用程序的下載提供配置策略,如讓用戶(hù)聲明一道防火墻,進(jìn)行文件保護(hù)和網(wǎng)絡(luò)安全檢查等。通常用戶(hù)從INTERNET上下載文件時(shí),要冒感染病毒的風(fēng)險(xiǎn)。文件的源發(fā)站無(wú)法提供保護(hù),因?yàn)椴《臼潜煌馊俗⑷氲?,在編譯好的代碼中難以探測(cè)。JAVA的APPLET不會(huì)被寫(xiě)入用戶(hù)的硬盤(pán),也不會(huì)訪(fǎng)問(wèn)用戶(hù)的文件或隨意查看內(nèi)存,它也不會(huì)加入到用戶(hù)的C或C程序中,也不訪(fǎng)問(wèn)別的JAVAAPPLET,從而減少病毒感染的機(jī)會(huì)11。根據(jù)字節(jié)代碼從網(wǎng)上何處來(lái)的信息,還可以判斷它是來(lái)自防火墻內(nèi)還是防火墻外。JAVA還具有公開(kāi)密鑰技術(shù),所以它可用于銀行或其它需要高安全性的地方9,12。解釋性JAVA是一個(gè)解釋性語(yǔ)言。連接過(guò)程非常簡(jiǎn)單,所以便于開(kāi)發(fā)APPLET或者JAVA應(yīng)用程序。多線(xiàn)程多線(xiàn)程程序設(shè)計(jì)比較復(fù)雜,線(xiàn)程間的同步需仔細(xì)考慮。由于JAVA有一套同步原語(yǔ),它采用監(jiān)視規(guī)則和指示燈規(guī)則,對(duì)多線(xiàn)程的設(shè)計(jì)者有很好的支持。由于JAVA應(yīng)用可以是多線(xiàn)程的,故具有良好的交互性和實(shí)時(shí)性9。結(jié)構(gòu)無(wú)關(guān)性JAVA字節(jié)代碼是一種中間碼,可以在任何機(jī)器上解釋運(yùn)行。目前,在個(gè)人計(jì)算機(jī)市場(chǎng)上,應(yīng)用軟件商要為不同的計(jì)算機(jī)開(kāi)發(fā)同一軟件的不同版本。而JAVA軟件可運(yùn)行于不同的平臺(tái),因此一個(gè)JAVA應(yīng)用軟件只要一個(gè)版本就可以了。所以JAVA應(yīng)用軟件具有很好的可移植性13,14。另外JAVA沒(méi)有C那樣的版本不匹配問(wèn)題,如操作系統(tǒng)的版本升級(jí)了,應(yīng)用軟件也要更新。但它也有它的缺點(diǎn),就是執(zhí)行效率不如其他本地語(yǔ)言,如C/C等,但隨著硬件的迅速發(fā)展,這些差別也變得越來(lái)越不明顯了15,16,17。312ECLIPSE環(huán)境ECLIPSE是開(kāi)發(fā)JAVA程序最為常用的開(kāi)發(fā)環(huán)境,首先它也是跨平臺(tái),因?yàn)樗旧砭褪鞘褂肑AVA語(yǔ)言開(kāi)發(fā)的13。由于ECLIPSE支持許許多多的插件,因此它功能很強(qiáng)大,智能度很高,能對(duì)代碼的錯(cuò)誤及時(shí)準(zhǔn)確判斷并給予提示。雖然ECLIPSE是采用JAVA語(yǔ)言開(kāi)發(fā)的,但它作為開(kāi)發(fā)環(huán)境不僅限于JAVA,目前還能支持C/C等語(yǔ)言18。ECLIPSE是開(kāi)源程序,除了ECLIPSE之外,還有它的商業(yè)版本MYECLIPSE,其主要用于企業(yè)軟件的開(kāi)發(fā),如JAVAWEB的開(kāi)發(fā)19。32面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)(OBJECTORIENTEDPROGRAMMING,OPP)20是計(jì)算機(jī)編程的一種架構(gòu)。面向?qū)ο蟪绦蛟O(shè)計(jì)基本原則是程序是由一個(gè)或多個(gè)對(duì)象組成的。面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)現(xiàn)了軟件工程三個(gè)基本目標(biāo),即重用性、靈活性和可擴(kuò)展性21。由于面向?qū)ο蟮募軜?gòu)近似于人類(lèi)思想,因此面向?qū)ο蟪绦蛟O(shè)計(jì)是目前絕大多數(shù)應(yīng)用程序所采用的編程思想,其中JAVA語(yǔ)言就是面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。33C/S結(jié)構(gòu)與B/S結(jié)構(gòu)C/S(CLIENT/SEVER)結(jié)構(gòu)即客戶(hù)機(jī)/服務(wù)器結(jié)構(gòu)。它是軟件體系結(jié)構(gòu),通過(guò)它可以充分發(fā)揮客戶(hù)端和服務(wù)器兩端硬件環(huán)境的優(yōu)勢(shì),以降低系統(tǒng)的開(kāi)銷(xiāo)。目前絕大多數(shù)應(yīng)用軟件都是采用C/S結(jié)構(gòu),如我們常用的QQ聊天工具,也是采用這種結(jié)構(gòu)??蛻?hù)機(jī)和服務(wù)器常常分別位于距離較遠(yuǎn)的兩臺(tái)計(jì)算機(jī)上,客戶(hù)機(jī)程序的任務(wù)是將用戶(hù)的請(qǐng)求提交給服務(wù)器程序,服務(wù)器程序通過(guò)處理客戶(hù)機(jī)的請(qǐng)求并向客戶(hù)機(jī)反饋請(qǐng)求的結(jié)果,客戶(hù)機(jī)再把結(jié)果以特定的形式顯示給用戶(hù)16,17。B/S(BROWSER/SERVER)結(jié)構(gòu)即瀏覽器/服務(wù)器結(jié)構(gòu)。在基于B/S的遠(yuǎn)程監(jiān)控系統(tǒng)中,最關(guān)鍵的就是生產(chǎn)設(shè)備、服務(wù)器、客戶(hù)之間數(shù)據(jù)的交互,系統(tǒng)只傳送與用戶(hù)的要求有關(guān)的數(shù)據(jù)更新,傳輸延遲需要被控制在最多數(shù)秒鐘之內(nèi)。該系統(tǒng)結(jié)構(gòu)適應(yīng)了工業(yè)在網(wǎng)絡(luò)化中的要求,正被廣泛應(yīng)用起來(lái)16。4系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)41開(kāi)發(fā)工作JAVA版超級(jí)瑪麗游戲的開(kāi)發(fā)主要分為整理游戲圖片素材以及游戲代碼編寫(xiě)兩部分(1)游戲圖片素材整理包括對(duì)游戲中所有需要出現(xiàn)的游戲元素的對(duì)應(yīng)圖片進(jìn)行整理,為了實(shí)現(xiàn)主要游戲功能,我們僅剪取有關(guān)超級(jí)瑪麗奧,蘑菇怪和食人花等游戲怪物的動(dòng)作圖片,以及游戲場(chǎng)景中的各種磚塊和水管的貼圖,以及每一關(guān)卡的背景圖片,將這些圖片統(tǒng)一放到程序源文件夾下,并在程序中指明存放路徑,方便程序在初始化和運(yùn)行過(guò)程中隨時(shí)載入和繪制這些圖像,為玩家展現(xiàn)出超級(jí)瑪麗的游戲界面。(2)游戲代碼編寫(xiě)工作的主要任務(wù)是在建立對(duì)超級(jí)馬里奧游戲的游戲流程的認(rèn)識(shí)基礎(chǔ)上,先實(shí)現(xiàn)有關(guān)游戲中各游戲要素對(duì)游戲事件的相應(yīng)辦法后,初步實(shí)現(xiàn)游戲數(shù)據(jù)模型已經(jīng)對(duì)應(yīng)的游戲數(shù)據(jù)處理模塊、游戲資源加載方法等程序代碼模塊,最后整合到游戲主題框架中由負(fù)責(zé)展現(xiàn)游戲界面的控制類(lèi)進(jìn)行管理使這些模塊協(xié)調(diào)運(yùn)作。42游戲素材管理游戲素材管理的工作主要包括游戲界面和角色動(dòng)畫(huà)圖像的管理。游戲中出現(xiàn)的所有圖片文件將統(tǒng)一放入一個(gè)負(fù)責(zé)管理程序靜態(tài)資源的類(lèi)文件進(jìn)行存儲(chǔ),以方便隨時(shí)調(diào)用。在本游戲中,存放各種游戲圖像的靜態(tài)類(lèi)是STATICVALUE,這個(gè)類(lèi)中包含了許多BUFFEREDIMAGE類(lèi)的圖片對(duì)象,之所以選擇用BUFFEREDIMAGE對(duì)象來(lái)保存圖像是因?yàn)檫@個(gè)文件操作類(lèi)對(duì)象支持對(duì)許多格式的圖片的讀取和存儲(chǔ),在讀入外部圖像資源時(shí)只用簡(jiǎn)單調(diào)用IMAGEIOREADNEWFILE“XXX”的方法就可以完成將圖像進(jìn)行序列化存入到BUFFEREDIMAGE對(duì)象中,并可以將該對(duì)象作為參數(shù)傳入到程序執(zhí)行時(shí)調(diào)用的其他方法中進(jìn)行處理后繪制到游戲窗口的畫(huà)布上。在STATICVALUE類(lèi)中,我們選擇用BUFFEREDIMAGE類(lèi)型的LIST來(lái)保存有關(guān)MARIO,蘑菇怪和食人花等游戲角色和游戲物品的不同狀態(tài)下的游戲貼圖,當(dāng)游戲運(yùn)行過(guò)程游戲角色的狀態(tài)發(fā)生變化時(shí)需要重新繪制時(shí),可以通過(guò)獲取角色所屬的LIST對(duì)象中該角色的目標(biāo)對(duì)象的BUFFEREDIMAGE實(shí)例中的信息,實(shí)現(xiàn)對(duì)游戲角色的及時(shí)重繪,保證了游戲的連貫性。這種做法類(lèi)似其他游戲項(xiàng)目中對(duì)主要固定游戲元素進(jìn)行保存和記錄的配置文件CONFIG或者XML文件,即實(shí)現(xiàn)一個(gè)文件部署描述符的作用,因?yàn)橥螒蛟陂_(kāi)發(fā)過(guò)程中,有很多還未出現(xiàn)的游戲元素,往往游戲的開(kāi)發(fā)者不能預(yù)知到這些情況。因此實(shí)現(xiàn)一個(gè)存放游戲元素的特征表來(lái)布置已知和將要添加的游戲元素的主要信息,這種文件部署描述符有標(biāo)準(zhǔn)的格式,在開(kāi)發(fā)和部署環(huán)境中可供移植的,靜態(tài)數(shù)據(jù)文件表除了為游戲開(kāi)發(fā)和部署的協(xié)同提供一個(gè)標(biāo)準(zhǔn)的屬性單外,也影響到游戲執(zhí)行過(guò)程中有關(guān)游戲事務(wù)和狀態(tài)的正確性原則。因此,一個(gè)好的游戲文件部署描述符型文件對(duì)游戲的設(shè)計(jì)是至關(guān)重要的。43游戲場(chǎng)景布置游戲的場(chǎng)景設(shè)置需要考慮到游戲中存在的各種游戲元素的起始位置的設(shè)定,也包含對(duì)各種游戲元素種類(lèi)的篩選,要做到游戲的可玩性和公平性,需要考慮到游戲中導(dǎo)致游戲失敗和勝利的比率,更要考慮是否存在某些設(shè)置不合理的游戲元素可能導(dǎo)致玩家在游戲過(guò)程中遇到各種可能出現(xiàn)的BUG,因此在確定好游戲人物在不同場(chǎng)景中觸發(fā)各種和游戲角色和游戲物品的接觸事件時(shí)的響應(yīng)方法和狀態(tài)變動(dòng)結(jié)果之后,要對(duì)游戲場(chǎng)景進(jìn)行合理的規(guī)劃,本游戲中為了實(shí)現(xiàn)基本的游戲功能,對(duì)場(chǎng)景的設(shè)置盡量簡(jiǎn)單。因此僅加入磚塊和問(wèn)號(hào)磚等游戲道具,以及食人花和蘑菇怪等游戲人物。具體實(shí)現(xiàn)的代碼在專(zhuān)門(mén)負(fù)責(zé)游戲背景內(nèi)容的類(lèi)BACKGROUND中進(jìn)行添加,諸如游戲道具對(duì)象集合ALLOBSTRUCTIONLIST為例,先初始化該對(duì)象PRIVATELISTALLOBSTRUCTIONNEWARRAYLIST隨后根據(jù)要添加的道具對(duì)象的種類(lèi),出現(xiàn)位置等信息,向該集合中加入道具元素THISALLOBSTRUCTIONADDNEWOBSTRUCTION120,360,4,THIS/在點(diǎn)(120,360)處加入問(wèn)號(hào)磚石這樣根據(jù)已向道具集合中加入的道具對(duì)象信息,在初始化游戲程序的時(shí)候新建BACKGROUND類(lèi)對(duì)象實(shí)例,將BACKGROUND類(lèi)對(duì)象中的ALLOBSTRUCTIONLIST中存放的對(duì)象信息對(duì)應(yīng)的實(shí)際顯示圖片加載到程序顯示界面上,完成游戲場(chǎng)景的繪制工作。44游戲用例圖用例圖作為UML建模圖的最關(guān)鍵的一種圖,其作用在于描述游戲的主要功能需求;其他所有的視圖都是從用例視圖派生而來(lái),因此對(duì)于闡述游戲功能需求而言用例圖的存在是不可替代的。該游戲的總體用例圖如下圖41所示頂層包游戲主角開(kāi)始游戲游戲勝利游戲結(jié)束設(shè)置游戲背景設(shè)置游戲人物設(shè)置游戲元素圖41游戲用例圖該游戲的結(jié)構(gòu)簡(jiǎn)單,通過(guò)點(diǎn)擊空格鍵開(kāi)始游戲,當(dāng)完成游戲關(guān)于游戲勝利的判定條件(即通過(guò)所有障礙或者擊敗所有敵人),游戲勝利。如果當(dāng)游戲主角的生命值為0并且還未達(dá)到游戲勝利條件,則游戲失敗。玩家選擇退出游戲或者重新開(kāi)始游戲。45游戲狀態(tài)圖在游戲的運(yùn)行過(guò)程中,為了捕獲其在所經(jīng)歷的各種狀態(tài)中的表現(xiàn),需要使用狀態(tài)圖來(lái)對(duì)執(zhí)行過(guò)程加以說(shuō)明。狀態(tài)圖主要描述的是對(duì)象的狀態(tài)及狀態(tài)之間的轉(zhuǎn)移,如要顯示一個(gè)對(duì)象在其生命周期內(nèi)的行為時(shí),需要畫(huà)出該對(duì)象經(jīng)歷的狀態(tài)匯總圖。要涉及到的UML元素主要有動(dòng)作狀態(tài)、活動(dòng)狀態(tài)、動(dòng)作流以及對(duì)象流等,可以用來(lái)表示動(dòng)作使用對(duì)象或者動(dòng)作對(duì)對(duì)象的影響。該游戲的狀態(tài)圖如下圖42所示游戲開(kāi)始游戲繼續(xù)翻越障礙翻越障礙游戲重置被殺掉陷阱殺死敵人殺死敵人被殺生命1掉陷阱生命1生命數(shù)0敵人數(shù)0|障礙數(shù)0游戲通關(guān)游戲結(jié)束掉陷阱被殺翻越障礙殺死敵人圖42游戲狀態(tài)圖通過(guò)對(duì)游戲的狀態(tài)圖分析可以更加準(zhǔn)確地捕捉到游戲運(yùn)行過(guò)程中每個(gè)環(huán)節(jié)發(fā)生的動(dòng)作,首先從游戲開(kāi)始時(shí),游戲人物或者翻越障礙或者殺死敵人,才能保證游戲繼續(xù),在之后的過(guò)程中,如果出現(xiàn)MARIO被敵人殺死或者自己掉入陷阱的情況時(shí),游戲?qū)⑦M(jìn)行重置,將當(dāng)前的游戲布景還原到最近的一次存檔。同時(shí)游戲繼續(xù),若當(dāng)前場(chǎng)景中已經(jīng)不存在沒(méi)有跨越過(guò)的障礙物或者游戲敵人時(shí),游戲判定玩家獲勝,游戲通關(guān)。否則若MARIO的生命數(shù)到達(dá)0時(shí),玩家已經(jīng)失去繼續(xù)游戲的機(jī)會(huì),游戲判定玩家失敗,游戲結(jié)束。上圖中的每個(gè)發(fā)生的動(dòng)作都有對(duì)應(yīng)的后繼狀態(tài),當(dāng)滿(mǎn)足監(jiān)護(hù)條件時(shí),程序的動(dòng)作事件流指向最終的活動(dòng)狀態(tài),即游戲通關(guān)或者游戲結(jié)束,并最終進(jìn)入終止?fàn)顟B(tài)。46游戲時(shí)序圖通過(guò)分析游戲的用例需求和經(jīng)歷狀態(tài)之外,了解有關(guān)游戲的生命周期和消息順序也是作為游戲開(kāi)發(fā)的一項(xiàng)關(guān)鍵指標(biāo)。而對(duì)游戲執(zhí)行的時(shí)序分析則需要借助順序圖來(lái)作為輔助工具。順序圖是強(qiáng)調(diào)游戲中發(fā)生傳遞消息時(shí)間順序的交互圖。主要用于游戲用例的邏輯建模,描述游戲用例實(shí)現(xiàn)。順序圖將交互關(guān)系表示為一個(gè)二維圖,由時(shí)間軸和寫(xiě)作中各獨(dú)立對(duì)象組成。本游戲的時(shí)序圖如下圖43所示ENEMYMARIOOBSTRUCTIONBACKGROUNDGETALLENEMYGETALLENEMYSETALLOBSTRUCTIONSETALLOBSTRUCTIONALLOBSTRUCTIONGETREMOVEDENEMYGETREMOVEDENEMYGETREMOVEDOBSTRUCTIONGETREMOVEDOBSTRUCTIONDEADDEADSTARTMOVESTARTMOVESETTYPESETTYPEGETSORTGETSORTSETOVERSETOVERISOVER圖43游戲時(shí)序圖根據(jù)上圖中關(guān)于MARIO,敵人ENEMY,游戲障礙OBSTRUCTION和游戲背景BACKGROUND四個(gè)獨(dú)立對(duì)象的消息傳遞分析,可以大致得到如下的理解1)游戲開(kāi)始后,BACKGROUND向ENEMY發(fā)出命令,允許ENEMY實(shí)例對(duì)象開(kāi)始進(jìn)行移動(dòng),同時(shí)ENEMY返回一個(gè)對(duì)象集合,將所有處于游戲場(chǎng)景中的ENEMY信息傳遞給BACKGROUND。2)當(dāng)MARIO踩死后,將已被MARIO殺死的敵人加入清除敵人集合ALLREMOVEDENEMY中,并返回給BACKGROUND對(duì)象。3)在游戲開(kāi)始環(huán)節(jié)中,將游戲中的所有游戲障礙物集合ALLOBSTRUCTION進(jìn)行設(shè)置并初始化,并返回給BACKGROUND,當(dāng)MARIO對(duì)游戲障礙物進(jìn)行破壞或者翻越之后,障礙物的所屬種類(lèi)會(huì)發(fā)生改變,則將已發(fā)生改變的障礙物加入到清除障礙物的集合ALLREMOVEDOBSTRUCTION中,并返回給BACKGROUND對(duì)象。4)當(dāng)MARIO被殺死時(shí),通過(guò)調(diào)用SETOVER,告知BACKGROUND對(duì)象游戲狀態(tài)ISOVER為T(mén)RUE,游戲終止。47游戲類(lèi)圖471游戲總體類(lèi)圖游戲的類(lèi)和結(jié)構(gòu)可以看做是游戲的主體構(gòu)架,對(duì)游戲的類(lèi)的結(jié)構(gòu)和類(lèi)和類(lèi)之間的關(guān)系需要借助類(lèi)圖進(jìn)行分析和研究。通過(guò)對(duì)類(lèi)圖和代碼之間的映射關(guān)系,我們可以清楚地看到游戲組織結(jié)構(gòu)上的層次關(guān)系,因此,將類(lèi)之間的關(guān)系組織成類(lèi)圖,是我們下面要進(jìn)行的具體工作。游戲的總體類(lèi)圖如下圖44所示MARIOMARIOMARIOOBSTRUCTIONMARIOENEMYMARIOMYFRAMEMARIOSTATICVALUEMARIOBACKGROUNDRUNNABLEKEYLISTENER1111111頂層包BUFFEREDIMAGE111111圖44游戲總體類(lèi)圖游戲中主要涉及的類(lèi)有以上六個(gè),MARIO類(lèi)、ENEMY類(lèi)、OBSTRUCTION類(lèi)、BACKGROUND類(lèi)、MYFRAME類(lèi)和STATICVALUE類(lèi)。其中MARIO類(lèi)、ENEMY類(lèi)、OBSTRUCTION類(lèi)和MYFRAME類(lèi)實(shí)現(xiàn)了RUNNABLE接口,并在類(lèi)的內(nèi)部復(fù)寫(xiě)RUN方法用于執(zhí)行對(duì)應(yīng)所需的線(xiàn)程方法。MYFRAME類(lèi)同時(shí)實(shí)現(xiàn)了KEYLISTENER接口包含的有關(guān)按鍵事件監(jiān)聽(tīng)的方法KEYPRESSD、KEYRELEASED和KEYTYPED,并繼承于JFRAME類(lèi),負(fù)責(zé)繪制游戲界面。根據(jù)上圖中所示,MARIO類(lèi)和OBSTRUCTION類(lèi)以及ENEMY類(lèi)和STATICVALUE中都包含BUFFEREDIMAGE類(lèi)型的對(duì)象或者集合對(duì)象,存在一對(duì)一或一對(duì)多關(guān)聯(lián)關(guān)系,具體的有關(guān)情況將在后續(xù)的每個(gè)類(lèi)的細(xì)節(jié)類(lèi)圖中得以說(shuō)明。以上的類(lèi)圖僅展示游戲的總體類(lèi)圖,描述類(lèi)與類(lèi)之間的關(guān)系和總體結(jié)構(gòu)。472MARIO圖類(lèi)MARIO類(lèi)是有關(guān)游戲人物MARIO的有關(guān)信息和相關(guān)操作的類(lèi),其對(duì)應(yīng)的屬性和方法如下圖45所示MARIOINXINT,INYINTDEADVOIDDOWNVOIDGETLIFEINTGETSCOREINTGETSHOWIMAGEBUFFEREDIMAGEGETXINTGETYINTISCLEARBOOLISDEADBOOLJUMPVOIDLEFTMOVEVOIDLEFTSTOPVOIDRIGHTMOVEVOIDRIGHTSTOPVOIDRUNVOIDSETBGINBGBACKGROUNDVOIDSETLIFEINLIFEINTVOIDSETSCOREINSCOREINTVOIDSETXINXINTVOIDSETYINYINTVOIDBGBACKGROUNDISCLEARBOOLISDEADBOOLLIFEINTMOVINGINTSCOREINTSHOWIMAGEBUFFEREDIMAGESTATUSSTRINGTTHREADUPTIMEINTXINTXMOVEINTYINTYMOVEINTMARIOMARIO圖45游戲MARIO類(lèi)圖1MARIO類(lèi)的主要屬性如下BG當(dāng)前游戲背景,BACKGROUND類(lèi)型對(duì)象ISCLEAR判斷MARIO當(dāng)前是否通關(guān)ISDEAD判斷MARIO是否死亡LIFEMARIO的生命值MOVINGMARIO的移動(dòng)長(zhǎng)度SCOREMARIO獲得的得分SHOWIMAGEMARIO當(dāng)前應(yīng)該對(duì)應(yīng)的顯示圖片STATUSMARIO當(dāng)前對(duì)應(yīng)的狀態(tài)T類(lèi)中啟動(dòng)的一個(gè)線(xiàn)程對(duì)象UPTIMEMARIO可以上升的次數(shù)XMARIO當(dāng)前的橫坐標(biāo)XMOVEMARIO橫向移動(dòng)的長(zhǎng)度YMARIO當(dāng)前的縱坐標(biāo)YMOVEMARIO縱向移動(dòng)的長(zhǎng)度2MARIO類(lèi)的主要方法如下MARIOINTX,INTY構(gòu)造方法,包含MARIO的初始坐標(biāo)DEAD處理MARIO死亡后的數(shù)據(jù)更新操作DOWNMARIO下落時(shí)候狀態(tài)管理方法GETLIFE獲得MARIO當(dāng)前生命GETSCORE獲得MARIO得分情況GETSHOWIMAGE獲得MARIO當(dāng)前對(duì)應(yīng)的顯示圖片GETX獲得MARIO的橫坐標(biāo)GETY獲得MARIO的縱坐標(biāo)ISCLEAR當(dāng)前關(guān)卡是否已經(jīng)通過(guò)ISDEAD判斷MARIO是否死亡JUMP負(fù)責(zé)MARIO跳躍的方法LEFTMOVE負(fù)責(zé)MARIO向左移動(dòng)LEFTSTOP負(fù)責(zé)MARIO向左移動(dòng)后停止RIGHTMOVE負(fù)責(zé)MARIO向右移動(dòng)RIGHTSTOP負(fù)責(zé)MARIO向右移動(dòng)后停止RUNRUNNABLE中的方法,線(xiàn)程執(zhí)行主要方法SETBGBACKGROUND設(shè)置游戲背景SETLIFEINT設(shè)置MARIO生命數(shù)SETSCOREINT設(shè)置MARIO得分情況SETXINT設(shè)置MARIO所處橫坐標(biāo)SETYINT設(shè)置MARIO所處縱坐標(biāo)473ENEMY類(lèi)圖ENEMY類(lèi)主要負(fù)責(zé)管理游戲敵人角色有關(guān)信息和相關(guān)操作的類(lèi),其屬性和方法如下圖46所示GETXINTGETYINTGETSHOWIMAGEBUFFEREDIMAGERESETVOIDSTARTMOVEVOIDDEADVOIDSETBGBACKGROUNDENEMYINXINT,INYINT,INISLEFTBOOL,INTYPEINT,INBGBACKGROUNDENEMYINXINT,INYINT,INISUPBOOL,INTYPEINT,INBGBACKGROUND,INUPMAXINT,INDOWNMAXINTXINTYINTSTARTXINTSTARTYINTTYPEINTSHOWIMAGEBUFFEREDIMAGEISLEFTORUPBOOLUPMAXINTDOWNMAXINTTTHREADIMAGETYPEINTBGBACKGROUNDMARIOENEMY圖46游戲ENEMY類(lèi)圖1ENEMY類(lèi)的主要屬性如下X敵人的橫坐標(biāo)Y敵人的縱坐標(biāo)STARTX敵人的起始點(diǎn)的橫坐標(biāo)STARTY敵人的起始點(diǎn)的縱坐標(biāo)TYPE敵人的種類(lèi)(1是蘑菇怪或?yàn)觚敚?是食人花)SHOWIMAGE敵人的顯示圖像ISLEFTORUP敵人是否左移或者上移,蘑菇怪左移,食人花上移UPMAX食人花最大上升高度DOWNMAX食人花最大下降高度T類(lèi)中的線(xiàn)程對(duì)象IMAGETYPE圖像類(lèi)型BG當(dāng)前游戲背景2ENEMY類(lèi)的主要方法如下ENEMYINT,INT,BOOLEAN,INT,BACKGROUND蘑菇怪?jǐn)橙说臉?gòu)造方法ENEMYINT,INT,BOOLEAN,INT,INT,INT,BACKGROUND食人花敵人的構(gòu)造方法DEAD敵人的死亡處理方法GETSHOWIMAGE顯示當(dāng)前敵人所屬游戲圖片GETTYPE獲取當(dāng)前敵人的種類(lèi)GETX獲取敵人的橫坐標(biāo)GETY獲取敵人的縱坐標(biāo)RESET重置函數(shù)RUN線(xiàn)程運(yùn)行方法SETBGBACKGROUND設(shè)置游戲背景STARTMOVE敵人開(kāi)始移動(dòng)474OBSTRUCTION類(lèi)圖OBSTRUCTION類(lèi)是主要負(fù)責(zé)管理游戲道具有關(guān)的信息和相關(guān)操作的類(lèi),其屬性和方法如下圖47所示OBSTRUCTIONINXINT,INYINT,INTYPEINT,INBGBACKGROUNDGETSHOWIMAGEBUFFEREDIMAGEGETTYPEINTGETXINTGETYINTRESETVOIDRUNVOIDSETIMAGEVOIDSETTYPEINTBGBACKGROUNDSHOWIMAGEBUFFEREDIMAGESTARTTYPEINTTTHREADTYPEINTXINTYINTMARIOOBSTRUCTION圖47游戲OBSTRUCTION類(lèi)圖1OBSTRUCTION類(lèi)主要屬性如下BG當(dāng)前游戲背景SHOWIMAGE所示圖片STARTTYPE道具起始類(lèi)型T線(xiàn)程對(duì)象TYPE道具類(lèi)型X道具所處橫坐標(biāo)Y道具所處縱坐標(biāo)2OBSTRUCTION類(lèi)主要方法如下OBSTRUCTIONINT,INT,INT,BACKGROUND道具初始化方法GETSHOWIMAGE獲取當(dāng)前顯示圖片GETTYPE獲取道具種類(lèi)GETX獲取道具橫坐標(biāo)GETY獲取道具縱坐標(biāo)RESET重置方法RUN線(xiàn)程執(zhí)行方法SETIMAGE設(shè)置顯示圖片SETTYPEINT設(shè)置道具種類(lèi)475BACKGROUND類(lèi)BACKGROUND類(lèi)主要負(fù)責(zé)管理游戲背景上的游戲元素,并為其他游戲?qū)嶓w類(lèi)提供調(diào)用方法。其類(lèi)圖如下圖48BACKGROUNDINSORTINT,INFLAGBOOLENEMYSTARTMOVEVOIDGETALLENEMYLISTGETALLOBSTRUCTIONLISTGETBGIMAGEBUFFEREDIMAGEGETREMOVEDENEMYLISTGETREMOVEDOBSTRUCTIONLISTGETSORTINTISDOWNBOOLISFLAGBOOLISOVERBOOLRESETVOIDSETALLOBSTRUCTIONINALLOBSTRUCTIONLISTVOIDSETDOWNINISDOWNBOOLVOIDSETOVERINISOVERBOOLVOIDBGIMAGEBUFFEREDIMAGESORTINTFLAGBOOLISOVERBOOLISDOWNBOOLALLENEMYLISTALLOBSTRUCTIONLISTREMOVEDENEMYLISTREMOVEDOBSTRUCTIONLISTMARIOBACKGROUND圖48游戲BACKGROUND類(lèi)圖1BACKGROUND主要屬性如下BGIMAGE游戲背景圖片SORT游戲關(guān)卡FLAG是否展示ISOVER是否結(jié)束ISDOWN是否進(jìn)入下一章節(jié)ALLENEMY用于保存所有敵人的集合ALLOBSTRUCTION用于保存所有道具的集合REMOVEENEMY用于保存所有已被消滅敵人的集合REMOVEOBSTRUCTION用于保存所用被破壞道具的集合2BACKGROUND主要方法如下BACKGROUNDINT,BOOLEAN場(chǎng)景構(gòu)造方法ENEMYSTARTMOVE敵人開(kāi)始移動(dòng)方法GETALLENEMY獲得場(chǎng)景內(nèi)的敵人GETALLOBSTRUCTION獲得場(chǎng)景內(nèi)的所有道具GETBGIMAGE獲得場(chǎng)景背景圖片GETREMOVEDENEMY獲得被消滅的敵人GETREMOVEDOBSTRUCTION獲得被破壞的障礙物GETSORT獲得當(dāng)前游戲的章節(jié)ISDOWN是否開(kāi)始下一章節(jié)ISFLAG是否進(jìn)行展示ISOVER是否游戲結(jié)束RESET重置方法SETALLOBSTRUCTIONLIST設(shè)置游戲道具SETDOWNBOOLEAN設(shè)置游戲可否推進(jìn)SETOVERBOOLEAN設(shè)置游戲是否結(jié)束476STATICVALUE類(lèi)圖STATICVALUE的作用是用來(lái)保存游戲中所有道具和人物的圖片信息,其相關(guān)類(lèi)圖如下圖49所示INITVOIDALLMARIOIMAGELISTSTARTIMAGEBUFFEREDIMAGEENDIMAGEBUFFEREDIMAGEBGIMAGEBUFFEREDIMAGEALLFLOWERIMAGELISTALLTRIANGLEIMAGELISTALLTURTLEIMAGELISTALLOBSTRUCTIONIMAGELISTMARIODEADIMAGEBUFFEREDIMAGEIMAGEPATHSTRINGMARIOSTATICVALUE圖49游戲STATICVALUE類(lèi)圖1STATICVALUE的主要屬性如下ALLMARIOIMAGE與MARIO所有有關(guān)的圖片STARTIMAGE游戲開(kāi)始圖片ENDIMAGE游戲結(jié)束圖片BGIMAGE游戲背景圖片ALLTRIANGLEIMAGE蘑菇怪有關(guān)的圖片ALLTURTLEIMAGE烏龜怪有關(guān)的圖片ALLOBSTRUCTIONIMAGE游戲道具有關(guān)圖片MARIODEADIMAGEMARIO死亡圖片IMAGEPATH圖片保存路徑2STATICVALUE的主要方法如下INIT初始化方法,將上述STATICVALUE中的屬性通過(guò)傳入?yún)?shù)進(jìn)行賦值,和圖片真實(shí)路徑對(duì)應(yīng)起來(lái)。477MYFRAME類(lèi)圖MYFRAME類(lèi)是繼承于JAVASWING圖形庫(kù)中JFRAME框架的類(lèi),用于實(shí)現(xiàn)游戲界面的繪制,將和游戲顯示有關(guān)的組件加入到框架中。與MYFRAME有關(guān)的類(lèi)圖如下圖410所示MAININARGSSTRINGVOIDMYFRAMEKEYPRESSEDINEKEYEVENTVOIDKEYRELEASEDINEKEYEVENTVOIDKEYTYPEDINEKEYEVENTVOIDPAINTINGGRAPHICSVOIDRUNALLBGLISTISSTARTBOOLMARIOMARIONOWBGBUFFEREDIMAGETTHREADMARIOMYFRAME圖410游戲MYFRAME類(lèi)圖1MYFRAME類(lèi)的主要屬性如下ALLBG所有背景圖片ISSTART是否游戲開(kāi)始MARIOMARIO類(lèi)的實(shí)例對(duì)象NOWBG當(dāng)前的背景圖片T線(xiàn)程對(duì)象2MYFRAME類(lèi)的主要方法MAIN主方法MYFRAME構(gòu)造方法KEYPRESSED按鍵按下監(jiān)聽(tīng)方法KEYRELEASED按鍵釋放監(jiān)聽(tīng)方法KEYTYPED按鍵連按監(jiān)聽(tīng)方法PAINT屏幕重繪方法RUN線(xiàn)程運(yùn)行方法48游戲功能與代碼實(shí)現(xiàn)481游戲功能游戲的基本功能主要根據(jù)游戲的游戲要素分為以下幾個(gè)主要問(wèn)題1MARIO的移動(dòng)和跳躍動(dòng)作控制的實(shí)現(xiàn)2MARIO遇到障礙物時(shí)將導(dǎo)致障礙物狀態(tài)的變化或者M(jìn)ARIO自身狀態(tài)的變化3MARIO在執(zhí)行跳躍動(dòng)作的同時(shí)如果包含方向性,將對(duì)MARIO的運(yùn)動(dòng)方式造成改變因此,我們需要對(duì)這些問(wèn)題進(jìn)行深化,并加入一些設(shè)定來(lái)保證這些問(wèn)題能被解決,基本覆蓋各種判定條件。1當(dāng)MARIO沒(méi)有遇到障礙物或者敵人時(shí),如果MARIO在一段平直路段上行走,應(yīng)有一個(gè)表示狀態(tài)的變量標(biāo)識(shí)MARIO處于著陸狀態(tài),并同時(shí)基本狀態(tài)為移動(dòng)方向。2當(dāng)MARIO在空中時(shí)(即已發(fā)生跳躍),如果同時(shí)有方向操作的輸入,則應(yīng)該的基本狀態(tài)應(yīng)該為跳躍方向。并應(yīng)該有一個(gè)變量用于控制MARIO的上升高度或者上升力度,當(dāng)這個(gè)變量達(dá)到一定閥值時(shí),MARIO的坐標(biāo)應(yīng)相應(yīng)發(fā)生降低,直到落到一個(gè)障礙物或者水平路段上后方可以重新跳躍,在降落過(guò)程中MARIO仍可以根據(jù)輸入方向來(lái)調(diào)整位置和朝向。2)當(dāng)MARIO碰到敵人時(shí),如果是在非跳躍狀態(tài)時(shí),會(huì)被敵人殺死。如果在跳躍狀態(tài)時(shí),則敵人會(huì)被殺死。當(dāng)MARIO遇到高直的障礙物時(shí),應(yīng)采用位置判斷來(lái)決定MARIO是否可以繼續(xù)移動(dòng),只有當(dāng)離開(kāi)障礙物所處的坐標(biāo)及影響范圍外,MARIO才可以繼續(xù)移動(dòng)。482代碼實(shí)現(xiàn)本環(huán)節(jié)根據(jù)MARIO類(lèi)中的部分代碼,來(lái)展示對(duì)游戲進(jìn)行中的一些關(guān)鍵環(huán)節(jié)的分析過(guò)程,通過(guò)代碼說(shuō)明主要的執(zhí)行步驟。PUBLICVOIDLEFTMOVEXMOVE5IFTHISSTATUSINDEXOF“JUMPING“1THISSTATUS“LEFTJUMPING“ELSETHISSTATUS“LEFTMOVING“以上是MARIO的左移方法,如果當(dāng)前MARIO處于跳躍狀態(tài),則將狀態(tài)改為L(zhǎng)EFTJUMPING,否則改為L(zhǎng)EFTMOVING,同理可得對(duì)應(yīng)的右移方法RIGHTMOVE。PUBLICVOIDLEFTSTOPXMOVE0IFTHISSTATUSINDEXOF“JUMPING“1THISSTATUS“LEFTJUMPING“ELSETHISSTATUS“LEFTSTANDING“以上是MARIO的左移停止方法,如果當(dāng)前的MARIO處于跳躍狀態(tài),則將狀態(tài)改為L(zhǎng)EFTJUMPING,否則改為L(zhǎng)EFTSTANDING,同理可得對(duì)應(yīng)右移停止方法LEFTSTOP。PUBLICVOIDJUMPIFTHISSTATUSINDEXOF“JUMPING“1IFTHISSTATUSINDEXOF“LEFT“1THISSTATUS“LEFTJUMPING“ELSETHISSTATUS“RIGHTJUMPING“YMOVE5UPTIME38以上是跳躍方法,判斷MARIO的狀態(tài)是否包含有是JUMPING字段,并根據(jù)方向來(lái)確定是向左面跳還是向右面跳。并加上一個(gè)閥值UPTIME來(lái)限定MARIO的跳躍力度。PUBLICVOIDDOWNIFTHISSTATUSINDEXOF“LEFT“1THISSTATUS“LEFTJUMPING“ELSETHISSTATUS“RIGHTJUMPING“YMOVE5以上是降落方法,判斷MARIO的跳躍狀態(tài)和方向,并對(duì)MARIO所處高度進(jìn)行降低處理對(duì)于復(fù)寫(xiě)RUNNABLE接口中RUN方法,不給出全部代碼,僅對(duì)關(guān)鍵代碼進(jìn)行說(shuō)明FORINTI0ITHISYOBSETIMAGEUPTIME0以上代碼分析MARIO在移動(dòng)過(guò)程中是否遇到了障礙物,如果干擾到其運(yùn)行,則設(shè)置CANRIGHT和CANLEFT這些BOOL變量的值來(lái)說(shuō)明MARIO是否還能向左走或者右走,并且僅當(dāng)MARIO沒(méi)有碰到食人花的時(shí)候,當(dāng)MARIO通過(guò)當(dāng)前的環(huán)節(jié)時(shí),清除場(chǎng)景中的所有障礙物,并載入下個(gè)場(chǎng)景信息。FORINTI0ITHISXPRIVATEMARIOMARIONULLPRIVATEBACKGROUNDNOWBGNULLPRIVATETHREADTNEWTHREADTHISPRIVATEBOOLEANISSTARTFALSEPUBLICSTATICVOIDMAINSTRINGARGSNEWMYFRAMEPUBLICMYFRAMETHISSETTITLE“JAVA版超級(jí)瑪麗“THISSETSIZE900,600INTWIDTHTOOLKITGETDEFAULTTOOLKITGETSCREENSIZEWIDTHINTHEIGHTTOOLKITGETDEFAULTTOOLKITGETSCREENSIZEHEIGHTTHISSETLOCATIONWIDTH900/2,HEIGHT600/2STATICVALUEINITTHISSETDEFAULTCLOSEOPERATIONJFRAMEEXIT_ON_CLOSETHISSETVISIBLETRUETHISSETRESIZABLEFALSEFORINTI1IITERENEMYTHISNOWBGGETALLENEMYITERAT
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年山西魯晉特種設(shè)備檢驗(yàn)檢測(cè)有限公司招聘?jìng)淇碱}庫(kù)及1套參考答案詳解
- 2026年吉林省路橋工程(集團(tuán))有限公司西南地區(qū)項(xiàng)目部勞務(wù)派遣人員招聘13人備考題庫(kù)有答案詳解
- 2026年南昌市昌南學(xué)校招聘派遣制教師備考題庫(kù)完整答案詳解
- 2026年中信國(guó)安實(shí)業(yè)集團(tuán)有限公司招聘?jìng)淇碱}庫(kù)及答案詳解1套
- 2026年南京大學(xué)事業(yè)編制崗位公開(kāi)招聘15人備考題庫(kù)帶答案詳解
- 2026年北京世源希達(dá)工程技術(shù)有限公司招聘?jìng)淇碱}庫(kù)及答案詳解參考
- 2026年廣州發(fā)展集團(tuán)股份有限公司招聘?jìng)淇碱}庫(kù)完整參考答案詳解
- 2026年哈爾濱市道里區(qū)愛(ài)建社區(qū)衛(wèi)生服務(wù)中心招聘?jìng)淇碱}庫(kù)完整答案詳解
- 2026年北部戰(zhàn)區(qū)空軍醫(yī)院社會(huì)招聘44人備考題庫(kù)及1套參考答案詳解
- 2026年恒豐銀行深圳分行社會(huì)招聘5人備考題庫(kù)及參考答案詳解1套
- 2025至2030中國(guó)細(xì)胞存儲(chǔ)行業(yè)調(diào)研及市場(chǎng)前景預(yù)測(cè)評(píng)估報(bào)告
- 《中華人民共和國(guó)危險(xiǎn)化學(xué)品安全法》解讀
- 水暖施工員考試及答案
- 2025年省級(jí)行業(yè)企業(yè)職業(yè)技能競(jìng)賽(老人能力評(píng)估師)歷年參考題庫(kù)含答案
- 2025年淮北市相山區(qū)公開(kāi)招考村(社區(qū))后備干部66人備考題庫(kù)及一套完整答案詳解
- 道路橋梁全壽命周期管理技術(shù)研究與成本優(yōu)化研究畢業(yè)答辯匯報(bào)
- 2024司法考試卷一《法律職業(yè)道德》真題及答案
- 2026年江西冶金職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及參考答案詳解1套
- 黑龍江省哈爾濱市第九中學(xué)校2024-2025學(xué)年高二上學(xué)期期末考試生物試題 含解析
- 國(guó)家開(kāi)放大學(xué)電大《國(guó)際私法》形考任務(wù)1-5題庫(kù)及答案
- 茶藝師培訓(xùn)教材ppt課件
評(píng)論
0/150
提交評(píng)論