【基于Java的超級瑪麗游戲設(shè)計(jì)與實(shí)現(xiàn)8600字(論文)】_第1頁
【基于Java的超級瑪麗游戲設(shè)計(jì)與實(shí)現(xiàn)8600字(論文)】_第2頁
【基于Java的超級瑪麗游戲設(shè)計(jì)與實(shí)現(xiàn)8600字(論文)】_第3頁
【基于Java的超級瑪麗游戲設(shè)計(jì)與實(shí)現(xiàn)8600字(論文)】_第4頁
【基于Java的超級瑪麗游戲設(shè)計(jì)與實(shí)現(xiàn)8600字(論文)】_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

緒論1.1課題背景隨著互聯(lián)網(wǎng)在當(dāng)今全球互聯(lián)網(wǎng)產(chǎn)業(yè)中的快速發(fā)展,越來越多的用戶和設(shè)備連接到網(wǎng)絡(luò),并且在網(wǎng)絡(luò)上有著多種使用方式,游戲娛樂便是其中的一種,游戲作為緩解人們生活壓力與節(jié)奏的一種嶄新方式受到越來越多包括不同年齡層人們的歡迎。計(jì)算機(jī)技術(shù)為我們的娛樂創(chuàng)造了嶄新的窗口。java最初的目的并不是用于開發(fā)游戲,在過去,運(yùn)行環(huán)境,java類和瀏覽器等決定了java應(yīng)用程序的類型,但隨著時(shí)代和技術(shù)的發(fā)展,用JAVA開發(fā)游戲已經(jīng)成為一種可能。1.2目的和意義隨著經(jīng)濟(jì)社會(huì)的更新和計(jì)算機(jī)信息技術(shù)的不斷提高,計(jì)算機(jī)進(jìn)行科學(xué)日漸成熟。該項(xiàng)目開發(fā)的意義在于當(dāng)今日益變化的社會(huì)形勢中面對越來越多亞文化與新事物對傳統(tǒng)娛樂行業(yè)的沖擊。使用高級程序語言去編寫游戲已經(jīng)成為當(dāng)代社會(huì)的剛需1.3java語言的特點(diǎn)1)平臺無關(guān)性

用Java編寫的程序不僅在國內(nèi)也可以在其他國家使用并且分享。Java可以不受計(jì)算機(jī)網(wǎng)絡(luò)硬件和操作管理系統(tǒng)的約束而在任意計(jì)算機(jī)技術(shù)環(huán)境下正常工作運(yùn)行。Java語言可以在虛擬機(jī)上運(yùn)行,利用虛擬機(jī)的原理實(shí)現(xiàn)各平臺之間的接口。2.)安全性

如果從java的數(shù)據(jù)來看,它的安全性是非常高的,因?yàn)樗且粋€(gè)完整的數(shù)據(jù)結(jié)構(gòu),java的安全性毋庸置疑。編譯時(shí),檢查Java語言和語義以與相應(yīng)的值相對應(yīng),并編譯和生成Java類。在運(yùn)行時(shí),必須在類加載器中加載Java類。當(dāng)您在網(wǎng)絡(luò)上使用Java類時(shí),權(quán)限設(shè)置是為了確保被訪問用戶的安全性。2可行性分析可行性研究的目的是確定能否在最短時(shí)間內(nèi)以最低成本解決問題。為了實(shí)現(xiàn)此目標(biāo),分析一些可能的主要解決方案的優(yōu)缺點(diǎn)是十分必要的,并投資于原始系統(tǒng)的大小和目標(biāo)以及系統(tǒng)完成后的收益。需要確定是否值得。開發(fā)該系統(tǒng)。因此,可行性研究基本上是一個(gè)顯著壓縮和簡化了系統(tǒng)的分析和設(shè)計(jì)過程。這是系統(tǒng)分析和設(shè)計(jì)過程,以更高的層次和更抽象的方式執(zhí)行。2.1技術(shù)可行性本游戲的對開發(fā)的環(huán)境配置開發(fā)要求極低,在WIN7以上的任意版本,一般的電腦配置即可滿足,對電腦本身沒有什么需求,當(dāng)前時(shí)代使用的主流辦公電腦或者學(xué)校電腦即可滿足需求,java作為現(xiàn)在使用最多的開發(fā)工具,龐大并且完善的類庫是java的一大優(yōu)勢,

eclipse最初是由IBM公司進(jìn)行開發(fā)的替代傳統(tǒng)商業(yè)管理軟件VisualAgeforJava的下一代IDE開發(fā)軟件,在目前得到了廣泛的應(yīng)用2.2操作可行性整個(gè)操作系統(tǒng)用java編程語言開發(fā),擁有良好的人機(jī)交互界面,界面布局以及設(shè)計(jì)充滿人性化,充分考慮玩家體驗(yàn)以及用戶交互,以用戶需求為著手點(diǎn)進(jìn)行的開發(fā)使得操作簡單明了。3系統(tǒng)分析所謂系統(tǒng)分析,系統(tǒng)分析旨在研究特定系統(tǒng)結(jié)構(gòu)中各個(gè)部分(子系統(tǒng))的交互作用,系統(tǒng)的外部接口和接口以及系統(tǒng)的整體行為,功能和局限性,以便為將來的更改及相關(guān)內(nèi)容提供參考。系統(tǒng)的決策和依據(jù)。系統(tǒng)分析的常見目標(biāo)之一是改善決策過程和系統(tǒng)性能,以實(shí)現(xiàn)整體最優(yōu)系統(tǒng)。3.1用戶需求分析隨著社會(huì)不斷變遷發(fā)展,電子游戲已經(jīng)成為人們?nèi)粘I願(yuàn)蕵返囊淮笾匾问剑壃旣?,想必很多人都玩過至少聽聞過,受到各個(gè)年齡段人們的喜愛,隨著生活節(jié)奏的越來越快,我們不能讓過去的存在停留在過去,而應(yīng)該讓它用新的技術(shù)面貌在新時(shí)代復(fù)生,因此使用java開發(fā)語言去開發(fā)超級瑪麗游戲是符合時(shí)代的3.2操作功能需求分析本系統(tǒng)主要是通過完成一個(gè)超級瑪麗游戲的基本信息操作。系統(tǒng)需要滿足以下要求:(1)在游戲初始界面按space鍵進(jìn)入游戲。(2)利用鍵盤上下左右方向鍵來操作游戲人物的運(yùn)動(dòng)。(3)碰撞檢測:A.游戲人物在移動(dòng)中如果碰到磚塊則進(jìn)入停止?fàn)顟B(tài),在移動(dòng)到懸崖上方會(huì)判定摔下,生命減一。B.對于有些enemy,如果游戲人物跳到enemy的頭頂上,則判定enemy從游戲界面消失(死亡),否則游戲人物生命減一。游戲人物向上跳躍觸碰金幣會(huì)增加point,當(dāng)游戲人物的生命為0時(shí)判定游戲結(jié)束。3.3游戲界面設(shè)計(jì)需求分析1)選擇高清真彩色Q版圖片,使得游戲畫面平易近人。3)使用900*600分辨率顯示游戲初始界面,使用60*60像素的矩形表示游戲人物以及障礙物,使用多個(gè)60*60的矩形圖片來表示巨大的障礙物和敵人2)游戲初始界面大小與初始顯示位置為固定值

4系統(tǒng)設(shè)計(jì)本系統(tǒng)是使用java開發(fā)的游戲,首先游戲界面需要?jiǎng)?chuàng)建一個(gè)窗口類,在對游戲內(nèi)容進(jìn)行分析,游戲還需要敵人類,障礙物類,馬里奧類等本游戲主要利用鍵盤上下左右方向鍵來操作游戲人物的運(yùn)動(dòng),以及碰撞檢測來進(jìn)行游戲4.1系統(tǒng)流程設(shè)計(jì)結(jié)構(gòu)圖系統(tǒng)流程設(shè)計(jì)結(jié)構(gòu)圖中,游戲流程被分為多個(gè)更細(xì)化的子模塊,其中一個(gè)是判斷碰撞,在此子模塊中主要實(shí)現(xiàn)判斷是否碰撞場景物體;另一個(gè)是是否為磚塊,在這個(gè)子模塊中它主要實(shí)現(xiàn)判斷障礙物類型,另一個(gè)是生命判斷模塊,這個(gè)子模塊用來判斷是否丟失生命。圖4-1游戲流程功能圖大概地描述了系統(tǒng)流程設(shè)計(jì)結(jié)構(gòu)圖的構(gòu)成。

按住space鍵進(jìn)入游戲按住space鍵進(jìn)入游戲使用上下左右控制人物移動(dòng)使用上下左右控制人物移動(dòng)碰撞檢測碰撞檢測是否扣血是否為磚塊是否扣血是否為磚塊是否否是阻止移動(dòng)阻止移動(dòng)磚塊消失消滅敵人繼續(xù)游戲是否死亡阻止移動(dòng)消滅敵人繼續(xù)游戲是否死亡阻止移動(dòng)繼續(xù)游戲失去一條生命,重置游戲是否繼續(xù)游戲失去一條生命,重置游戲GGameover圖4-1游戲流程功能圖4.2系統(tǒng)模塊設(shè)計(jì)本游戲一共包括6個(gè)模塊即:窗體類,初始化類,障礙物類,敵人類,背景類,馬里奧類。4.2.1窗體類游戲的背景圖片以及其他各類都在窗口類里得到體現(xiàn),通過撰寫KeyListener接口,可以獲得輸入設(shè)備的信息。創(chuàng)建該類的目的是為了使用集合來存放場景,以及一些在游戲中的事實(shí)場景NB,以及游戲中的標(biāo)記字符。并且解決了游戲里屏幕會(huì)突然消失的問題,運(yùn)用了隨著計(jì)算機(jī)發(fā)展在JAVA中的doublecache技術(shù)。(1)首先我們創(chuàng)建一個(gè)類命名為Myframe,并且在該類中創(chuàng)建2個(gè)接口,一個(gè)為runnable接口另一個(gè)為keylisten接口。publicclassMyFrameextendsJFrameimplementsKeyListener,Runnable{ }(2)接著我們再定義一個(gè)集合名字取為list,List的作用是用于存放背景圖片,因此在list里設(shè)置一個(gè)類叫background。接下來我們需要定義游戲人物類,取名mario類,就是我們的游戲人物。此外游戲里的背景是動(dòng)態(tài)變化的,因此我們還需要設(shè)置一個(gè)類叫background用來保存當(dāng)前場景,它默認(rèn)應(yīng)該是個(gè)空值。為了游戲的流暢,我們還應(yīng)該注意游戲線程的問題,因此我們還要?jiǎng)?chuàng)建一個(gè)類取名為Thread。privateList<BackGround>allBG=newArrayList<BackGround>(); privateMariomario=null; privateBackGroundnowBG=null; privateThreadt=null; privatebooleanisStart=false; publicstaticvoidmain(String[]args){ newMyFrame();(3)在進(jìn)行窗口類的編程中,窗體類首先應(yīng)該完成它標(biāo)題的制作,并且要根據(jù)屏幕設(shè)置其大小,并且窗口化運(yùn)行的時(shí)候必須要考慮人的視覺感官,應(yīng)當(dāng)讓窗口類處于屏幕的居中位置這樣符合人的感官,在運(yùn)行的時(shí)候更需有藝術(shù)感。其次,應(yīng)對不同人的需求還要設(shè)置一個(gè)拉伸窗口,這樣玩家可以隨意拉伸到自己喜愛的大小,開發(fā)者通過具體分析,深思熟慮而寫出的界面,應(yīng)該設(shè)置界面不可被隨意拉伸,如果設(shè)計(jì)可隨意拉伸,則可能使游戲畫面扁平不宜觀看。(1)標(biāo)題設(shè)置title標(biāo)題為瑪麗奧(2)窗口大小設(shè)置setsize為900,600為窗口大小并設(shè)置Toolkit.getdefaultTookkit().getScreenSize()方法獲取顯示器屏幕大小并使Myframe窗口居中顯示設(shè)置setResizable方法使窗口大小不可改變(4)圖片和閃屏問題解決之后,我們就應(yīng)該開始游戲操作方面的設(shè)置了,我們使用keylistener接口去解決這個(gè)問題,我們操控馬里奧使用的是上下左右四個(gè)方向鍵,38對應(yīng)了pageup,37對應(yīng)了左,右使用38來對應(yīng),并且我們之前系統(tǒng)流程中還提到了游戲開始需要space鍵因此需要設(shè)置打開界面后游戲不會(huì)直接運(yùn)行需要按space鍵才能運(yùn)行(1)游戲人物的移動(dòng)控制 if(e.getKeyCode()==39){ this.mario.rightMove(); } if(e.getKeyCode()==37){ this.mario.leftMove(); } (2)游戲人物的跳躍控制 if(e.getKeyCode()==38){ this.mario.jump(); }還需要對馬里奧的停止就行設(shè)置(1)控制瑪麗奧的停止if(e.getKeyCode()==39){ this.mario.rightStop();; }if(e.getKeyCode()==37){ this.mario.leftStop();; }(5)在上面的工作結(jié)束后,我們需要對邏輯模塊進(jìn)行設(shè)計(jì)了,我們需要重寫RUN方法,判定游戲人物死亡時(shí)應(yīng)該用窗口來判定 或者游戲結(jié)束時(shí)也應(yīng)該通過窗口宣布結(jié)束if(this.mario.isDead()){JOptionPane.showMessageDialog(this,"游戲結(jié)束");System.exit(0); }if(this.mario.isClear()){JOptionPane.showMessageDialog(this,"恭喜游戲通關(guān)!");System.exit(0); }4.2.2初始化類(1)游戲?qū)儆谲浖囊环N,要發(fā)生硬盤和內(nèi)存的讀寫,因此我們創(chuàng)建了一個(gè)初始化類用來緩存游戲需要的圖片等文件,將敵人,游戲人物,背景等所有圖片加入緩存中,這樣可以使游戲順暢,在游戲開始時(shí)就不會(huì)再卡頓了。我們首先要在類里定義一個(gè)集合用來存放游戲人物的圖片,包括游戲人物的所有動(dòng)作等,我們將它命名為BufferedImage,這樣程序就可以調(diào)用人物移動(dòng)圖片從而形成一個(gè)動(dòng)作效果。接著我們需要再類里存放敵人的圖片,障礙物的圖片,以及背景的圖片,如上面描述的一樣,通過遍歷這些圖片,敵人,背景等也可以形成一個(gè)動(dòng)態(tài)的效果,注意的是他們的默認(rèn)值都必須為null。定義BufferedImage變量startImage,endImage,bgImage為空值.在完成圖片存放的設(shè)定后,我們要開始下一步初始化了。我們要?jiǎng)?chuàng)建一個(gè)init方法,它的作用就是將所有圖片導(dǎo)入到之前我們設(shè)定的那些類里,我們可以使用多個(gè)循環(huán)語句去將圖片放入。4.2.3背景類(1)背景類,故名思意就是用來存放背景的一類,它包括了游戲人物,敵人,將上述的元素融入背景之中,我們要在背景類里定義一個(gè)集合用來加載游戲中的障礙方塊以及敵人,還要?jiǎng)?chuàng)建一個(gè)集合用來存放已經(jīng)被游戲人物打敗的敵人和通過的障礙圖片。并且還定義了一個(gè)方法用來控制敵人行動(dòng),還設(shè)置了第六關(guān)一個(gè)隱藏磚塊。 (1)當(dāng)前場景圖片定義被緩存圖片bgimage為空值,存放當(dāng)前場景圖片 (2)場景順序 定義int值sort用來表示場景順序 (3)是否為最后的場景 定義布爾值flag用來判定場景 (4)游戲結(jié)束標(biāo)記 定義布爾值isover判斷游戲是否結(jié)束 (5)定義降旗結(jié)束 定義布爾值isDown判斷降旗是否結(jié)束(2)為了順利進(jìn)行游戲,不使得游戲場景錯(cuò)亂,我們還要給背景設(shè)定編號,游戲背景需要按照編號進(jìn)行變換,并且我還在游戲里設(shè)定了當(dāng)玩家通關(guān)時(shí),人物將自己走到城堡中。所以在這里用布爾變量設(shè)置了用來判斷此時(shí)的場景是否和最后一個(gè)場景一致的代碼,為了判定游戲人物死亡或者游戲已經(jīng)通關(guān),還要設(shè)置一個(gè)布爾變量用來判斷。當(dāng)玩家通關(guān)時(shí),人物將自己走到城堡中,在這個(gè)過程中是不受到玩家操控的,同時(shí)會(huì)播放旗子的動(dòng)畫,在動(dòng)畫結(jié)束后,你才可以繼續(xù)操控你的游戲人物,因此我們還需要定義一個(gè)bool變量用來判斷人物的移動(dòng)時(shí)機(jī)在游戲人物只是失去生命值而不是死亡時(shí),應(yīng)當(dāng)讓游戲變回一開始的初始界面,reset所有的人物,障礙物因此我們既要設(shè)置一個(gè)集合用來保存當(dāng)前場景的物體,也要設(shè)定一個(gè)集合來保存已經(jīng)經(jīng)過的場景和打敗的敵人。(1)用集合保存敵人定義一個(gè)動(dòng)態(tài)數(shù)組集合Enemy保存敵人(2)用集合保存障礙物定義一個(gè)動(dòng)態(tài)數(shù)組集合Obstruction保存敵人(3)被消滅的敵人定義一個(gè)動(dòng)態(tài)數(shù)組集合removeEnemy保存被消滅的敵人(3)在進(jìn)入游戲界面時(shí),我們不能操控人物,并且敵人應(yīng)該處于static狀態(tài),當(dāng)我們按住space鍵開始之后才會(huì)使游戲開始,因此我們需要定義一個(gè)操控?cái)橙诵袆?dòng)的方法enemyStartMove()來實(shí)現(xiàn)我們的目的。publicvoidenemyStartMove(){for(inti=0;i<this.allEnemy.size();i++){this.allEnemy.get(i).startMove(); }(4)前面提到,應(yīng)當(dāng)讓游戲變回一開始的初始界面,reset所有的人物,充值所有的一切,包括游戲人物,障礙物以及敵人。為了實(shí)現(xiàn)這個(gè)目的,那我們需要再創(chuàng)建一個(gè)方法名為resetOver()用來使所用的場景和人物重置,并且我們之前設(shè)置了一個(gè)方法用來存放已經(jīng)經(jīng)過的障礙和打敗的敵人,我們就可以把這個(gè)方法調(diào)入原來的集合,就可以完成重置的目的 (1)重置方法,重置障礙物和敵人 publicvoidresetOver(){ (2)將移除的障礙物和敵人還原 this.allEnemy_1.addAll(this.removeEnemy); this.allObstruction_1.addAll(this.removeObstruction); (3)調(diào)用障礙物和敵人的重置方法 for(inti=0;i<this.allEnemy_1.size();i++){ this.allEnemy_1.get(i).reset(); } for(inti=0;i<this.allObstruction_1.size();i++){ this.allObstruction_1.get(i).reset(); } }4.2.4馬里奧類(1)馬里奧類,也就是我們用來控制游戲人物的類,需要完成一個(gè)邏輯檢測判斷人物到底是否和敵人或者障礙物完成了互動(dòng),該類中的屬性主要定義了游戲人物當(dāng)前所處場景,游戲人物動(dòng)作的速度,以及游戲人物的動(dòng)作圖片。另外該類中還定義了人物的生命值和現(xiàn)在的的point。并且在run方法中還定義了人物將自己走到城堡中,在這個(gè)過程中是不受到玩家操控的,同時(shí)會(huì)播放旗子的動(dòng)畫,結(jié)束后游戲結(jié)束。進(jìn)行游戲時(shí),我們需要使用鍵盤操控人物的移動(dòng),跳躍等等,為了完成這些動(dòng)作我們要定義兩個(gè)int值來表示二維坐標(biāo),實(shí)現(xiàn)runnable接口,并且還要用方法描述動(dòng)作。(1)坐標(biāo)定義int值x表示X軸坐標(biāo)定義int值y表示Y軸坐標(biāo)(2)定義游戲人物的所在場景定義Background值bg為場景變量(3)線程定義線程t為空線程(2)在游戲進(jìn)行的過程中為了用戶的正常操作,我們要對游戲人物的動(dòng)作速度進(jìn)行設(shè)置,其實(shí)就是人物移動(dòng)時(shí)對其二維坐標(biāo)產(chǎn)生的函數(shù)作用,它的初始值也要設(shè)置初始為0,并且還要定義方法來實(shí)現(xiàn)游戲point的加減和人物的生命值。(1)移動(dòng)速度定義int值xmove初始值為0表示X軸的移動(dòng)速度(2)跳躍速度定義int值ymove初始值為0表示Y軸的移動(dòng)速度(3)狀態(tài)定義字符變量status表示人物狀態(tài)(4)生命和分?jǐn)?shù)定義int值score表示分?jǐn)?shù)定義int值life表示生命值(3)在人物運(yùn)動(dòng)的過程中,假設(shè)人物按住上方向鍵跳躍到空中,我們還需要判斷游戲人物現(xiàn)在是在什么狀態(tài)下。 publicvoidjumpover(){ if(this.status.indexOf("jumping_1")==-1){ if(this.status.indexOf("left_1")!=-1){ this.status="left-jumpingover"; }else{ this.status="right-jumpingover"; } Ymove_over=-10; upTime_over=18; } }(4)接著我們需要對碰撞邏輯檢測進(jìn)行編寫,也就是重寫run方法,首先我們用當(dāng)前背景的下標(biāo)來判斷是否處于最后,如果游戲人物符合此情況并且X軸大于520時(shí),說明游戲人物已到最后關(guān)卡。這個(gè)時(shí)候人物將自己走到城堡中,在這個(gè)過程中是不受到玩家操控的,同時(shí)會(huì)播放旗子的動(dòng)畫,當(dāng)人物X軸大于780的時(shí)候,即可判定游戲結(jié)束。 在游戲人物和障礙物完成交互的瞬間,要根據(jù)障礙物的類型給出瞬時(shí)的反饋,倘若障礙物的類型為磚塊,那么顯示障礙物消失,游戲人物回到之前的位置,倘若障礙物的類型為問號,那么顯示障礙物消失,游戲人物回到之前的位置,并且人物的狀態(tài)發(fā)生改變,并且將由于動(dòng)作交互消失的障礙物放入之前專門定義的集合中去。倘若障礙物的類型為其他,那么顯示障礙物不變,游戲人物回到之前的位置(5)在游戲里的敵人第一種為蘑菇怪,這種怪物會(huì)左右移動(dòng),當(dāng)我們操控人物跳到蘑菇怪的頭頂上時(shí)判定它死亡并且將它的圖片放入我們之前設(shè)置的集合之中,等到reset時(shí)就可以重新使用,第二種敵人是食人花,這種敵人不會(huì)主動(dòng)攻擊游戲人物只有游戲人物主動(dòng)碰到它時(shí),直接算游戲人物死亡游戲人物在碰到蘑菇怪時(shí)沒有跳起而是直接碰到時(shí)算死亡,食人花碰到就算死亡。 if(e.getY()==this.y+60&&(e.getX()+60>this.x&&e.getX()-60<this.x)){ if(e.getType()==1){ e.dead(); this.upTime=5; this.ymove=-10; 敵人死亡,增加分?jǐn)?shù) score+=10; }elseif(e.getType()==2){ this.dead(); } 4.2.5障礙物類(1)障礙物類里面包括了存放障礙物所需要的圖片,并且將人物死亡,reset時(shí)所有的障礙物也會(huì)跟著重置,也就是說要給障礙物也設(shè)置一個(gè)reset方法。同時(shí)和人物一樣障礙物也有其二維坐標(biāo)下面是對障礙物二維坐標(biāo)的定義以及用runnable接口實(shí)現(xiàn)旗子的運(yùn)動(dòng),以及線程。當(dāng)游戲人物觸碰到障礙物時(shí)會(huì)發(fā)生交互動(dòng)作根據(jù)障礙物的類型發(fā)生不同的交互,因此要給障礙物設(shè)置其類型,方便調(diào)用,可以用下標(biāo)來表示,這樣游戲充重置后,發(fā)生了互動(dòng)的障礙物模塊也會(huì)通過下標(biāo)復(fù)原。(1)構(gòu)造方法 publicObstruction(intx,inty,inttype,BackGroundbg){ this.x=x; this.y=y; this.type=type; this.starttype=type; this.bg=bg; setImage(); if(this.type==11){ t.start(); } } (2)重置方法 publicvoidreset(){ this.type=starttype; this.setImage(); }(2)然后我們還要設(shè)置一個(gè)run方法用來操控旗子,當(dāng)旗子的坐標(biāo)達(dá)到420時(shí)就判定結(jié)束之后就可以操控人物了 publicvoidrun(){ while(true){ if(this.bg.isOver()){ if(this.y<420){ this.y+=5; }else{ this.bg.setDown(true); } }4.2.6敵人類(1)游戲里設(shè)定的怪物蘑菇怪是可以通過操控人物跳躍到其上方將它擊殺的,還有一種不能擊殺的是食人花,在敵人類中詳細(xì)設(shè)定了敵人的屬性包括其移動(dòng),二位坐標(biāo)圖片等等以及當(dāng)游戲重置之后的還原方法。在敵人類里我們要設(shè)置二維坐標(biāo)還要設(shè)置其線程,還要寫入方法控制蘑菇怪的移動(dòng)(1)初始坐標(biāo)定義int值startx表示初始X坐標(biāo)定義int值starty表示初始Y坐標(biāo)(2)當(dāng)人物的生命值變?yōu)?時(shí),初始化游戲,障礙物和敵人都會(huì)初始化,定義初始二位坐標(biāo)便于復(fù)原。根據(jù)敵人類型不同,設(shè)定showimage方法來現(xiàn)實(shí)不同的圖片,不同的怪物和游戲人物進(jìn)行交互產(chǎn)生不同的結(jié)果,有的怪物可以被游戲人物消滅,有的則不可以(1)怪物類型 定義一個(gè)int值type為怪物類型(2)顯示圖片定義一個(gè)被緩存圖像值showimage顯示圖片(3)食人花屬于只能在一定范圍內(nèi)上下移動(dòng)的怪物因此必須設(shè)定他的移動(dòng)上限和移動(dòng)下限。(1)移動(dòng)上限與移動(dòng)下限定義int值upMax與downMax為0表示食人花的移動(dòng)上限與下限(4)在敵人類里,要對蘑菇怪寫一種構(gòu)造方法,對食人花寫另一種構(gòu)造方法,因?yàn)樗麄兊膶傩愿鞑幌嗤瑸榱擞螒蜷_始之前怪物不能移動(dòng),還要設(shè)置線程來控制(1)蘑菇怪的構(gòu)造方法publicEnemy(intx,inty,booleanisLeft,inttype,BackGroundbg){......this.t=newThread(this);t.start();t.suspend();}(5)在游戲人物死亡進(jìn)行reset時(shí),不僅要對障礙物,人物進(jìn)行重置,怪物也不例外,通過重置方法將敵人的二維坐標(biāo),以及狀態(tài)等等進(jìn)行還原,同時(shí)怪物的圖片必須和類型一致(1)還原坐標(biāo)this.x=this.startx;this.y=this.starty;(2)還原圖片if(this.type==1){this.showImage=StaticValue.allTriangleImage.get(0);}elseif(this.type==2){this.showImage=StaticValue.allFlowerImage.get(0);}}(6)最后,我們還需要定義一個(gè)方法,當(dāng)人物完成對怪物的擊殺時(shí)應(yīng)該顯示怪物死亡的圖片,同時(shí)還需要將死亡的敵人加入我們之前設(shè)定的集合里(1)死亡圖片this.showImage=StaticValue.allTriangleImage.get(2);this.bg.getAllEnemy().remove(this);this.bg.getRemoveEnemy().add(this);5系統(tǒng)運(yùn)行5.1游戲開發(fā)所需要的圖片下面的圖片包括了人物以及障礙物等A.游戲人物向左移動(dòng)的圖片,如圖5-1所示。

圖5-1游戲人物向左移動(dòng)的圖片B.游戲人物向左跳躍的圖片,如圖5-2所示圖5-2游戲人物向左跳躍的圖片C.游戲人物向右移動(dòng)的圖片,如圖5-3所示圖5-3游戲人物向右移動(dòng)的圖片D.游戲人物向右跳躍的圖片,如圖5-4所示圖5-4游戲人物向右跳躍的圖片E.游戲人物死亡的圖片,如圖5-5所示圖5-5游戲人物死亡的圖片地面及普通障礙物圖片,如圖5-6所示圖5-6地面及普通障礙物圖片C.水管類圖片,如圖5-7所示圖5-7水管類圖片5.2.1游戲邏輯展示下面的圖片是游戲進(jìn)程的圖片,(1)包括了人物移動(dòng),跳躍等動(dòng)作,以及人物和磚塊進(jìn)行互動(dòng)產(chǎn)生的結(jié)果,如圖5-9(2)在初始界面需要按住space鍵才能正式開始,當(dāng)游戲人物的生命值為0時(shí)游戲判斷結(jié)束,如圖5-10(3)如果馬里奧順利通過所有關(guān)卡,那么游戲同樣結(jié)束,如圖5-11圖5-9人物移動(dòng),跳躍等動(dòng)作圖片圖5-10初始界面圖片圖5-11通關(guān)圖片6系統(tǒng)測試6.1系統(tǒng)測試目的本章系統(tǒng)測試著重講述了游戲系統(tǒng)整體是否完整,各個(gè)模塊是否正常運(yùn)行,在美觀上有沒有缺陷以及是否還需要添加些東西來使這個(gè)游戲系統(tǒng)更加完善。這樣就可以保證用戶的使用滿意度。在此,我們需要測試游戲來查看游戲系統(tǒng)是否出現(xiàn)bug,然后我們以系統(tǒng)出現(xiàn)的bug信息來調(diào)試我們的系統(tǒng),讓它得到進(jìn)一步的完善。換句話說,就是系統(tǒng)結(jié)構(gòu)設(shè)計(jì)完成了,不代表你所設(shè)計(jì)的系統(tǒng)沒有一丁點(diǎn)問題。在設(shè)計(jì)系統(tǒng)的時(shí)候,我們常常會(huì)因?yàn)榇中拇笠庠斐捎螒蛳到y(tǒng)出現(xiàn)不起眼的小問題,然而當(dāng)時(shí)系統(tǒng)并沒有報(bào)錯(cuò),這類細(xì)小問題就需要我們來測試,以保證游戲系統(tǒng)的可靠性。我們也需要確任游戲系統(tǒng)的質(zhì)量,也需要在整個(gè)系統(tǒng)測試的過程中看到自己預(yù)期的結(jié)果,系統(tǒng)出現(xiàn)的不足,我們就可以及時(shí)改正它,而且還可以將系統(tǒng)出現(xiàn)的這些和那些的問題反饋給開發(fā)者或經(jīng)理。系統(tǒng)測試不僅測試的游戲系統(tǒng)的本身,而且是測試我們的開發(fā)系統(tǒng)的過程,這可以讓我們更加直觀的認(rèn)識游戲系統(tǒng)所存在的不足。我們主要測試的是游戲系統(tǒng)的的邏輯以及畫面等等。6.2測試過程(1)制定測試計(jì)劃。在制定測試計(jì)劃時(shí),我們必須統(tǒng)籌全局對各個(gè)因素都要考慮周全,不僅限于主觀客觀因素以及環(huán)境等等。測試計(jì)劃的內(nèi)容進(jìn)行主要問題包括系統(tǒng)測試的內(nèi)容,時(shí)間表,測試所需的環(huán)境和條件發(fā)展以及測試技術(shù)培訓(xùn)的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論