• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Python的飛機(jī)大戰(zhàn)游戲開(kāi)發(fā)

      2020-05-14 08:24:36陸嘉誠(chéng)王楚虹師文慶
      機(jī)電工程技術(shù) 2020年3期
      關(guān)鍵詞:血量碰撞檢測(cè)敵機(jī)

      陸嘉誠(chéng),王楚虹,師文慶,黃 江

      (廣東海洋大學(xué)電子與信息工程學(xué)院,廣東湛江 524088)

      0 引言

      從20世紀(jì)70年代開(kāi)始,電子游戲以一種商業(yè)娛樂(lè)媒體被引入,成為日本、美國(guó)和歐洲一個(gè)重要娛樂(lè)工業(yè)的基礎(chǔ)[1]。1994年游戲商業(yè)開(kāi)始在中國(guó)大陸嶄露頭角,雖然中國(guó)游戲工業(yè)起步相比美國(guó)日本等國(guó)家起步晚了20多年,可是經(jīng)過(guò)近年來(lái)的發(fā)展,至2014年,中國(guó)電子游戲產(chǎn)業(yè)產(chǎn)值179億美元,僅次于美國(guó)(205億美元)[1]。

      時(shí)至今日,游戲已經(jīng)植根在日常生活中,隨著移動(dòng)設(shè)備的普及,休閑類(lèi)的游戲大大符合了人們碎片化時(shí)間管理的概念,無(wú)論是上下班、車(chē)上消磨時(shí)間還是在排隊(duì)等候,都能看到游戲娛樂(lè)的身影。由此發(fā)掘到游戲背后的商業(yè)模式,以及開(kāi)發(fā)游戲程序設(shè)計(jì)的可行性。為此,本文提出了基于Python語(yǔ)言開(kāi)發(fā)的飛機(jī)大戰(zhàn)類(lèi)小游戲的二次開(kāi)發(fā)。根據(jù)游戲的運(yùn)行流程以及游戲元素的嵌入,將開(kāi)發(fā)分成了4個(gè)模塊:子彈類(lèi)、敵軍飛機(jī)類(lèi)、自身飛機(jī)類(lèi)、獎(jiǎng)勵(lì)類(lèi)。

      1 游戲開(kāi)發(fā)總體方案設(shè)計(jì)

      1.1 游戲開(kāi)發(fā)資源

      目前互聯(lián)網(wǎng)發(fā)展迅速,隨之發(fā)展了各種強(qiáng)大的編程語(yǔ)言和實(shí)時(shí)電子游戲研發(fā)模塊,比如Pygame模塊,為開(kāi)發(fā)游戲程序提供了技術(shù)基礎(chǔ)。由于Python的開(kāi)源性和語(yǔ)言的流行,使得Python語(yǔ)言日趨成熟,在游戲的編程中提供強(qiáng)大的資源結(jié)構(gòu)[2-5]。

      按照游戲工業(yè)市場(chǎng)的飛機(jī)游戲開(kāi)發(fā)需求,分析游戲的基本功能,在此基礎(chǔ)上增加游戲的各類(lèi)功能模塊完善游戲。本設(shè)計(jì)所用到的編程語(yǔ)言是Python,版本是Python3.6,開(kāi)發(fā)工具為Pycharm,根據(jù)現(xiàn)有資源,調(diào)用Pygame包,對(duì)游戲進(jìn)行開(kāi)發(fā)、運(yùn)行及測(cè)試。游戲程序編輯、編譯、調(diào)試、發(fā)布所有過(guò)程都是基于PC機(jī)平臺(tái)運(yùn)行。

      1.2 游戲開(kāi)發(fā)總體方案

      游戲?qū)崿F(xiàn)的功能如下:上下左右的方位移動(dòng),游戲獎(jiǎng)勵(lì)補(bǔ)給的添加和獲取,敵機(jī)的增添,難度等級(jí)的變化,血量的增添,炸彈獎(jiǎng)勵(lì)的增加,重生時(shí)的無(wú)敵計(jì)時(shí)和超級(jí)子彈時(shí)間的定時(shí),游戲得分的記錄和最高記錄的保持。軟件程序?yàn)楸驹O(shè)計(jì)的最核心的部分,每一個(gè)代碼塊都構(gòu)成了設(shè)計(jì)的整體,因此,先由每個(gè)小功能入手,分別實(shí)現(xiàn)該設(shè)計(jì)的程序功能,然后封裝,調(diào)用,在程序的主體中調(diào)用封裝好的代碼塊,從而運(yùn)行整個(gè)程序的整體。軟件開(kāi)發(fā)結(jié)構(gòu)如圖1所示,程序上為面向?qū)ο缶幊蹋篌w上可分成子彈類(lèi),敵機(jī)類(lèi)、自身飛機(jī)類(lèi)、獎(jiǎng)勵(lì)類(lèi)4大類(lèi),再在主程序中繼承實(shí)例化以及嵌套。

      圖1 飛機(jī)大戰(zhàn)開(kāi)發(fā)結(jié)構(gòu)圖

      2 游戲程序詳細(xì)設(shè)計(jì)

      2.1 程序主函數(shù)

      程序main函數(shù)主要進(jìn)行定義和繼承的相關(guān)操作,實(shí)現(xiàn)成員函數(shù)的定義和成員屬性的定義,繼承相關(guān)函數(shù)并添加相關(guān)的游戲特性,譬如分?jǐn)?shù)的遞增功能的實(shí)現(xiàn)[6-9]。游戲運(yùn)行整體流程圖如圖2所示。游戲運(yùn)行中判斷優(yōu)先級(jí)別,層層嵌套功能模塊,循環(huán)檢測(cè)各項(xiàng)功能和監(jiān)聽(tīng)游戲的相關(guān)事件,譬如監(jiān)聽(tīng)游戲superbullet事件和投放時(shí)間的設(shè)定等等,最后運(yùn)行整體程序。

      圖2 程序設(shè)計(jì)流程圖

      2.2 子彈功能模塊

      子彈實(shí)例化中,分成了兩種射擊模式,一個(gè)是普通子彈(buttle),另一個(gè)是超級(jí)子彈(superbullet),包括了外形、速度、與敵機(jī)碰撞的撞擊等基本因素,其基本屬性方法如圖3所示。在設(shè)計(jì)時(shí)需要進(jìn)行子彈圖片的載入,子彈的發(fā)射速度設(shè)置、跟隨飛機(jī)飛行時(shí)的發(fā)射位置以及打印發(fā)射軌跡等。由于圖片的載入,飛機(jī)大戰(zhàn)的子彈仍然需要越界判定以及彈藥回收的問(wèn)題,這樣以此形成循環(huán)以實(shí)現(xiàn)游戲資源的最大化,從而實(shí)現(xiàn)游戲的開(kāi)發(fā)優(yōu)化。在圖中定義了它們的移動(dòng)方法,圖片的初始化載入,回收標(biāo)志等等。具體設(shè)計(jì)中,開(kāi)設(shè)一個(gè)空列表superbullet=[]來(lái)定義子彈實(shí)例化個(gè)數(shù),將超級(jí)子彈功能模塊的效果設(shè)計(jì)為3行彈道同時(shí)射出,所以需要獲取子彈發(fā)射的位置,總體子彈個(gè)數(shù)為12個(gè),但是因?yàn)槭峭瑫r(shí)射出,所以在for循環(huán)條件中添加具體的循環(huán)條件(superbullet_NUM//3)使得子彈分4次發(fā)射把生成的子彈裝入列表superbullet后,只需要遍歷列表就可以將子彈實(shí)例,同時(shí)以同樣的位置參數(shù)去回收子彈,列表中的子彈也是與敵機(jī)的碰撞檢測(cè)對(duì)象。

      圖3 子彈的屬性和方法

      2.3 敵軍飛機(jī)功能模塊

      敵軍飛機(jī)的飛行模式設(shè)定為單一向垂直移動(dòng)飛行模式,設(shè)計(jì)飛行的速度,調(diào)用隨機(jī)函數(shù),設(shè)定敵軍飛機(jī)的隨機(jī)高度和隨機(jī)寬度,在設(shè)置高度的時(shí)候,為避免敵軍飛機(jī)生成時(shí)出現(xiàn)的突兀感以及飛機(jī)生成的完整性,所以在初始化的時(shí)候傳入寬高大小,讓敵軍飛機(jī)的高度生成在框架以外,寬度生成在框架寬度之間。

      敵軍飛機(jī)實(shí)例成大中小3類(lèi)飛機(jī),其中大、中兩類(lèi)飛機(jī)賦予血量屬性。其基本的屬性和方法如圖4所示,將敵軍飛機(jī)分成small、mid、big三大類(lèi),載入模型的寬高信息,定義速度、生成數(shù)量等屬性。其中當(dāng)敵機(jī)碰撞檢測(cè)后,血量減1。設(shè)計(jì)敵機(jī)生成函數(shù)將敵機(jī)生成到兩個(gè)精靈組里面,其中一組enemies負(fù)責(zé)所有敵軍飛機(jī)碰撞檢測(cè),另一組用來(lái)判斷類(lèi)型敵機(jī)碰撞后血量的減小,并通過(guò)draw-line函數(shù)繪制出血條屬性。其中,繪制血條需要獲取敵軍位置參數(shù),以及通過(guò)檢測(cè)血量扣取值反饋比例來(lái)實(shí)現(xiàn)血條的遞減視覺(jué)效果。

      圖4 敵軍飛機(jī)的屬性和方法

      2.4 自身飛機(jī)模塊

      自身飛機(jī)的功能屬性如圖5所示,需要自身飛機(jī)的圖片加載、飛行速度設(shè)置、飛行上下移動(dòng)等功能。由于上下左右移動(dòng)的屬性是類(lèi)同的,所以直接套用函數(shù)模板,但是值得注意的是,在設(shè)計(jì)飛行邊界的時(shí)候,需留意之前對(duì)Pygame框架大小的設(shè)定值,調(diào)整參數(shù)大小避免飛機(jī)模型的穿框情況。自身飛機(jī)類(lèi)要涉及到跟敵機(jī)的碰撞問(wèn)題,并以此為判斷條件結(jié)束游戲。增加游戲的視覺(jué)效果,在設(shè)計(jì)模型以及模型的繪畫(huà)制作中,繪制自身飛機(jī)毀壞的模型,建立一個(gè)精靈組,將自身飛機(jī)毀壞模型加載到精靈序列圖里面等待加載,并通過(guò)條件判斷加載調(diào)用。

      圖5 自身飛機(jī)類(lèi)屬性和方法

      2.5 獎(jiǎng)勵(lì)模塊

      游戲的獎(jiǎng)勵(lì)模塊是本設(shè)計(jì)實(shí)現(xiàn)游戲創(chuàng)新的重要組成部分,本文中設(shè)計(jì)了生命、超級(jí)子彈、炸彈3個(gè)功能屬性的獎(jiǎng)勵(lì)。生命獎(jiǎng)勵(lì)是在判斷生命沒(méi)有溢出的情況下,在與自身飛機(jī)碰撞檢測(cè)判斷后實(shí)現(xiàn)生命的增長(zhǎng);超級(jí)子彈獎(jiǎng)勵(lì)是實(shí)現(xiàn)子彈的限時(shí)輸入升級(jí),在bullet類(lèi)中交互,實(shí)現(xiàn)superbullet的游戲功能;炸彈獎(jiǎng)勵(lì)是在索引鍵盤(pán)的相對(duì)按鍵鍵入后,實(shí)現(xiàn)炸彈功能,回收所有的游戲元素(除本身飛機(jī)和子彈外)。具體實(shí)現(xiàn)的流程如圖6所示,獎(jiǎng)勵(lì)事件的監(jiān)聽(tīng)需要在游戲的運(yùn)行過(guò)程中,所以獎(jiǎng)勵(lì)的投放需要血量的判斷,在滿(mǎn)足血量屬性的判斷條件下,執(zhí)行事件的監(jiān)聽(tīng),對(duì)獎(jiǎng)勵(lì)進(jìn)行投放,而碰撞的相關(guān)形式采用非透明區(qū)域圖像碰撞檢測(cè),如果碰撞檢測(cè)為真,則回收子彈和飛機(jī),若敵軍飛機(jī)是非小型敵機(jī)類(lèi),則根據(jù)相關(guān)血量的原設(shè)定值遞減。

      圖6 獎(jiǎng)勵(lì)實(shí)現(xiàn)流程圖

      3 游戲運(yùn)行結(jié)果

      圖7 游戲界面與運(yùn)行效果

      運(yùn)行設(shè)計(jì)流程操作如下:按照得分生成對(duì)應(yīng)數(shù)量敵機(jī)→ 定時(shí)生成獎(jiǎng)勵(lì)事件→對(duì)子彈類(lèi)實(shí)例化→自身飛機(jī)實(shí)例化→敵機(jī)子彈碰撞檢測(cè)和游戲得分→我軍飛機(jī)敵機(jī)碰撞檢測(cè)和游戲結(jié)束。游戲的整體運(yùn)行結(jié)果如圖7所示,圖7(a)開(kāi)始界面中,打印游戲的開(kāi)始等待界面,并說(shuō)明具體的操作方式,并等待ENTER鍵鍵入開(kāi)始游戲,其實(shí)質(zhì)就是事件的監(jiān)聽(tīng)判斷,圖7(b)可以看到游戲?qū)崿F(xiàn)的功能模塊包括有:得分、難度等級(jí)、獎(jiǎng)勵(lì)補(bǔ)給機(jī)制的觸發(fā),小型敵機(jī)的生成,圖7(c) 實(shí)現(xiàn)了超級(jí)子彈的輸出功能,也實(shí)現(xiàn)了大型敵機(jī)生成及其碰撞掉血檢測(cè),還有難度等級(jí)提升檢測(cè),加載了各種游戲功能,從中可以看到游戲的bullet功能、award功能、enemy功能以及myplan功能都可以實(shí)現(xiàn)完成,而且游戲的細(xì)節(jié)優(yōu)化如計(jì)分,畫(huà)面滾動(dòng)的功能等也都運(yùn)行成功,圖7(d)可以看到游戲的得分記錄顯示成功以及記錄最高記錄保存成功。

      總體來(lái)看游戲模塊功能各項(xiàng)運(yùn)行成功,能實(shí)現(xiàn)飛行類(lèi)游戲的基本功能:上下左右的方位移動(dòng),游戲獎(jiǎng)勵(lì)補(bǔ)給的添加和獲取,敵機(jī)的增添,難度等級(jí)的變化,血量的增添,炸彈獎(jiǎng)勵(lì)的增加,重生時(shí)的無(wú)敵計(jì)時(shí)和超級(jí)子彈時(shí)間的定時(shí),游戲得分的記錄和最高記錄的保持。

      4 結(jié)束語(yǔ)

      本文設(shè)計(jì)的基于Python的飛機(jī)大戰(zhàn)小游戲,完成了游戲的基本行動(dòng)模塊,包括游戲的敵機(jī)、自身飛機(jī)、子彈等,同時(shí)拓展功能模塊有等級(jí)提升、超級(jí)子彈獎(jiǎng)勵(lì)、英雄生命獎(jiǎng)勵(lì)等,實(shí)現(xiàn)了一款可玩性較高的功能較多的飛機(jī)大戰(zhàn)類(lèi)型游戲。

      猜你喜歡
      血量碰撞檢測(cè)敵機(jī)
      科學(xué)神獸之戰(zhàn)
      紅細(xì)胞的奇妙旅行
      沖著敵機(jī),開(kāi)炮!——M1939式37毫米高射炮
      全新預(yù)測(cè)碰撞檢測(cè)系統(tǒng)
      基于BIM的鐵路信號(hào)室外設(shè)備布置與碰撞檢測(cè)方法
      Unity3D中碰撞檢測(cè)問(wèn)題的研究
      新中國(guó)建國(guó)后擊落入侵?jǐn)硻C(jī)大盤(pán)點(diǎn)
      膀胱沖洗液中加入去氧腎上腺素在老年患者經(jīng)尿道前列腺電切術(shù)中的應(yīng)用
      BIM技術(shù)下的某辦公樓項(xiàng)目管線(xiàn)碰撞檢測(cè)
      FloTrac/VigileoTM連續(xù)心排血量監(jiān)測(cè)極危心臟病患者開(kāi)腹手術(shù)麻醉處理2例
      潼关县| 金川县| 九龙坡区| 瓦房店市| 伊春市| 泰安市| 淳化县| 南陵县| 合川市| 甘孜县| 名山县| 平利县| 海丰县| 墨江| 旬邑县| 包头市| 阳新县| 定襄县| 蓝山县| 玉门市| 库伦旗| 夏津县| 湖北省| 万州区| 千阳县| 武胜县| 潜江市| 梨树县| 沾化县| 繁昌县| 缙云县| 舞钢市| 安乡县| 广元市| 于都县| 绥宁县| 邓州市| 昌吉市| 泽普县| 杭锦后旗| 喀喇沁旗|