【正文】
如表 、表 所示。 ( 1) 游戲?qū)宇?GameLayer,如表 、表 所示。 圖 飛機(jī)大戰(zhàn)類圖 如圖 所示,由于類比較多空間有限 , 所以就不一一列舉類中的參數(shù)及函數(shù)。 主要 負(fù)責(zé)游戲暫停、更新分?jǐn)?shù)的操作。 中國(guó)礦業(yè)大學(xué) 2022 屆本科生畢業(yè)設(shè)計(jì)(論文) 第 19 頁(yè) 闖關(guān)游戲結(jié)束層類:繼承 CCLayer 類,主要負(fù)責(zé)闖關(guān)模式游戲結(jié)束時(shí)的換場(chǎng)動(dòng)畫。 游戲結(jié)束層類:繼承 CCLayer 類,主要負(fù)責(zé)無(wú)盡模式游戲結(jié)束時(shí),對(duì)積分的統(tǒng)計(jì)、判斷是否加入歷史最高分。 闖關(guān)歡迎層類:繼承 CCLayer 類,主要負(fù)責(zé)闖關(guān)模式的換場(chǎng)動(dòng)畫。 子彈層類:繼承 CCLayer 類,主要負(fù)責(zé)加載戰(zhàn)機(jī)子彈紋理、啟動(dòng)戰(zhàn)機(jī)子彈的射擊、停止戰(zhàn)機(jī)子彈射擊、諸如速度和起始位置的戰(zhàn)機(jī)屬性的設(shè)置、子彈的移除操作。 游戲簡(jiǎn)介類:繼承 CCLayer 類,主要負(fù)責(zé)顯示游戲幫助及游戲背景。 歡迎場(chǎng)景類:繼承 CCScene 類,游戲引擎思想中的必備部分,主要用于加載歡迎層類。 道具層類:繼承 CCLayer 類,主要負(fù)責(zé)雙排道具和全屏炸彈道具的初 始化、定義道具出現(xiàn)的概率及位置、雙排子彈的移除、道具使用后的效果、戰(zhàn)機(jī)沒(méi)有獲得道具對(duì)道具進(jìn)行回收。 戰(zhàn)機(jī)層類:繼承 CCLayer 類,玩家選擇無(wú)盡模式或闖關(guān)模式 后加入 到 游戲場(chǎng)景中。它主要負(fù)責(zé)戰(zhàn)機(jī)普通子彈與三種敵機(jī)的 碰撞檢測(cè)、戰(zhàn)機(jī)在獲得雙排子彈道具后雙排子彈與三種敵機(jī)的碰撞檢測(cè)、戰(zhàn)機(jī)與三種敵機(jī)的碰撞檢測(cè)、全屏炸彈使用后毀滅當(dāng)前幀中所有敵機(jī)、更新全屏炸彈的數(shù)量、內(nèi)存的管理、更新積分等等。此外,游戲?qū)宇愂钦麄€(gè)游戲的核心。 敵機(jī)層類:繼承 CCLayer 類,主要負(fù)責(zé)三種敵機(jī)類型生命值的設(shè)定、闖關(guān)模式中 BOSS標(biāo)記符的設(shè)定、游戲難度的設(shè)定、加載三種敵機(jī)、移除三種敵機(jī)、三種敵機(jī)的爆炸效果、敵機(jī)數(shù)組的操作。在這些類中最復(fù)雜最主要的是游戲?qū)宇?,因?yàn)樗?lián)系了戰(zhàn)機(jī)層、子彈層、雙排子彈層、控制層、道具層、敵機(jī)層等。 中國(guó)礦業(yè)大學(xué) 2022 屆本科生畢業(yè)設(shè)計(jì)(論文) 第 18 頁(yè) 由于有些類是使用游戲引擎所必須定義的,所以本游戲的 類 會(huì)比較多。具體調(diào)度如圖 所示 。場(chǎng)景可以通俗的理 解為手機(jī)屏幕,它是有一個(gè)或多個(gè)層組成的。Cocos2dx 最主要有 4 個(gè)概念,分別是 Direct(導(dǎo)演)、 Scene(場(chǎng)景)、 Layer(層)、 Sprite(精靈)。使用這個(gè)類會(huì)大大減少我們?cè)跀?shù)據(jù)存儲(chǔ)上所 花 費(fèi)的時(shí)間。 分?jǐn)?shù)存儲(chǔ)的優(yōu)化 由于游戲所需存儲(chǔ)的數(shù)據(jù)并不多,所以我們不用諸如 sql server、 MySQL 之類的數(shù)據(jù)庫(kù),因?yàn)樗鼈儠?huì)為我們游戲的開 發(fā)帶來(lái)不必要的消耗。此外 Cocos2dx 為開發(fā)者提供了使用 plist 文件的函數(shù),開發(fā)者使用經(jīng)過(guò)打包的紋理圖,可以大大減少紋理所占內(nèi)存以及紋理切換所帶來(lái)的開銷。對(duì)于我們這款飛行射擊類游戲,需要使用到的紋理比較多,花費(fèi)在渲染上的時(shí)間將會(huì)比較多,所以會(huì)拖慢游戲整體的速度 從而 影響游戲的效果。 經(jīng)過(guò)加載后需要 1MB( 512*512*4=1MB)的空間,遠(yuǎn)遠(yuǎn)大于原圖。比如 本身是 400*300,載入內(nèi)存后它就會(huì)變成 512*512 的紋理。 Cocos2dx 游戲引擎中提供了批次渲染機(jī)制 CCSpriteBatchNode,這種機(jī)制能使出現(xiàn)在屏幕之上的眾多子彈只被渲染一次,大大提高了游戲的運(yùn)行效果。 子彈的優(yōu)化 在游戲每一幀中會(huì)出現(xiàn)上百顆子彈,若使用普通渲染機(jī)制,子彈的紋理將會(huì)被渲染上百次,大大影響了游戲的效果。 圖 碰撞檢測(cè)原理圖 音樂(lè)播放模塊的設(shè)計(jì) 若玩家選擇了打開背景音樂(lè)和游戲音效,當(dāng)游戲開始時(shí),音樂(lè)模塊需要把音樂(lè)資源載入程序并且播放。由于渲染在屏幕上的每個(gè)紋理,系統(tǒng)都會(huì)將其用一個(gè)能容納下該紋理的最小矩形包圍起來(lái),所以碰撞檢測(cè)的實(shí)質(zhì)就是檢測(cè)兩個(gè)矩形是否有交集。闖過(guò)第一關(guān)后,每個(gè)關(guān)卡會(huì)有不同的 BOSS,它們會(huì)發(fā)射攻擊力不同的子彈,所以會(huì)增加一個(gè) BOSS 子彈層,在每一幀中會(huì)自動(dòng)檢測(cè)每顆子彈是否擊中玩家戰(zhàn)機(jī)。 ( 4)累加當(dāng)前幀中所有敵機(jī)相應(yīng)的分?jǐn)?shù),當(dāng)前幀中所有的戰(zhàn)機(jī)執(zhí)行爆炸效果,敵機(jī)數(shù)組中移除畫面中所有的敵機(jī),最后更新積分。 中國(guó)礦業(yè)大學(xué) 2022 屆本科生畢業(yè)設(shè)計(jì)(論文) 第 16 頁(yè) ( 2) 判斷玩家是否使用全屏炸彈,若使用全屏炸彈則執(zhí)行 3。雙排子彈的算法與普通子彈類似,區(qū)別之處在于子彈發(fā)射的位置,普通子彈在戰(zhàn)機(jī)的中間,而雙排子彈的發(fā)射位置在飛機(jī)的兩個(gè)翅膀上。 道具模塊的設(shè)計(jì) 道具分為兩種,分別為全屏炸彈和雙排子彈。 ( 2) 在每輪游戲結(jié)束時(shí),比較當(dāng)前用 戶得分和歷史最高分。 ( 4)若敵機(jī)毀滅,執(zhí)行爆炸幀動(dòng)畫并在數(shù)組中刪除敵機(jī) 。 ( 2)敵機(jī)出現(xiàn)的位置在屏幕的頂部,具體的橫坐標(biāo)用隨機(jī)函數(shù)生成 。 表 敵機(jī) 屬性 生命值 對(duì)應(yīng)分?jǐn)?shù) 敵機(jī)一 1 10 敵機(jī)二 5 50 敵機(jī)三 12 100 敵機(jī)每被一顆子彈擊中,生命值減一,當(dāng)生命值減到零時(shí)敵機(jī)滅亡。 ( 6)對(duì)擊中敵機(jī)的子彈進(jìn)行回收 。 ( 5) 若子彈移動(dòng)的位置超出了屏幕并沒(méi)有擊中任何敵機(jī),則對(duì)其進(jìn)行回收。 ( 3)對(duì)存儲(chǔ)在緩存中的子彈圖片進(jìn)行渲染,并加到當(dāng)前場(chǎng)景中 。每一幀上子彈的數(shù)量很多,但每顆子彈的算法是一致的 ,分為以下幾步 : ( 1) 獲取戰(zhàn)機(jī)的世界坐標(biāo)位置 。 ( 3) 執(zhí)行戰(zhàn)機(jī)爆炸幀動(dòng)畫,移除場(chǎng)景中的戰(zhàn)機(jī) ,最后跳轉(zhuǎn)到游戲結(jié)束場(chǎng)景 。 戰(zhàn)機(jī)模塊的設(shè)計(jì) 戰(zhàn)機(jī)模塊分為無(wú)盡模式戰(zhàn)機(jī)模塊和闖關(guān)模式戰(zhàn)機(jī)模塊,基本算法分為以下幾步 : ( 1) 在每一幀中,先執(zhí)行 戰(zhàn)機(jī)移動(dòng)模塊 。 ( 4)判斷此時(shí)坐標(biāo)是否超過(guò)屏幕,若超過(guò)則把戰(zhàn)機(jī)移動(dòng)到屏幕的最大邊緣處,若沒(méi)超過(guò)執(zhí)行 下一步 。 ( 2)判斷手指最初觸摸地方是否在戰(zhàn)機(jī)有效范圍內(nèi),若在執(zhí)行下一步 。 ( 4)判斷戰(zhàn)機(jī)是否與敵機(jī)一、二、三相撞,若相撞則執(zhí)行玩家戰(zhàn)機(jī)模塊 。 ( 2)判斷雙排子彈是否擊中敵機(jī)一、二、三 。為了吸引更多的群體,軟件必須跨平臺(tái)、游戲界面必須好看、玩法必須不止一種、需要有積分系統(tǒng)、敵機(jī)種類要多、操作簡(jiǎn)單上手容易、玩家戰(zhàn)機(jī)要能升級(jí)、會(huì)出現(xiàn)讓玩家感到眼前一亮的道具系統(tǒng)、音樂(lè)與音效必須達(dá)到逼真的效果。 游戲主要描述的是,為了維護(hù)國(guó)家的領(lǐng)空權(quán),玩家戰(zhàn)機(jī)翱翔于天空,大戰(zhàn)敵方飛機(jī)。但由于此過(guò)程一般為迭代過(guò)程,在設(shè)計(jì)之后有可能再回到分析,又由于篇幅有限,所以在本文中會(huì)以最簡(jiǎn)潔的方式描述(若在系統(tǒng)設(shè)計(jì)中回到了分析,本文將不再過(guò)多描述,直接描述出 主要成果)。 圖 闖關(guān)模式界面 圖 設(shè)置界面 中國(guó)礦業(yè)大學(xué) 2022 屆本科生畢業(yè)設(shè)計(jì)(論文) 第 14 頁(yè) 4 系統(tǒng)設(shè)計(jì) 軟件的實(shí)際開發(fā)階段從系統(tǒng)設(shè)計(jì)正式開始,這部分主要完成的任務(wù)是把之前所做的分析模型轉(zhuǎn)換為軟件的設(shè)計(jì)模型。 中國(guó)礦業(yè)大學(xué) 2022 屆本科生畢業(yè)設(shè)計(jì)(論文) 第 13 頁(yè) 設(shè)置界面 設(shè)置界面包含七個(gè)元素,分別是背景、游戲名字、背景音樂(lè)標(biāo)簽、音效標(biāo)簽、返回按鈕、背景音樂(lè)開關(guān)按鈕、音效開關(guān)按鈕。 圖 游戲主界面 圖 無(wú)盡模式界面 闖關(guān)模式界面 闖關(guān)模式界面包含 八 個(gè)元素,分別是背景、玩家戰(zhàn)機(jī)、子彈、敵方飛機(jī)、分?jǐn)?shù)標(biāo)簽、積分、 BOSS、 BOSS 子彈。 無(wú)盡模式界面 無(wú)盡模式界面包含六個(gè)元素,分別是背景、玩家戰(zhàn)機(jī)、子彈、敵方飛機(jī)、分?jǐn)?shù)標(biāo)簽、積分。 游戲主界面 游戲主界面包含七個(gè)元素,分別是背景、 游戲名字、無(wú)盡模式按鈕、闖關(guān)模式按鈕、游戲簡(jiǎn)介按鈕、設(shè)置按鈕、關(guān)于按鈕。 ( 4) CPU 頻率大于等于 800MHZ。 ( 2) RAM 大于等于 512M。 ( 4)其它工具: Office 202 Python、 VMware、 Photoshop cs TexturePackerGUI。 ( 2)開發(fā)平臺(tái): Microsoft Visual Studio 202 Xcode、 Eclipse。倘若選擇的是闖關(guān)模式,系統(tǒng)還會(huì)加載進(jìn)與 BOSS 相關(guān)的資源以及與闖關(guān)模式相關(guān)的規(guī)則。若玩家戰(zhàn)機(jī)與敵機(jī)發(fā)生碰撞則結(jié)束游戲,與此同時(shí) 會(huì) 去判斷是否超過(guò)歷史最高分 。 在游戲的每一幀中,系統(tǒng)都會(huì)自動(dòng)按順序判斷子彈是否擊中敵機(jī)、玩家戰(zhàn)機(jī)是否與敵機(jī)發(fā)生碰撞。 如圖 所示,玩家啟動(dòng)游戲后載入菜單選項(xiàng),若玩家選擇無(wú)盡模式,游戲會(huì)為玩家載入相應(yīng)的游戲音效以及一些必要的資源文件 。 中國(guó)礦業(yè)大學(xué) 2022 屆本科生畢業(yè)設(shè)計(jì)(論文) 第 11 頁(yè) 。 。 ,若獲得,則判斷玩家是否使用全屏炸彈。 ,若獲得則 停止單排子彈發(fā)射 執(zhí)行雙排子彈 。然后對(duì)玩家戰(zhàn)機(jī)、被碰撞到的敵機(jī)以及相應(yīng)子彈進(jìn)行回收,之后跳轉(zhuǎn)到游戲結(jié)束場(chǎng)景。 。 ,若發(fā)生碰撞,敵機(jī)一生命值減一,若減一后生命值減為 0,敵機(jī)一執(zhí)行爆炸幀動(dòng)畫,玩家戰(zhàn)機(jī)增加相應(yīng)分?jǐn)?shù) ,之后敵機(jī)與對(duì)應(yīng)的子彈被回收 。 ( 2)闖關(guān)模式中執(zhí)行游戲用例, 如表 所示 表 執(zhí)行游戲用例描述 用例名稱 執(zhí)行游戲 用例描述 游戲中,每一幀需要完成的任務(wù) 參與者 玩家與程序共同執(zhí)行 前置條件 游戲初始化成功 后置條件 如果玩家飛機(jī)未被毀滅則循環(huán)執(zhí)行,如果玩家飛機(jī)被毀滅則執(zhí)行游戲結(jié)束用例 基本路徑 ,使背景向下移動(dòng)對(duì)應(yīng)的像素點(diǎn) 。 。 。 BOSS 子彈層 。 。 。 表 初始化游戲的用例描述 用例名稱 初始化游戲 用例描述 進(jìn)行 執(zhí)行游戲前的準(zhǔn)備工作 參與者 程序自動(dòng)執(zhí)行 前置條件 玩家成功選擇無(wú)盡模式或闖關(guān)模式 后置條件 如果執(zhí)行成功,用戶可玩游戲 S y s t e m玩家菜單選擇啟動(dòng)無(wú)盡模式啟動(dòng)闖關(guān)模式創(chuàng)建戰(zhàn)機(jī)加載頁(yè)面初始化游戲創(chuàng)建背景創(chuàng)建 B O SSB O SS 射擊音樂(lè)控制查看游戲幫助查看開發(fā)者信息顯示畫面顯示畫面 in c lu d e in c lu d e in c lu d e in c lu d e in c lu d e 初始化游戲創(chuàng)建背景 in c lu d e in c lu d e in c lu d e in c lu d e in c lu d e in c lu d e in c lu d e 執(zhí)行游戲碰撞檢測(cè)創(chuàng)建子彈 in c lu d e in c lu d e 控制游戲移動(dòng)戰(zhàn)機(jī)使用道具暫停 in c lu d e in c lu d e in c lu d e in c lu d e in c lu d e 中國(guó)礦業(yè)大學(xué) 2022 屆本科生畢業(yè)設(shè)計(jì)(論文) 第 10 頁(yè) 基本路徑 。 圖 飛機(jī)大戰(zhàn)用例圖 其中有幾個(gè)用例比較復(fù)雜,這里對(duì)最復(fù)雜的闖關(guān)模式初始化游戲與執(zhí)行游戲兩個(gè)用例進(jìn)行用例描述。此外,游戲還提供道具,分別是雙排子彈和全屏炸彈。對(duì)于第一次接觸此游戲的玩家,可以通過(guò)查看游戲幫助學(xué)習(xí)游戲玩法。敵方三種飛機(jī)類型隨機(jī)出現(xiàn),飛行速度根據(jù)游戲難度的增加而增加,游戲難度隨玩家積分的增加而增加。其中模式選擇分為無(wú)盡模式和闖關(guān)模式、分?jǐn)?shù)存儲(chǔ)分為分?jǐn)?shù)讀取與分?jǐn)?shù)更新、游戲幫助分為玩法說(shuō)明與開發(fā)說(shuō)明、音樂(lè)控制分為打開音樂(lè)與關(guān)閉音樂(lè)、道具分為雙排子彈道具與全屏炸彈道具、敵機(jī)管理分為增加敵機(jī)與敵機(jī)回收。 ( 13)關(guān)于 為玩家展示開發(fā)者的 相關(guān) 信息以及關(guān)于此款游戲的相關(guān)信息。系統(tǒng)默認(rèn)打開背景音樂(lè)和音效。 ( 11)背景音樂(lè)、音效的設(shè)置 背景音樂(lè)、音效的開關(guān)放置在主菜單中,玩家選擇設(shè)置菜單項(xiàng)后,系統(tǒng)跳轉(zhuǎn)到設(shè)置界面。存儲(chǔ)的形式為在本地保存一個(gè) xml 的文本。全屏炸彈觸發(fā)后,當(dāng)前屏幕的敵機(jī)全部 被 銷毀 。 表 無(wú)盡模式中積分與難度表 積分 難度 無(wú)盡 模式 0 —20 萬(wàn) 容易 20 萬(wàn) —60 萬(wàn) 中等 大于 100 萬(wàn) 困難 表 闖關(guān)模式中關(guān)卡與難度對(duì)應(yīng)表 關(guān)卡 難度 闖關(guān) 模式 第一關(guān) 容易 第二關(guān) 中等 +BOSS1 第三關(guān) 困難 +BOSS2 ( 8)道具 道具分為兩種,一種是雙排子彈,玩家戰(zhàn)機(jī)獲得該道具后,會(huì)在一段時(shí)間內(nèi),戰(zhàn)機(jī)子彈由一列變?yōu)閮闪校^(guò)相應(yīng)時(shí)間,雙排子彈消失,戰(zhàn)機(jī)變回單排子彈。闖關(guān)模式難度在基本難度上還會(huì)加上 BOSS 所帶來(lái)的難度。 無(wú)盡模式初始難度為容易。這種模式是專門為喜歡嘗試新鮮玩法的玩家專門設(shè)計(jì)的。 中國(guó)礦業(yè)大學(xué) 2022 屆本科生畢業(yè)設(shè)計(jì)(論文) 第 7 頁(yè) 圖 背景移動(dòng)原理圖 ( 5)無(wú)盡模式 即最經(jīng)典的玩法,玩家戰(zhàn)機(jī)攻擊敵機(jī),直到戰(zhàn)死。通過(guò)一系列的判斷語(yǔ)句,判斷背景所在屏幕中的位置。 如圖 所示 。實(shí)際上是根據(jù)設(shè)定的時(shí)間間隔,把敵機(jī)移動(dòng)一段距離。當(dāng)手指觸摸在飛機(jī)有效范圍外時(shí),觸摸事件將不會(huì)被激活,飛機(jī) 也 不會(huì)隨著手指 的移動(dòng)而移動(dòng)。當(dāng)手指在飛機(jī)一定范圍內(nèi) 觸摸 時(shí),觸摸事件被激活 。當(dāng)玩家積分達(dá)到 每