版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
常州工學(xué)院學(xué)士學(xué)位設(shè)計(jì)PAGEPAGE30目錄第一部分設(shè)計(jì)任務(wù)與調(diào)研 31.1、設(shè)計(jì)目標(biāo): 31.2、設(shè)計(jì)要求 31.3、設(shè)計(jì)內(nèi)容: 31.4.技術(shù)路線(步驟與方法) 3第二部分設(shè)計(jì)說明 42.1、類的設(shè)計(jì) 42.2、游戲流程 52.2.1主流程 52.2.2游戲初始化 62.2.3游戲運(yùn)行 72.2.4游戲結(jié)束 72.2.5生產(chǎn)精靈對(duì)象 82.2.6鍵盤按下事件 92.2.7鍵盤彈起事件 92.2.8精靈與精靈的碰撞 92.2.9世界邊界碰撞事件 102.3完成類的定義 112.4實(shí)現(xiàn)SpriteFactory類 132.4.1游戲初始化 132.4.2鍵盤按下事件 142.4.3鍵盤彈起事件 152.4.5完成游戲運(yùn)行 152.2.6精靈與精靈的碰撞 182.2.7精靈與世界邊界的碰撞 192.2.8完成游戲結(jié)束 19第三部分設(shè)計(jì)成果 203.1設(shè)計(jì)編碼圖: 203.2游戲運(yùn)行結(jié)果圖 27第四部分結(jié)束語(yǔ) 28第五部分致謝 30第六部分參考文獻(xiàn) 31
第一部分設(shè)計(jì)任務(wù)與調(diào)研1.1、設(shè)計(jì)目標(biāo):通過用MyEclipse來(lái)設(shè)計(jì)“大魚吃小魚”這個(gè)游戲,來(lái)熟悉并學(xué)會(huì)運(yùn)用MyEclipse這個(gè)軟件的同時(shí)鞏固我們專業(yè)課java知識(shí),讓玩家通過這個(gè)游戲達(dá)到放松緊張的心情,達(dá)到愉悅,輕松的生活。1.2、設(shè)計(jì)要求1.對(duì)游戲中所需類進(jìn)行設(shè)計(jì);
2寫出源程序文件;
3.對(duì)游戲進(jìn)行調(diào)試和分析1.3、設(shè)計(jì)內(nèi)容:敵方有三類魚(鯊魚、橙色魚和小黃魚),每一類魚的對(duì)象出現(xiàn)后,在游戲中處于隨機(jī)自由移動(dòng)狀態(tài),敵方大魚能吃小魚;主角為紅魚且紅魚只有一條,玩家通過鍵盤方向鍵控制移動(dòng),紅魚有兩級(jí)狀態(tài),初始時(shí)處于低級(jí)狀態(tài),只能吃黃魚,能被藍(lán)魚或鯊魚吃掉。初級(jí)狀態(tài)的紅魚經(jīng)過重重險(xiǎn)惡且吃掉一定數(shù)量的黃魚升級(jí)后,能吃黃魚和藍(lán)魚,但還是能被鯊魚吃。1.4.技術(shù)路線(步驟與方法)游戲界面是一個(gè)游戲展現(xiàn)給玩家的平臺(tái),所以界面設(shè)計(jì)是否美觀是很多玩家選擇一款游戲的重要標(biāo)準(zhǔn),游戲中界面設(shè)計(jì)和軟件界面設(shè)計(jì)的要求是一致的,主要有以下幾條要求[7]:1、界面美觀2、界面條理3、符合玩家操作習(xí)慣(界面友好)在本界面中,包含玩家控制的魚、自由移動(dòng)的魚、玩家信息及一個(gè)按鈕文字,在本界面設(shè)計(jì)中,根據(jù)手機(jī)上的操作習(xí)慣,將按鈕的位置設(shè)置在手機(jī)的右下角,玩家的信息設(shè)置在屏幕最上方和最右邊,而將整個(gè)屏幕(包含按鈕文字顯示區(qū)域、玩家信息顯示區(qū)域)作為游戲區(qū)域,以最大限度的利用手機(jī)上的屏幕空間,所以本游戲未從屏幕中劃分出獨(dú)立的游戲區(qū)域。對(duì)于簡(jiǎn)單的益智游戲,一般不需要設(shè)計(jì)滾屏,所以該游戲在設(shè)計(jì)界面上設(shè)計(jì)為簡(jiǎn)單的單屏游戲。游戲邏輯即游戲規(guī)則,是游戲編程中最核心的部分,也是最難實(shí)現(xiàn)的部分,在游戲程序的開發(fā)過程中,大部分時(shí)間都是用在游戲邏輯的實(shí)現(xiàn)上。游戲邏輯基于游戲數(shù)據(jù)結(jié)構(gòu),從程序開發(fā)角度來(lái)看,游戲邏輯就是對(duì)于游戲數(shù)據(jù)的規(guī)則變換。當(dāng)然,這些數(shù)據(jù)的變換需要根據(jù)游戲規(guī)則進(jìn)行實(shí)現(xiàn)。然后把最終變化的結(jié)果以界面的形式顯示給最終用戶,對(duì)于游戲程序來(lái)說也就是游戲玩家。進(jìn)行游戲邏輯的設(shè)計(jì),首先要把游戲規(guī)則分析出來(lái),所謂游戲規(guī)則,就是在游戲中需要程序設(shè)計(jì)人員實(shí)現(xiàn)的規(guī)定和控制,這些可以根據(jù)游戲的功能進(jìn)行實(shí)現(xiàn)。“大魚吃小魚”游戲需要實(shí)現(xiàn)的游戲規(guī)則如下:(l)游戲初始化(2)玩家控制的魚的移動(dòng)及方向控制(3)自由移動(dòng)的魚(4)大魚小魚的碰撞和處理在程序?qū)嶋H實(shí)現(xiàn)時(shí),一般使用方法來(lái)組織游戲邏輯相關(guān)的代碼,也就是將對(duì)應(yīng)的游戲邏輯轉(zhuǎn)換為一個(gè)函數(shù)或許多函數(shù)。由于以上邏輯都比較簡(jiǎn)單,所以在實(shí)際實(shí)現(xiàn)時(shí)都轉(zhuǎn)換為一個(gè)方法。下面依次來(lái)講解以上游戲邏輯的實(shí)現(xiàn),并介紹實(shí)現(xiàn)時(shí)需要注意的一些問題。游戲操作指玩家以怎樣的形式參與游戲,每個(gè)游戲的操作需要根據(jù)游戲的規(guī)則等進(jìn)行設(shè)計(jì),不過在設(shè)計(jì)游戲操作以前首先需要考慮的問題,這款游戲中有哪些是需要玩家進(jìn)行參與的,然后才是以如何的形式進(jìn)行參與,其次需要考慮不同平臺(tái)以及不同設(shè)備上的操作特點(diǎn),一定要滿足硬件的要求。游戲操作設(shè)計(jì)的規(guī)則如下:1)、操作簡(jiǎn)單2)、操作方便3)、符合用戶操作習(xí)慣4)、符合設(shè)備硬件要求第二部分設(shè)計(jì)說明2.1、類的設(shè)計(jì)游戲中能直接看到的精靈:玩家魚、電腦魚、玩家得分文本、玩家等級(jí)文本。其中,玩家得分和玩家等級(jí)只需要顯示分?jǐn)?shù),可以直接使用CTextSprite類。玩家魚、電腦魚創(chuàng)建相應(yīng)的類??梢詮耐婕音~和電腦魚抽象出一個(gè)魚類,作為父類。魚類繼承CSprite類,通過CSprite類的方法操作精靈。創(chuàng)建一個(gè)游戲類,各個(gè)類之間的通信在游戲世界類中進(jìn)行。本游戲是大魚吃小魚,該類稱為魚游戲類。創(chuàng)建一個(gè)精靈工廠類,用來(lái)生成各種精靈類的對(duì)象。這就是“工廠模式”。2.2、游戲流程2.2.1主流程游戲分四個(gè)狀態(tài):未開始、開始、運(yùn)行和結(jié)束。CGameMain類是控制游戲流程的類,游戲屏幕每刷新一次,調(diào)用一次該類的GameMainLoop方法。GameMainLoop根據(jù)m_iGameState的值分別調(diào)用該類的GameInit、GameRun和GameEnd方法。這三個(gè)方法對(duì)應(yīng)初始化游戲、游戲運(yùn)行和游戲結(jié)束這三個(gè)狀態(tài)。GameInit只執(zhí)行一次。執(zhí)行后修改游戲狀態(tài)。屏幕刷新后,進(jìn)入狀態(tài)2,開始執(zhí)行GameRun方法。當(dāng)玩家積分>=0即玩家魚不死的時(shí)候,GameRun一直被執(zhí)行。玩家魚死亡后,調(diào)用GameEnd執(zhí)行一次,清除本局游戲數(shù)據(jù),恢復(fù)游戲未開始狀態(tài)。2.2.2游戲初始化完成游戲初始工作,界面上的工作:玩家積分和等級(jí)顯示為0,創(chuàng)建玩家魚并放置在指定位置,并且把玩家魚對(duì)象加入到FishesWorld對(duì)象中。2.2.3游戲運(yùn)行游戲運(yùn)行中,每刷新一次屏幕,需要根據(jù)最新數(shù)據(jù),更新玩家得分和等級(jí),移動(dòng)玩家魚,刪除被吃掉的電腦魚,當(dāng)達(dá)到相應(yīng)的時(shí)間間隔時(shí),創(chuàng)建新的電腦魚。2.2.4游戲結(jié)束將游戲中剩余的精靈刪除,包括刪除精靈本身和集合中對(duì)應(yīng)的對(duì)象。重新顯示游戲開始的提示圖片。2.2.5生產(chǎn)精靈對(duì)象本游戲中的玩家魚、電腦魚這兩種精靈類的對(duì)象都在精靈工廠類中產(chǎn)生。根據(jù)參數(shù)確定生產(chǎn)何種精靈。右下圖是玩家飛機(jī)的生產(chǎn)過程,主要是創(chuàng)建對(duì)象,復(fù)制模板,并設(shè)置幾個(gè)基本屬性(碰撞、世界邊界、初始位置、初始速度)。2.2.6鍵盤按下事件本游戲中,游戲狀態(tài)為0時(shí),按下空格鍵,游戲狀態(tài)轉(zhuǎn)為1。游戲狀態(tài)為2時(shí),玩家按下了WSAD鍵,分別設(shè)置玩家魚的上下左右速度。2.2.7鍵盤彈起事件本游戲中,游戲狀態(tài)為2時(shí),玩家松開WSAD鍵,設(shè)置玩家飛機(jī)對(duì)應(yīng)方向上的速度為0。2.2.8精靈與精靈的碰撞本游戲中,玩家魚設(shè)置為發(fā)送碰撞,電腦魚設(shè)置為接收碰撞。精靈碰撞時(shí),如果電腦魚等級(jí)比玩家魚高,則玩家魚減少積分,反之,玩家魚增加積分。2.2.9世界邊界碰撞事件本游戲中,游戲狀態(tài)為2時(shí),玩家魚碰到邊界停止繼續(xù)游動(dòng)。電腦魚碰到邊界,設(shè)置該魚的生命值hp為0。獲得該魚的價(jià)值,從玩家魚當(dāng)前的得分中減去該值。2.3完成類的定義根據(jù)下方表格,完成以下各個(gè)類的定義。其中,set和get方法在當(dāng)前任務(wù)中實(shí)現(xiàn),其他方法的實(shí)現(xiàn)留到后面完成。魚類:Fish繼承自CSprite類屬性privateintiHp魚的生命值privateintiGrade魚的等級(jí)privateintiDir魚的方向privatefloatfSpeedX魚X軸方向移動(dòng)速度privatefloatfSpeedY魚Y軸方向移動(dòng)速度privatefloatfPointX魚X軸方向上的位置privatefloatfPointY魚Y軸方向上的位置方法publicintgetHp()獲得魚的生命值publicvoidsetHp(constintHp)設(shè)置魚的生命值publicintgetGrade()獲取魚的等級(jí)publicvoidsetGrade(constintgrade)根據(jù)參數(shù)設(shè)置魚的等級(jí)publicfloatgetMoveSpeedX()獲得魚X軸方向上速度publicvoidsetMoveSpeedX(floatspeedX)設(shè)置魚X軸方向上速度publicfloatgetMoveSpeedY()獲得魚Y軸方向上速度publicvoidsetMoveSpeedY(floatspeedY)設(shè)置魚Y軸方向上速度publicvoidsetDirection(floatdir)根據(jù)參數(shù)設(shè)置魚的方向publicfloatgetDirection()獲取魚的方向publicfloatgetPointX()獲得魚在X軸上的位置publicvoidsetPointX(constfloatfPointX)設(shè)置魚在X軸上的位置publicfloatgetPointY()獲得魚在Y軸上的位置publicvoidsetPointY(constfloatfPointX)設(shè)置魚在Y軸上的位置publicvirtualvoidmove(intikey)=0魚的移動(dòng)方法玩家魚類:PlayerFish繼承自Fish類屬性privateintiPlayerScore玩家魚的積分方法publicintgetPlayerScore()得到玩家積分publicvoidsetPlayerScore(intscore)設(shè)置玩家積分publicvirtualvoidmove(intikey)玩家魚移動(dòng)方法publicvoidstopMove(intikey)玩家魚停止移動(dòng)方法publicvoideat(Computer*pFish)玩家魚吃電腦魚的方法publicintplayScoreTransferLvel()根據(jù)玩家魚積分得到玩家魚響應(yīng)的等級(jí)電腦魚類:ComputerFish繼承自Fish類屬性privateintvalue電腦魚的價(jià)值方法publicintgetValue()獲取電腦魚價(jià)值publicvoidsetValue(intvalue)設(shè)置電腦魚價(jià)值publicvirtualvoidmove()電腦魚移動(dòng)精靈工廠類:SpriteFactory屬性privatestaticintsId靜態(tài)成員變量。缺省值為0,每復(fù)制一個(gè)精靈時(shí)遞增一次,用于作為新生成的精靈名稱的后綴。例如:fish1,fish2,fish3方法publicstaticFish*getFish(intiType)獲取生產(chǎn)出的精靈。iType:1–玩家魚2–電腦魚魚的世界類:FishWorld屬性privatePlayersFishplayersFish玩家魚privatevector<ComputerFish*>computerFishs電腦魚集合publicstaticconstintMAX_COMPUTERFISH_NUM最多電腦魚數(shù)量privatefloatrefreshRate電腦魚刷新時(shí)間間隔privatefloatdeltaTimeCount當(dāng)前累計(jì)時(shí)間privateCTextSprite*textLevel游戲等級(jí)文本精靈privateCTextSprite*textScore玩家積分文本精靈PrivateCTextSprite*gameStart開始精靈PrivatefloatfSpeedX電腦魚在X方向上的速度PrivatefloatfSpeedY電腦魚在Y方向上的速度方法publicvoidsetRefreshRate(floatrefreshRate)設(shè)置電腦魚刷新時(shí)間間隔publicfloatgetRefreshRate()得到電腦魚刷新時(shí)間間隔publicfloatgetDeltaTimeCount()得到當(dāng)前累計(jì)時(shí)間publicvoidsetDeltaTimeCount(floatdeltaTimeCount)設(shè)置當(dāng)前累計(jì)時(shí)間publicCTextSprite*getTextStarGame()得到開始游戲文本精靈publicvoidsetTextStarGame(CTextSprite*textStarGame)設(shè)置開始游戲文本精靈publicCTextSprite*getTextLevel()得到玩家魚等級(jí)文本精靈publicvoidsetTextLevel(CTextSprite*textLevel)設(shè)置玩家魚等級(jí)文本精靈publicCTextSprite*getTextScore()得到玩家魚積分文本精靈publicvoidsetTextScore(CTextSprite*textScore)設(shè)置玩家魚積分文本精靈publicPlayersFish*getPlayersFish()得到玩家魚publicvoidsetPlayersFish(Fish*playersFish)設(shè)置玩家魚publicvector<ComputerFish*>getComputerFishs()得到電腦魚集合publicvoidsetComputerFishs(vector<ComputerFish*>*computerFishs)設(shè)置電腦魚集合publicComputerFish*findComputerFishByName(constchar*fName)根據(jù)名字在電腦魚集合中查找響應(yīng)的電腦魚publicFish*addFish(intkey)添加一條電腦魚publicintgetRandomByGrade()根據(jù)玩家魚的當(dāng)前等級(jí)返回一個(gè)隨機(jī)值,用于控制在不同等級(jí)下出現(xiàn)魚的種類以及比例publicvoidsetComputerFishSpeadByGrade(ComputerFish*cFish)設(shè)置電腦魚移動(dòng)速度根據(jù)魚的等級(jí)在Fish類中定義一些宏,在程序中盡量使用這些常量,而不是直接用數(shù)值。這樣,既有利于代碼的閱讀,又便于修改。2.4實(shí)現(xiàn)SpriteFactory類參考“游戲流程”中“生產(chǎn)精靈對(duì)象”一節(jié),完成SpriteFactory類的方法。對(duì)于玩家魚,初始速度設(shè)為0,初始位置在游戲屏幕下方邊界的中間位置,世界邊界設(shè)置為屏幕大?。梢酝ㄟ^CSystem類的GetScreenBottom等方法來(lái)設(shè)置位置)。設(shè)置等級(jí)為0,玩家得分為0,。玩家魚設(shè)置為發(fā)送碰撞。世界邊界碰撞模式為停止。電腦魚初始速度向左,等級(jí)高的魚速度相對(duì)較快所擁有的價(jià)值較高,等級(jí)低的魚速度相對(duì)較慢所擁有的價(jià)值較低。初始位置應(yīng)該位于屏幕右方,電腦魚設(shè)置為接收碰撞。從相應(yīng)的電腦魚模板復(fù)制精靈,命名方式:模板名稱+sId。2.4.1游戲初始化在CGameMain類的GameInit方法中完成游戲初始化。2.4.2鍵盤按下事件在CGameMain類的OnKeyDown方法中完成。鍵盤按下處理兩個(gè)事件:一個(gè)是游戲的開始;一個(gè)是玩家魚的上下左右移動(dòng)。完成該任務(wù)后,運(yùn)行程序。2.4.3鍵盤彈起事件在CGameMain類的OnKeyDown方法中完成。完成任務(wù)四后按下鍵盤相應(yīng)鍵魚兒被設(shè)置了移動(dòng)速度,但當(dāng)松開后就應(yīng)該取消設(shè)置的移動(dòng)速度。2.4.5完成游戲運(yùn)行在CGameMain類的GameRun方法中完成游戲運(yùn)行代碼。這三個(gè)函數(shù)需要自行添加,在定義類時(shí)并沒有加入。完成FishWorld中更新文本精靈數(shù)據(jù)的方法。完成FishWorld中更新玩家數(shù)據(jù)的方法。完成FishWorld中更新電腦魚的方法完成FishWorld中刪除HP為0的電腦魚的方法完成FishWorld中添加電腦魚的方法運(yùn)行游戲,這時(shí)候,可以看見不斷有電腦魚出現(xiàn),并且當(dāng)我們按下W,S,A,D鍵時(shí)玩家魚也會(huì)隨之移動(dòng)。2.2.6精靈與精靈的碰撞在上一個(gè)任務(wù)中,即使玩家魚碰到電腦魚也不會(huì)把電腦魚吃掉,是因?yàn)槲覀儧]有處理精靈的碰撞事件。在本任務(wù)中,我們通過精靈與精靈的碰撞事件來(lái)解決上述問題。在CGameMain類的OnSpriteColSprite方法中完成代碼。該方法有兩個(gè)參數(shù),一個(gè)是szSrcName,表示發(fā)送碰撞的精靈的名稱;一個(gè)是szTarName,表示接受碰撞的精靈的名稱。根據(jù)這兩個(gè)精靈的名稱,可以判斷碰撞的精靈是什么類型(因?yàn)閯?chuàng)建精靈時(shí),命名有規(guī)則)。2.2.7精靈與世界邊界的碰撞在創(chuàng)建敵機(jī)精靈和子彈精靈對(duì)象時(shí),我們?cè)O(shè)置了它們的世界邊界,以及與世界邊界碰撞模式。當(dāng)它們飛出各自的世界邊界時(shí),就會(huì)發(fā)生精靈與世界邊界碰撞事件,對(duì)于的方法是CGameMain類中的OnSpriteColWorldLimit方法。對(duì)于碰到世界邊界的電腦魚,我們需要?jiǎng)h除此精靈,并從集合刪除相應(yīng)的節(jié)點(diǎn)。本任務(wù)的效果主要是優(yōu)化程序,避免產(chǎn)生過多無(wú)用對(duì)象,占用電腦資源。2.2.8完成游戲結(jié)束當(dāng)玩家魚的積分<0時(shí),一局游戲結(jié)束。對(duì)應(yīng)的方法是CGameMain類的GameEnd方法。然后重新顯示“空格開始”圖片,游戲環(huán)境又重新回到未開始狀態(tài)。第三部分設(shè)計(jì)成果3.1設(shè)計(jì)編碼圖:BackGround類GoldFish類HuJing類MyFish類MainFrame主界面類3.2游戲運(yùn)行結(jié)果圖第四部分結(jié)束語(yǔ)踉踉蹌蹌地忙碌了
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025商場(chǎng)租賃合同補(bǔ)充協(xié)議
- 2025設(shè)備類采購(gòu)合同
- 寫婚姻合同范例
- 村級(jí)水利施工合同范例
- 床品套裝生產(chǎn)合同范例
- 推廣協(xié)議議合同范例
- 嘉峪關(guān)小區(qū)照明合同范例
- 內(nèi)河船裝貨合同范例
- 定制鋼質(zhì)門合同范例
- 教師授課合同范例
- 部編版八年級(jí)上冊(cè)語(yǔ)文標(biāo)點(diǎn)符號(hào)考點(diǎn)匯總
- 國(guó)家開放大學(xué)電大《藥物化學(xué)》期末題庫(kù)及答案
- T∕CTSS 38-2021 滇紅工夫紅茶
- 品管圈PDCA持續(xù)質(zhì)量改進(jìn)提高靜脈血栓栓塞癥規(guī)范預(yù)防率
- 綜合計(jì)算工時(shí)工作制實(shí)施方案42620
- 重力學(xué):第二章 地球正常重力場(chǎng)
- 路面基層厚度、芯樣完整性試驗(yàn)檢測(cè)記錄表(鉆芯法)
- 露天礦采場(chǎng)現(xiàn)場(chǎng)安全檢查表
- 基于MATLAB的三相交流電機(jī)調(diào)壓調(diào)速系統(tǒng)的仿真
- 事業(yè)單位管理崗位職員等級(jí)晉升審批表
- 勞技 水仙雕刻造型設(shè)計(jì)(第一課時(shí))
評(píng)論
0/150
提交評(píng)論