【java毕业设计】基于java+GUL的超级玛丽游戏GUL设计与实现(毕业论文+程序源码)——超级玛丽游戏
基于java+GUL的超級(jí)瑪麗游戲GUL設(shè)計(jì)與實(shí)現(xiàn)(畢業(yè)論文+程序源碼)
大家好,今天給大家介紹基于java+GUL的超級(jí)瑪麗游戲GUL設(shè)計(jì)與實(shí)現(xiàn),文章末尾附有本畢業(yè)設(shè)計(jì)的論文和源碼下載地址哦。
文章目錄:
- 基于java+GUL的超級(jí)瑪麗游戲GUL設(shè)計(jì)與實(shí)現(xiàn)(畢業(yè)論文+程序源碼)
- 1、項(xiàng)目簡(jiǎn)介
- 2、資源詳情
- 3、關(guān)鍵詞:
- 4、畢設(shè)簡(jiǎn)介:
- 5、源碼下載:
1、項(xiàng)目簡(jiǎn)介
“超級(jí)瑪麗”游戲是一個(gè)經(jīng)典的游戲,它因操作簡(jiǎn)單、娛樂(lè)性強(qiáng)而廣受歡迎。本游戲中通過(guò)總結(jié)和分析JAVA游戲的開(kāi)發(fā)流程和代碼功能的設(shè)計(jì),采用面向?qū)ο蟮脑O(shè)計(jì)模式,對(duì)游戲中的所有物體賦予對(duì)象的概念和屬性。開(kāi)發(fā)了一款超級(jí)瑪麗游戲,該游戲主要分為窗體類(lèi)、場(chǎng)景類(lèi)、馬里奧類(lèi)、敵人類(lèi)、障礙物類(lèi)等幾個(gè)類(lèi)。在主程序運(yùn)行的線程中,用戶(hù)控制的超級(jí)瑪麗隨方向鍵的操作而移動(dòng),并且可以實(shí)現(xiàn)馬里奧游戲中的一些基本功能,例如踩死敵人或者頂?shù)舸u塊。本游戲采用雙緩存技術(shù),解決了游戲過(guò)程中的閃屏問(wèn)題。通過(guò)本游戲的開(kāi)發(fā),達(dá)到學(xué)習(xí)Java技術(shù)和熟悉軟件開(kāi)發(fā)流程的目的。
本文在介紹Java相關(guān)技術(shù)和國(guó)內(nèi)外發(fā)展現(xiàn)狀的基礎(chǔ)上,對(duì)“超級(jí)瑪麗”游戲的整個(gè)生命周期的各個(gè)開(kāi)發(fā)階段進(jìn)行了詳細(xì)地介紹。為了保證程序代碼的正確性和功能實(shí)現(xiàn)的可靠性,本文還介紹了游戲軟件的程序調(diào)試過(guò)程和功能測(cè)試結(jié)果。
超級(jí)瑪麗小游戲的JAVA程序,進(jìn)入游戲后首先按空格鍵開(kāi)始,利用方向鍵來(lái)控制的馬里奧的移動(dòng),同時(shí)檢測(cè)馬里奧與場(chǎng)景中的障礙物和敵人的碰撞,并判斷馬里奧的可移動(dòng)性和馬里奧的生命值。當(dāng)馬里奧通過(guò)最后一個(gè)場(chǎng)景后游戲結(jié)束。。
本系統(tǒng)擁有的角色如下:
(1)馬里奧
(2)障礙物
(3)敵人
2、資源詳情
項(xiàng)目難度:中等難度
適用場(chǎng)景:相關(guān)題目的畢業(yè)設(shè)計(jì)
配套論文字?jǐn)?shù):21903個(gè)字
包含內(nèi)容:整套源碼+完整畢業(yè)論文+答辯PPT+輔導(dǎo)視頻+運(yùn)行截圖
3、關(guān)鍵詞:
面向?qū)ο?#xff1b;Java;碰撞檢測(cè);超級(jí)瑪麗4、畢設(shè)簡(jiǎn)介:
提示:以下為畢業(yè)設(shè)計(jì)的簡(jiǎn)略介紹,項(xiàng)目源碼及完整畢業(yè)論文下載地址見(jiàn)文末。
緒論
1.1背景以及現(xiàn)狀
Java并不是以游戲編程為目的而被開(kāi)發(fā)的,事實(shí)上,游戲編程可能是Java創(chuàng)造者心中的最后一個(gè)目標(biāo)。在過(guò)去,妨礙Java發(fā)展的是它的運(yùn)行環(huán)境;瀏覽器和Java類(lèi)庫(kù)一起從本質(zhì)上決定了Java應(yīng)該用來(lái)寫(xiě)哪種類(lèi)型的應(yīng)用程序,而高速的游戲和圖象則不在其中。這給Java帶來(lái)了不好的影響,因?yàn)槿藗冏⒁獾牟皇钦Z(yǔ)言,而是它的運(yùn)行環(huán)境。現(xiàn)在,瀏覽器已經(jīng)不能控制一切了,Java作為游戲編程語(yǔ)言的另一個(gè)機(jī)會(huì)到來(lái)了。Java在過(guò)去有一點(diǎn)超前于它的時(shí)代,當(dāng)時(shí)市場(chǎng)的動(dòng)力落后于Java,但是現(xiàn)在Java可以而且已經(jīng)取得成功。
省略
1.2 Java語(yǔ)言的特點(diǎn)
Java引進(jìn)虛擬機(jī)原理,并運(yùn)行于虛擬機(jī),實(shí)現(xiàn)不同平臺(tái)之間的Java接口。使用Java編寫(xiě)的程序能在世界范圍內(nèi)共享。Java的數(shù)據(jù)類(lèi)型與機(jī)器無(wú)關(guān)。
Java的編程類(lèi)似C++,但舍棄了C++的指針對(duì)存儲(chǔ)器地址的直接操作,程序運(yùn)行時(shí),內(nèi)存由操作系統(tǒng)分配,這樣可以避免病毒通過(guò)指針入侵系統(tǒng)。它提供了安全管理器,防止程序的非法訪問(wèn)。
Java建立在TCP/IP網(wǎng)絡(luò)平臺(tái)上,提供了用HTTP和FTP協(xié)議傳送和接收信息的庫(kù)函數(shù),使用其相關(guān)技術(shù)可以十分方便的構(gòu)建分布式應(yīng)用系統(tǒng)。
Java致力與檢查程序在編譯和運(yùn)行時(shí)的錯(cuò)誤,并自動(dòng)回收內(nèi)存,減少了內(nèi)存出錯(cuò)的可能性。Java取消了C語(yǔ)言的結(jié)構(gòu)、指針、#define語(yǔ)句、多重繼承、goto語(yǔ)句、操作符、重載等不易被掌握的特性,提供垃圾收集器自動(dòng)回收不用的內(nèi)存空間。
1.3 系統(tǒng)運(yùn)行環(huán)境及開(kāi)發(fā)軟件:
開(kāi)發(fā)環(huán)境:Windows 7;
(2)開(kāi)發(fā)工具:eclipse;
(3)編程語(yǔ)言:Java語(yǔ)言;
1.4 可行性的分析
可行性研究的目的,就是用最小的代價(jià)在盡可能短的時(shí)間內(nèi)確定問(wèn)題是否能夠解決。要達(dá)到這個(gè)目的,必須分析幾種主要的可能解法的利弊,從而判斷原定的系統(tǒng)規(guī)模和目標(biāo)是否現(xiàn)實(shí),系統(tǒng)完成后所能帶來(lái)的效益是否大到值得投資開(kāi)發(fā)這個(gè)系統(tǒng)的程度。因此,可行性研究實(shí)質(zhì)上是要進(jìn)行一次大大壓縮簡(jiǎn)化了的系統(tǒng)分析和設(shè)計(jì)的過(guò)程,也就是在較高層次上以較抽象的方式進(jìn)行的系統(tǒng)分析和設(shè)計(jì)的過(guò)程。
1.4.1 技術(shù)可行性
本游戲是在Windows 7環(huán)境下開(kāi)發(fā)的,一般的機(jī)器配置就可以了,對(duì)機(jī)器本身沒(méi)有太高的要求,一般當(dāng)前學(xué)校或個(gè)人電腦完全可滿(mǎn)足要求,環(huán)境只需裝上jdk 1.4或以上版本就行了,Java是現(xiàn)在全球最時(shí)髦的開(kāi)發(fā)工具之一,它擁有一套龐大且完善的類(lèi)庫(kù),內(nèi)置了其他語(yǔ)言需要靠庫(kù)甚至是操作系統(tǒng)才能支持的功能,擁有一個(gè)虛擬機(jī)。NeatBeans IDE 5.5是SUN公司開(kāi)發(fā)的Java可視化集成開(kāi)發(fā)工具,是目前最優(yōu)秀的Java集成開(kāi)發(fā)工具之一。
1.4.2 經(jīng)濟(jì)可行性
由于本系統(tǒng)使用到的工具一般機(jī)器都具備,使用環(huán)境也很簡(jiǎn)單,開(kāi)發(fā)成本低,本課題研究的內(nèi)容是涉及網(wǎng)絡(luò)的游戲?qū)?zhàn)。
省略
1.4.3 操作可行性
由于在整個(gè)系統(tǒng)的開(kāi)發(fā)過(guò)程中從操作簡(jiǎn)便、界面美觀、靈活實(shí)用的用戶(hù)要求為出發(fā)點(diǎn),界面設(shè)計(jì)時(shí)充分考慮玩家的感受,界面比較直觀,交互性很好,所以操作起來(lái)簡(jiǎn)單明了。
2、需求分析
所謂系統(tǒng)分析,就是指在整個(gè)系統(tǒng)開(kāi)發(fā)工程中,解決“做什么”的問(wèn)題,把要解決哪些問(wèn)題,滿(mǎn)足用戶(hù)哪些具體的信息需求調(diào)查分析清楚,從邏輯上或是說(shuō)從信息處理的功能需求上提出系統(tǒng)的方案,即邏輯模型,為下一階段進(jìn)行物理方案設(shè)計(jì),解決怎么辦提供依據(jù)。
2.1 用戶(hù)需求分析
超級(jí)瑪麗這款游戲是很多人童年經(jīng)典的回憶,是一種簡(jiǎn)單的大眾的游戲,自從計(jì)算機(jī)實(shí)現(xiàn)以來(lái),深受廣大電腦玩家的喜愛(ài)。并且隨著社會(huì)的快速發(fā)展,人們的生活節(jié)奏越來(lái)越快,人們對(duì)于童年的美好已經(jīng)不愿意僅僅停留在回憶階段。所以利用java語(yǔ)言開(kāi)發(fā)一款超級(jí)瑪麗游戲正是人們迫切需要的。
2.2功能需求分析
本系統(tǒng)主要是完成超級(jí)瑪麗游戲的基本操作。本系統(tǒng)需要滿(mǎn)足以下幾點(diǎn)要求:
(1) 在開(kāi)始界面按空格鍵進(jìn)入游戲。
(2) 利用方向鍵來(lái)控制馬里奧的運(yùn)動(dòng)。
(3) 碰撞檢測(cè):
A.馬里奧在運(yùn)動(dòng)的過(guò)程中如果碰到障礙物則停止運(yùn)動(dòng),在移動(dòng)到懸崖上方是會(huì)掉下去,并失去一條生命。
B.對(duì)于有些敵人,如果馬里奧跳到敵人頭頂上,則敵人消失,否則馬里奧失去一條生命。
(4)馬里奧頂?shù)浇饚艜?huì)增加分?jǐn)?shù),當(dāng)馬里奧失去3條生命時(shí)游戲結(jié)束。
2.3界面設(shè)計(jì)需求分析
方圖片,對(duì)于較大的障礙物分割成多個(gè)60*60的小正方形。
3、系統(tǒng)概要設(shè)計(jì)
3.1系統(tǒng)模塊設(shè)計(jì)
首先在對(duì)于系統(tǒng)的需求進(jìn)行了分析,因?yàn)樵O(shè)計(jì)者的最初是要做一款游戲,所以窗體類(lèi)必不可少。接下來(lái)繼續(xù)分析,游戲中還需要背景類(lèi)、障礙物類(lèi)、敵人類(lèi)、馬里奧類(lèi)這及格類(lèi)。其次為了游戲的流暢以及游戲中圖片調(diào)用的方便,專(zhuān)門(mén)為此再設(shè)計(jì)一個(gè)初始化類(lèi)。
3.1.1窗體類(lèi)
該類(lèi)主要用于存放游戲的場(chǎng)景以及其他各類(lèi),并且實(shí)現(xiàn)KeyListener接口,用于從鍵盤(pán)的按鍵中讀取信息。該類(lèi)中的一些屬性主要包括了用于存放所有場(chǎng)景的list集合 allBG,馬里奧類(lèi) mario,當(dāng)前的場(chǎng)景 nowBG以及其他一些游戲中需要的標(biāo)記等。而且在該類(lèi)中,運(yùn)用雙緩存的技術(shù)使得游戲的流暢度更高,解決了游戲中出現(xiàn)的閃屏問(wèn)題。
Myframe
- allBG:List
- mario:Mario
- nowBG:BackGround
…
- main():void
- paint():void
- keyPressed():void
- kerReleased():void
…
3.1.2初始化類(lèi)
用于存放游戲所需要的所有靜態(tài)文件,在游戲開(kāi)始的時(shí)候?qū)⑺形募?dǎo)入,提高游戲的運(yùn)行速度。并且在該類(lèi)中將所有需要用到的圖片進(jìn)行分類(lèi),分為障礙物類(lèi),馬里奧類(lèi),敵人類(lèi)以及背景圖片。當(dāng)游戲運(yùn)行時(shí)可以直接調(diào)用這些集合中的圖片進(jìn)行遍歷,在調(diào)用的時(shí)候更加方便,而且可以使馬里奧或者敵人在移動(dòng)的時(shí)候產(chǎn)生動(dòng)態(tài)效果。
StaticValue
- allMarioImage:List
- startImage:BufferedImage
… - init():void
…
3.1.3背景類(lèi)
該類(lèi)表示馬里奧及障礙物和敵人所處的場(chǎng)景,并且將障礙物和敵人繪制到場(chǎng)景中。在該類(lèi)中包括用于存放敵人和障礙物的list集合,以及當(dāng)敵人或者障礙物被消滅后用于存放已經(jīng)消失的敵人和障礙物的集合,這樣做是為了在馬里奧死亡時(shí)重置場(chǎng)景所用的。其次在該類(lèi)中還使用了控制敵人移動(dòng)的方法,是為了在程序之初控制敵人靜止,然后在玩家點(diǎn)擊空格以后在使得敵人開(kāi)始移動(dòng)。
BackGround
- bgImage:BufferedImage
- isOver:boolean
- isDown:boolean
- allEnemy:List
- removeEnemy:List
…
- enemyStartMove():void
- reset():void
…
3.1.4馬里奧類(lèi)
用來(lái)控制馬里奧的行動(dòng),并且在該類(lèi)中加入碰撞檢測(cè),判斷馬里奧是否與障礙物或者敵人發(fā)生碰撞。該類(lèi)中的屬性主要定義了馬里奧所在的場(chǎng)景,馬里奧的移動(dòng)和跳躍的速度,以及馬里奧在移動(dòng)過(guò)程中需要顯示的圖片。另外該類(lèi)中還定義了玩家的生命值和所獲得的分?jǐn)?shù)。并且在run()方法中還定義了當(dāng)馬里奧到達(dá)最后一關(guān)的旗子時(shí),玩家將失去對(duì)馬里奧的控制,剩下的由程序控制走到城堡,完整全部游戲。
Mario
- x:int
- y:int
- xmove:int
- ymove;int
- life:int
- isDead:boolean
…
- leftMove():void
- leftStop():void
- jump():void
- down():void
- dead():void
…
3.1.5障礙物類(lèi)
繪制場(chǎng)景中所需要的障礙物,例如地面、磚塊、水管等等。該類(lèi)中的屬性包括了障礙物的坐標(biāo),障礙物所需要顯示的圖片等。并且在該類(lèi)中也定義了障礙物類(lèi)的重置方法,當(dāng)馬里奧死亡時(shí),場(chǎng)景類(lèi)會(huì)調(diào)用該方法。
Obstruction
- x:int
- y:int
- type:int
- starttype:int
- showImage:BufferedImage
…
- reset():void
- setImage():void
…
3.1.6敵人類(lèi)
該類(lèi)中主要設(shè)置了兩種敵人,一種是蘑菇怪,可以被馬里奧踩死,另一種是食人花,不能被踩死。該類(lèi)中的屬性包括了敵人的坐標(biāo),敵人的初始坐標(biāo),需要顯示的圖片,以及敵人的移動(dòng)方向和移動(dòng)范圍等。敵人的初始坐標(biāo)主要是為了當(dāng)敵人執(zhí)行重置方法后將敵人的位置還原。
Enemy
- x:int
- y:int
- startx:int
- starty:int
- showImage:BufferedImage
- upMax:int
- downMax:int
…
- reset():void
- dead():void
…
3.2系統(tǒng)流程設(shè)計(jì):
4、系統(tǒng)詳細(xì)設(shè)計(jì)
4.1 設(shè)計(jì)目標(biāo)
本軟件是針對(duì)超級(jí)瑪麗小游戲的JAVA程序,進(jìn)入游戲后首先按空格鍵開(kāi)始,利用方向鍵來(lái)控制的馬里奧的移動(dòng),同時(shí)檢測(cè)馬里奧與場(chǎng)景中的障礙物和敵人的碰撞,并判斷馬里奧的可移動(dòng)性和馬里奧的生命值。當(dāng)馬里奧通過(guò)最后一個(gè)場(chǎng)景后游戲結(jié)束。
4.2 系統(tǒng)模塊設(shè)計(jì)
本系統(tǒng)共包括6各類(lèi):
4.2.1窗體類(lèi)
該類(lèi)主要用于存放游戲的場(chǎng)景以及其他各類(lèi),并且實(shí)現(xiàn)KeyListener接口,用于從鍵盤(pán)的按鍵中讀取信息。該類(lèi)中的一些屬性主要包括了用于存放所有場(chǎng)景的list集合 allBG,馬里奧類(lèi) mario,當(dāng)前的場(chǎng)景 nowBG以及其他一些游戲中需要的標(biāo)記等。而且在該類(lèi)中,運(yùn)用雙緩存的技術(shù)使得游戲的流暢度更高,解決了游戲中出現(xiàn)的閃屏問(wèn)題。
4.2.2初始化類(lèi)
用于存放游戲所需要的所有靜態(tài)文件,在游戲開(kāi)始的時(shí)候?qū)⑺形募?dǎo)入,提高游戲的運(yùn)行速度。并且在該類(lèi)中將所有需要用到的圖片進(jìn)行分類(lèi),分為障礙物類(lèi),馬里奧類(lèi),敵人類(lèi)以及背景圖片。當(dāng)游戲運(yùn)行時(shí)可以直接調(diào)用這些集合中的圖片進(jìn)行遍歷,在調(diào)用的時(shí)候更加方便,而且可以使馬里奧或者敵人在移動(dòng)的時(shí)候產(chǎn)生動(dòng)態(tài)效果。
4.2.3背景類(lèi)
該類(lèi)表示馬里奧及障礙物和敵人所處的場(chǎng)景,并且將障礙物和敵人繪制到場(chǎng)景中。在該類(lèi)中包括用于存放敵人和障礙物的list集合,以及當(dāng)敵人或者障礙物被消滅后用于存放已經(jīng)消失的敵人和障礙物的集合,這樣做是為了在馬里奧死亡時(shí)重置場(chǎng)景所用的。其次在該類(lèi)中還使用了控制敵人移動(dòng)的方法,是為了在程序之初控制敵人靜止,然后在玩家點(diǎn)擊空格以后在使得敵人開(kāi)始移動(dòng)。并且在第六個(gè)關(guān)卡處設(shè)置了一個(gè)隱形通關(guān)要點(diǎn),只有當(dāng)馬里奧頂?shù)竭@個(gè)隱形磚塊時(shí)才會(huì)出現(xiàn),馬里奧就可以借助這個(gè)磚塊通過(guò)關(guān)卡。
4.2.4馬里奧類(lèi)
用來(lái)控制馬里奧的行動(dòng),并且在該類(lèi)中加入碰撞檢測(cè),判斷馬里奧是否與障礙物或者敵人發(fā)生碰撞。該類(lèi)中的屬性主要定義了馬里奧所在的場(chǎng)景,馬里奧的移動(dòng)和跳躍的速度,以及馬里奧在移動(dòng)過(guò)程中需要顯示的圖片。另外該類(lèi)中還定義了玩家的生命值和所獲得的分?jǐn)?shù)。并且在run()方法中還定義了當(dāng)馬里奧到達(dá)最后一關(guān)的旗子時(shí),玩家將失去對(duì)馬里奧的控制,剩下的由程序控制走到城堡,完整全部游戲。
public class Mario implements Runnable{//坐標(biāo)private int x;private int y;//定義瑪麗奧所在場(chǎng)景private BackGround bg;//加入線程private Thread t = null;為了玩家在游戲過(guò)程中的良好體驗(yàn),那么對(duì)于馬里奧的移動(dòng)速度和跳躍速度就必須要定義好。所以該類(lèi)里面還應(yīng)當(dāng)定義馬里奧的移動(dòng)速度和跳躍速度,其本質(zhì)就是馬里奧在移動(dòng)過(guò)程中坐標(biāo)加減的值。當(dāng)然初始值為零,必須等到馬里奧構(gòu)造的時(shí)候,再將這些屬性賦予相對(duì)應(yīng)的值。在本類(lèi)中還要定義游戲的分?jǐn)?shù)以及馬里奧的生命數(shù),這些都是必不可少的。//移動(dòng)速度private int xmove = 0;//跳躍速度private int ymove = 0;//狀態(tài)private String status;//顯示圖片private BufferedImage showImage;//生命和分?jǐn)?shù)private int score;private int life;在馬里奧這個(gè)類(lèi)中,還要定義馬里奧的移動(dòng)和跳躍方法,以便玩家在按下方向鍵后調(diào)用這些方法,來(lái)達(dá)到控制馬里奧的移動(dòng)。下面是馬里奧向左移動(dòng)的方法,其他方法同理。public void leftMove(){//移動(dòng)速度xmove = -5;//改變狀態(tài)//如果當(dāng)前已經(jīng)是跳躍,應(yīng)該保持原有狀態(tài),不能再改變if(this.status.indexOf("jumping") != -1){this.status = "left-jumping";}else{this.status = "left-moving";}}......在定義馬里奧的跳躍方法的時(shí)候,不單單定義一個(gè)方法就行,而且還要判斷馬里奧的狀態(tài)。如果馬里奧是在地面或者是在障礙物的上方,那么馬里奧可以進(jìn)行跳躍,如果馬里奧處于空中,那么馬里奧就不可以繼續(xù)跳躍。public void jump(){ //判斷馬里奧是否可以進(jìn)行跳躍if(this.status.indexOf("jumping") == -1){if(this.status.indexOf("left") != -1){this.status = "left-jumping";}else{this.status = "right-jumping";}ymove = -5;upTime = 36;}}接下來(lái)就要寫(xiě)馬里奧中的run()方法了,這個(gè)方法中的內(nèi)容相對(duì)來(lái)說(shuō)比較麻煩,因?yàn)橐谶@個(gè)方法中對(duì)馬里奧和障礙物或者敵人之間進(jìn)行邏輯判斷,即所謂的碰撞檢測(cè)。首先在這個(gè)類(lèi)中對(duì)馬里奧是否處于最后一個(gè)場(chǎng)景進(jìn)行判斷,如果馬里奧處于最后一個(gè)場(chǎng)景,并且坐標(biāo)大于520,那么說(shuō)明馬里奧已經(jīng)撞到的旗桿,這個(gè)時(shí)候馬里奧將不會(huì)由玩家控制。并且同時(shí)調(diào)用旗子的移動(dòng)方法,使旗子進(jìn)行下落,當(dāng)旗子下落完畢后給馬里奧一個(gè)標(biāo)記,馬里奧開(kāi)始移動(dòng)到城堡。當(dāng)馬里奧的坐標(biāo)大于780,即馬里奧到達(dá)城堡的門(mén)口的時(shí)候,這個(gè)時(shí)候游戲結(jié)束。public void run() {while(true){//判斷是否與障礙物碰撞//定義標(biāo)記if(this.bg.isFlag() && this.x >= 520){this.bg.setOver(true);if(this.bg.isDown()){//降旗后瑪麗奧開(kāi)始移this.status = "right-moving";if(this.x < 580){//向右this.x += 5;}if(this.x >= 780){//游戲結(jié)束this.setClear(true);}然后對(duì)當(dāng)前馬里奧所處的場(chǎng)景中的所有障礙物進(jìn)行遍歷,獲取到所有障礙物的坐標(biāo),通過(guò)障礙物的坐標(biāo)和馬里奧的坐標(biāo)的之間的關(guān)系的判斷,來(lái)決定馬里奧是否與障礙物發(fā)生了碰撞,并且通過(guò)判斷的結(jié)果來(lái)對(duì)馬里奧和障礙物的狀態(tài)進(jìn)行相應(yīng)的變化。 for(int i=0;i<this.bg.getAllObstruction().size();i++){Obstruction ob = this.bg.getAllObstruction().get(i);//不能向右移動(dòng)if(ob.getX()==this.x+60&&(ob.getY()+50>this.y&&ob.getY()-50<this.y)){if(ob.getType() != 3){canRight = false;}}......當(dāng)馬里奧撞到障礙物的時(shí)候,那么就要根據(jù)障礙物的類(lèi)型進(jìn)行接下來(lái)的判斷,如果是磚塊或者是問(wèn)號(hào)的話(huà),那么障礙物消失,馬里奧被彈回,即馬里奧的狀態(tài)由上升狀態(tài)變?yōu)橄侣錉顟B(tài),并且將消失掉的障礙物放入相對(duì)應(yīng)的消失的List集合當(dāng)中。如果障礙物的類(lèi)型為其他,比如說(shuō)是石頭的話(huà),那么障礙物不變,馬里奧直接被彈回。//判斷瑪麗奧跳躍時(shí)是否撞到障礙物if(ob.getY()==this.y-60&&(ob.getX()+50>this.x && ob.getX()-50<this.x)){//如果是磚塊if(ob.getType()==0){//移除磚塊this.bg.getAllObstruction().remove(ob);//保存到移除的障礙物中this.bg.getRemoveObstruction().add(ob);}為了游戲的可玩性,將會(huì)在游戲中加入一個(gè)隱藏的陷阱,或者是隱藏的通關(guān)點(diǎn)。這個(gè)隱藏的障礙物在游戲進(jìn)行的時(shí)候不會(huì)顯示出來(lái),當(dāng)然馬里奧從他的左右兩邊過(guò)去的時(shí)候也不會(huì)觸發(fā)這個(gè)隱藏的障礙物,必須是從下方撞到這個(gè)障礙物時(shí)才會(huì)顯示出來(lái)。同時(shí)馬里奧由上升狀態(tài)變?yōu)橄侣錉顟B(tài)。而且他和磚塊障礙物相同,被頂?shù)胶髸?huì)變?yōu)槭^,改變類(lèi)型。//如果是問(wèn)號(hào)||隱藏的磚塊if((ob.getType()==4 || ob.getType()==3) && upTime > 0){ob.setType(2);ob.setImage();}//馬里奧開(kāi)始下落upTime = 0; 在游戲中敵人大致可以分為兩類(lèi)。一類(lèi)是蘑菇怪,這種敵人是可以被殺死的,當(dāng)馬里奧從蘑菇怪的正上方踩到蘑菇怪時(shí),那么蘑菇怪就會(huì)被消滅,同時(shí)馬里奧向上跳起一小段距離。而消失掉的蘑菇怪就會(huì)被放到消失掉的敵人的List集合中,等到重置的時(shí)候在調(diào)用出來(lái)。但是如果馬里奧從蘑菇怪的左右兩邊碰到蘑菇怪的話(huà)就會(huì)失去一條生命,并且重置游戲。第二類(lèi)是食人花,這種敵人不會(huì)被馬里奧消滅掉,不論馬里奧從哪個(gè)方向去碰撞食人花,食人花都不會(huì)消失,而且如果馬里奧碰到了食人花,自身還會(huì)失去一條生命,并且游戲重置,當(dāng)然前提是馬里奧沒(méi)有失去所有的生命值,否則的話(huà)游戲就結(jié)束。 首先馬里奧對(duì)于所有的敵人,如果從左右兩邊碰撞到敵人,那么馬里奧死亡,失去一條生命,游戲重置。//對(duì)敵人的判斷for(int i=0;i<this.bg.getAllEnemy().size();i++){Enemy e = this.bg.getAllEnemy().get(i);//對(duì)于所有的敵人都適用if((e.getX()+50>this.x && e.getX()-50<this.x) && (e.getY()+60>this.y && e.getY()-60<this.y)){//瑪麗奧死亡this.dead();}//這里開(kāi)始區(qū)分?jǐn)橙说念?lèi)別,對(duì)于不同的敵人做出不同的反應(yīng)if(e.getY()==this.y+60 && (e.getX()+60>this.x && e.getX()-60<this.x)){if(e.getType() == 1){e.dead();this.upTime = 10;this.ymove = -5;}else if(e.getType() == 2){this.dead();}}4.2.5障礙物類(lèi)
繪制場(chǎng)景中所需要的障礙物,例如地面、磚塊、水管等等。該類(lèi)中的屬性包括了障礙物的坐標(biāo),障礙物所需要顯示的圖片等。并且在該類(lèi)中也定義了障礙物類(lèi)的重置方法,當(dāng)馬里奧死亡時(shí),場(chǎng)景類(lèi)會(huì)調(diào)用該方法。
4.2.6敵人類(lèi)
該類(lèi)中主要設(shè)置了兩種敵人,一種是蘑菇怪,可以被馬里奧踩死,另一種是食人花,不能被踩死。該類(lèi)中的屬性包括了敵人的坐標(biāo),敵人的初始坐標(biāo),需要顯示的圖片,以及敵人的移動(dòng)方向和移動(dòng)范圍等。敵人的初始坐標(biāo)主要是為了當(dāng)敵人執(zhí)行重置方法后將敵人的位置還原。
5、系統(tǒng)的實(shí)現(xiàn)
5.1游戲開(kāi)發(fā)所需要的圖片
5.1.1馬里奧的所有圖片
這組圖片中包含了馬里奧的移動(dòng),跳躍以及死亡的圖片:
5.1.2游戲中障礙物的圖片
這組圖片中包含了游戲中的各種障礙物,以及最后通過(guò)關(guān)卡的旗幟圖片還有設(shè)置陷阱的隱形圖片:
A.地面及普通障礙物圖片
B.用于設(shè)置陷阱的隱形圖片
C.水管類(lèi)圖片
D.最后場(chǎng)景中的旗幟圖片
5.1.3游戲中怪物的圖片
這組圖片中包含了游戲中所有的敵人圖片,以及敵人被消滅時(shí)的圖片:
A.食人花的圖片
B蘑菇怪的圖片以及被消滅時(shí)的圖片.
C.烏龜?shù)膱D片以及被消滅時(shí)的圖片
5.1.4游戲中的背景圖片
這組圖片中有一張游戲中的背景圖片(圖5.1)和一張馬里奧通關(guān)時(shí)的最后一關(guān)的背景圖片(圖5.2):
圖5.1
圖5.2
5.1.5游戲開(kāi)始時(shí)的圖片
在游戲的最開(kāi)始會(huì)顯示該圖片(圖5.3),然后玩家按空格鍵開(kāi)始游戲,之后游戲才正式開(kāi)始運(yùn)行。
圖5.3
5.2游戲設(shè)計(jì)的界面
5.2.1 游戲邏輯展示
這一組圖片中包括了一些系統(tǒng)中的邏輯圖片,如馬里奧的控制移動(dòng)示例圖片(圖5.4),玩家通過(guò)方向鍵控制馬里奧的移動(dòng)、跳躍等功能;馬里奧與障礙物進(jìn)行碰撞之后的效果圖片(圖5.5),這張圖片中顯示了馬里奧再與障礙物碰撞后,問(wèn)號(hào)會(huì)消失變成石頭,而且磚塊會(huì)被撞碎;玩家控制游戲開(kāi)始的圖片(圖5.6),游戲打開(kāi)后并不會(huì)立即運(yùn)行,必須等到玩家按空格鍵啟動(dòng)游戲后游戲才會(huì)正式開(kāi)始;當(dāng)馬里奧失去所有的生命以后,游戲結(jié)束(圖5.7);如果馬里奧順利通過(guò)所有關(guān)卡,那么游戲同樣結(jié)束(圖5.8)。
圖5.4
圖5.5
圖5.6
圖5.7
圖5.8
5.2.1 游戲邏輯展示
這一組圖片中主要對(duì)游戲的關(guān)卡進(jìn)行展示,其中包括第一關(guān)(圖5.9),馬里奧順利通過(guò)第一管來(lái)到第二關(guān)(圖5.10),第三關(guān)的場(chǎng)景(圖5.11),第四關(guān)的大懸崖場(chǎng)景(圖5.12),第五關(guān)的場(chǎng)景借鑒了魂斗羅(圖5.13),第六關(guān)的高墻(圖5.14),在這一個(gè)關(guān)卡中為了提升游戲的可玩性,加了一個(gè)隱藏的過(guò)關(guān)要點(diǎn),只有找到這個(gè)要點(diǎn)才能通過(guò)(圖5.15),第七關(guān)也是最后一關(guān)的場(chǎng)景(圖5.16)。
圖5.9
圖5.10
圖5.11
圖5.12
圖5.13
圖5.14
圖5.15
圖5.16
6、系統(tǒng)測(cè)試
6.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)根據(jù)開(kāi)發(fā)各階段的需求、設(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)遵循以基本原則。
6.2 測(cè)試過(guò)程
省略
6.3 測(cè)試結(jié)果
程序運(yùn)行正常,沒(méi)有發(fā)現(xiàn)什么太大的錯(cuò)誤。
7、總結(jié)與展望
7.1 總結(jié)
省略
7.2 設(shè)計(jì)中的不足之處
省略
7.3 展望
省略
致 謝
省略
外文原文
省略
外文翻譯
省略
5、源碼下載:
本項(xiàng)目源碼及論文如下,有需要的朋友可以點(diǎn)擊進(jìn)行下載。如果鏈接失效可點(diǎn)擊下方卡片掃碼自助下載。
| 本項(xiàng)目源碼 | 基于java+GUL的超級(jí)瑪麗游戲GUL設(shè)計(jì)與實(shí)現(xiàn)(源碼+文檔)_JAVA_GUL_超級(jí)瑪麗游戲GUL.zip |
總結(jié)
以上是生活随笔為你收集整理的【java毕业设计】基于java+GUL的超级玛丽游戏GUL设计与实现(毕业论文+程序源码)——超级玛丽游戏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 网络互联复习(二) 精简版
- 下一篇: 单片机外围电路设计之五:三极管