python实现飞机大战源代码+素材+项目分析
簡(jiǎn)述:游戲具有用戶(hù)注冊(cè),操作說(shuō)明,顯示最高分和用戶(hù)名,暫停游戲,發(fā)送補(bǔ)給,難度升級(jí),音效,實(shí)時(shí)顯示分?jǐn)?shù)和最終得分等效果。
文章目錄
- 一.項(xiàng)目分析
- Python程序設(shè)計(jì)項(xiàng)目
- 一.系統(tǒng)研究的背景及意義
- 二. 國(guó)內(nèi)外的發(fā)展現(xiàn)狀
- 三.可行性分析
- 四. 總體設(shè)計(jì)原則
- 五.需求分析
- 六.系統(tǒng)測(cè)試
- 源代碼+素材:
一.項(xiàng)目分析
Python程序設(shè)計(jì)項(xiàng)目
題 目 飛機(jī)大戰(zhàn)
院 系 信息科學(xué)與技術(shù)學(xué)院
專(zhuān) 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù)
姓 名 星空
班級(jí)學(xué)號(hào) 37
指導(dǎo)教師 xxx
二O一九年十二月
一.系統(tǒng)研究的背景及意義
當(dāng)今社會(huì)是一個(gè)信息社會(huì),一個(gè)知識(shí)經(jīng)濟(jì)的年代。自從世界上第一臺(tái)計(jì)算機(jī)ENIAC于1946年問(wèn)世到現(xiàn)在,計(jì)算機(jī)業(yè)飛速發(fā)展。隨著以全球信息網(wǎng)絡(luò)普及和全球信息共享為標(biāo)志的“全球信息網(wǎng)絡(luò)革命”的蓬勃興起,世界已然進(jìn)入在計(jì)算機(jī)信息管理領(lǐng)域的激烈競(jìng)爭(zhēng)的時(shí)代,計(jì)算機(jī),自然而然的變成了人們生活中必不可少的一部分。
過(guò)去,人們只要是借助電影,電視,音樂(lè)等方式來(lái)娛樂(lè)。而今天,以游戲?yàn)榇淼碾娮訆蕵?lè)正成為主流娛樂(lè)方式。因?yàn)镃PU以及顯卡等設(shè)備的高速發(fā)展,為人們開(kāi)發(fā)出更加炫目多彩的游戲提供了可能。時(shí)代的發(fā)展,社會(huì)的進(jìn)步,/科學(xué)技術(shù)正以日新月異的速度飛速的向前發(fā)展。計(jì)算機(jī)技術(shù)的發(fā)展更是迅速而且廣泛。可以說(shuō),計(jì)算機(jī)已經(jīng)涉及到現(xiàn)代絕大部分行業(yè)。目前紛繁復(fù)雜的游戲軟件比比皆是,無(wú)論在線(xiàn)的網(wǎng)路游戲還是桌面游戲,二維的還是三維立體空間的,多由單機(jī)版游戲孕育而來(lái)。學(xué)習(xí)簡(jiǎn)單的單機(jī)版游戲的制作,有利于初學(xué)者了解到游戲制作的理念。目前不論是在國(guó)內(nèi)還是世界范圍內(nèi),游戲產(chǎn)業(yè)都如雨后的春筍,蓬勃發(fā)展,越來(lái)越多更具娛樂(lè)性的游戲產(chǎn)品被開(kāi)發(fā)出來(lái)。
二. 國(guó)內(nèi)外的發(fā)展現(xiàn)狀
96,97年的國(guó)產(chǎn)游戲產(chǎn)品是單機(jī)版的游戲,在當(dāng)時(shí)的市場(chǎng)上雖然品質(zhì)和檔次不如外來(lái)產(chǎn)品,但也占有一定的市場(chǎng),例如《仙劍奇?zhèn)b傳》、《三國(guó)志》等系列帶有鮮明中國(guó)特色與氣息的游戲在市場(chǎng)上掀起了一波高潮。1998年聯(lián)眾與中國(guó)游戲中心等老牌的游戲平臺(tái)的推出標(biāo)志著電腦游戲在中國(guó)的開(kāi)荒與生根。但是到了1999年在沒(méi)有形成主流產(chǎn)品的情況下,政策不明朗,包括開(kāi)發(fā)資金出現(xiàn)問(wèn)題等原因國(guó)產(chǎn)游戲開(kāi)始走下坡路。一直到了2000年,網(wǎng)絡(luò)游戲問(wèn)世并且很快流行起來(lái)我國(guó)的游戲行業(yè)才又漸漸的復(fù)蘇,但是由于投入差距太大,起步晚等原因與外國(guó)游戲相對(duì)而言并沒(méi)有競(jìng)爭(zhēng)力。
時(shí)至今日,網(wǎng)絡(luò)游戲走入盛世,成為了一部分人休閑娛樂(lè)的主要行為。國(guó)內(nèi)網(wǎng)易、騰訊、九城、完美等公司百花齊放,國(guó)產(chǎn)網(wǎng)游漸漸走入國(guó)際市場(chǎng),而且基于網(wǎng)絡(luò)的發(fā)展真正實(shí)現(xiàn)了網(wǎng)絡(luò)全球化,網(wǎng)絡(luò)游戲也是遍布全球,全球同玩一款游戲的現(xiàn)象比比皆是。大量海外游戲走入中國(guó)市場(chǎng),電腦游戲百花紛呈,隨著經(jīng)濟(jì)的進(jìn)步,計(jì)算機(jī)科技的發(fā)展,這一現(xiàn)象將愈演愈烈。
三.可行性分析
(1)技術(shù)可行性
主要分析技術(shù)要求的技術(shù)可能性可以完成開(kāi)發(fā)任務(wù),硬件和軟件可以滿(mǎn)足開(kāi)發(fā)人員的需求。功能強(qiáng)大的JetBrains是該軟件中使用的開(kāi)發(fā)工具。
PyCharm 2019.1.3 x64,強(qiáng)大的擴(kuò)展能力是該軟件的特性,該軟件對(duì)于飛機(jī)大戰(zhàn)游戲的編寫(xiě)及完善有良好的支持效果,也是眾多Pythoner的喜愛(ài)編譯器。隨著互聯(lián)網(wǎng)行業(yè)的迅猛發(fā)展,軟件開(kāi)發(fā)平臺(tái)及硬件技術(shù)同時(shí)不斷更新進(jìn)步。大容量、可靠性的提高、低價(jià)格也使得軟件開(kāi)發(fā)是可行的。本游戲的編譯需求完全可以由Pycharm編譯器承擔(dān)。
綜合以上情況及考慮,本游戲的開(kāi)發(fā)在技術(shù)上是完全可行的。
(2)經(jīng)濟(jì)可行性
由于本游戲較為小型輕便,開(kāi)發(fā)成本較低。此外,該軟件穩(wěn)定、后期維護(hù)簡(jiǎn)單、實(shí)用,一旦開(kāi)發(fā)完成即可長(zhǎng)期使用。當(dāng)用戶(hù)有了新的需求時(shí),只需要根據(jù)需求,在原有代碼基礎(chǔ)上進(jìn)行更改,維護(hù)成本較低。
綜合以上情況及靠背,本游戲在經(jīng)濟(jì)上是完全可接受的。
(3)社會(huì)可行性
法律因素:本游戲是本人處于興趣愛(ài)好,獨(dú)立完成開(kāi)發(fā)的。游戲基于Python完成,同時(shí)借鑒市場(chǎng)上同類(lèi)軟件的功能,收集并歸納用戶(hù)需求,制訂設(shè)計(jì)思路,結(jié)合實(shí)際中存在的游戲?qū)嶓w,進(jìn)行創(chuàng)新及開(kāi)發(fā)的。
用戶(hù)使用可行性:本游戲?qū)τ脩?hù)的要求,沒(méi)有復(fù)雜繁瑣的操作,簡(jiǎn)單易用。使用軟件的管理員, 在了解了簡(jiǎn)單的流程后就可以對(duì)后臺(tái)進(jìn)行管理,沒(méi)有額外的學(xué)習(xí)使用環(huán)節(jié),節(jié)約成本。
由以上分析可知,本游戲在社會(huì)可行性方面是完全可行的。
四. 總體設(shè)計(jì)原則
總體設(shè)計(jì)原則的提出是為了確保系統(tǒng)建設(shè)成功,并為系統(tǒng)的可持續(xù)發(fā)展做出規(guī)劃。因此在系統(tǒng)設(shè)計(jì)時(shí),遵守以下原則:
簡(jiǎn)單性:實(shí)現(xiàn)游戲需求的前提下,盡可能的保證游戲簡(jiǎn)單易操作。一方面,簡(jiǎn)單的操作會(huì)使增進(jìn)游戲體驗(yàn),另一方面操作過(guò)于復(fù)雜時(shí),游戲?qū)崿F(xiàn)更易引入問(wèn)題及漏洞。
針對(duì)性:本項(xiàng)目是選用Python作為編程語(yǔ)言的飛機(jī)大戰(zhàn)游戲,用明確項(xiàng)目需求為目標(biāo),具體需求具體實(shí)現(xiàn),有很強(qiáng)的針對(duì)性。
實(shí)用性:飛機(jī)大戰(zhàn)是一款優(yōu)秀的休閑娛樂(lè)軟件,從該系列游戲誕生以來(lái)就深受玩家的喜愛(ài),具有娛樂(lè)身心、放松心情、減緩壓力。而且由于該游戲較為普及,大多數(shù)玩家都熟知游戲操作方式,更樂(lè)于使用這一游戲,因此該游戲具有很強(qiáng)的實(shí)用性。
一致性:本游戲的飛機(jī)采用的是同一種畫(huà)風(fēng)的飛機(jī),且多種飛機(jī)類(lèi)是由飛機(jī)基類(lèi)繼承得來(lái)的,具有較高的視覺(jué)一致性。登入界面采用tkinter模塊,主界面采用pygame模塊進(jìn)行編寫(xiě),主界面上的元素統(tǒng)使用標(biāo)簽插入,具有較高的功能一致性。
五.需求分析
游戲的基本設(shè)定
用戶(hù)注冊(cè)與登入
1.用戶(hù)登入于注冊(cè)界面:
2.注冊(cè)時(shí)如果用戶(hù)已經(jīng)存在,會(huì)彈出警告界面:
3.登入時(shí)如果用戶(hù)不存在,會(huì)彈出警告界面:
點(diǎn)擊是則會(huì)進(jìn)入注冊(cè)界面。
4.如果用戶(hù)名或密碼為空,會(huì)彈出警告界面:
游戲開(kāi)始界面:
游戲幫助:主要介紹游戲的玩法,內(nèi)置返回鍵。
關(guān)于:作者說(shuō)明與簡(jiǎn)單游戲聲明,內(nèi)置返回鍵。
1、敵方共有大中小3款飛機(jī),分別為高中低三中速度。
2、消滅飛機(jī)需要1發(fā)子彈,中飛機(jī)需要8發(fā)子彈,大飛機(jī)需要20發(fā)子彈;
3、加載背景圖片和背景音樂(lè)加載進(jìn)去,其中背景音樂(lè)要循環(huán)播放。
循環(huán)播放只需要設(shè)置 pygame.mixer.music.play(-1)
4、每消滅一架飛機(jī)得1000分,中飛機(jī)4000分,打飛機(jī)10000分;
5、每隔30秒有一個(gè)隨機(jī)的道具補(bǔ)給,分為兩種道具,全屏炸彈和雙倍子彈;
6、全屏炸彈最多只能存放3枚,雙倍子彈可以維持時(shí)間為18秒;
7、游戲?qū)⒏鶕?jù)分?jǐn)?shù)來(lái)逐漸提高難度。難度的提高表現(xiàn)為飛機(jī)數(shù)量的增多以及速度的加快。
8、實(shí)時(shí)顯示分?jǐn)?shù):實(shí)時(shí)顯示玩家得分,規(guī)則如下:
擊落小中大敵機(jī)分別可以獲得1000,6000,10000分
我們現(xiàn)在main 函數(shù)中添加一個(gè) score 變量統(tǒng)計(jì)用戶(hù)的得分,并設(shè)置顯示分?jǐn)?shù)的字體,我們已經(jīng)放在素材庫(kù)的 font 文件夾中了。
(這里要注意的是,你的字體所放的文件路徑中,不能出現(xiàn)中文!!!
然后在大型敵機(jī)墜機(jī)要重建之前加10000分,中小型敵機(jī)同理。
然后在繪制我方飛機(jī)時(shí)把分?jǐn)?shù)繪制到界面上。
9、(1)我方飛機(jī)
創(chuàng)建一個(gè)名為 myplane 的模塊,然后把我方飛機(jī)的所有屬性和方法定義在里邊。
main 模塊中響應(yīng)用戶(hù)的鍵盤(pán)操作,響應(yīng)用戶(hù)的鍵盤(pán)操作有兩種方法:
【1】、通過(guò)檢測(cè)事件消息,檢測(cè)到如果有 KEYDOWN 或者 KEYUP 事件,我們就知道是用戶(hù)按下了鍵盤(pán)按鍵。(這是我們之前常用的一種方法)
【2】、調(diào)用 key 模塊里的 get_pressed() 方法,會(huì)返回一個(gè)序列,該序列包含鍵盤(pán)上所有按鍵的布爾類(lèi)型的值,如果這個(gè)值是True 的話(huà),表示該按鍵被按下。
我們這里有一個(gè)建議:對(duì)于檢測(cè)偶然觸發(fā)的鍵盤(pán)事件,我們推薦使用方法1,例如該游戲中會(huì)設(shè)置一個(gè)全屏炸彈,按下空格鍵時(shí)爆炸,這是偶然觸發(fā)的,沒(méi)有經(jīng)常觸發(fā),這時(shí)使用第1種方法較好;對(duì)于頻繁觸發(fā)的鍵盤(pán)事件,我們則建議使用第二種方法,例如控制飛機(jī)移動(dòng)的4個(gè)方向鍵,我們就使用方法2。
(2)我方飛機(jī)移動(dòng)分為單向移動(dòng)與雙向移動(dòng),如果玩家同時(shí)按下兩個(gè)方向鍵或(A,S,W,E)鍵就會(huì)同時(shí)朝綜合方向移動(dòng),實(shí)現(xiàn)方法是為我方飛機(jī)類(lèi)設(shè)置了8個(gè)方向的移動(dòng)方法,根據(jù)按鍵調(diào)用對(duì)應(yīng)的。
(3)為了增加我方飛機(jī)的動(dòng)態(tài)效果,我們可以通過(guò)兩張圖片(me1,png 和 me2.png)的切換來(lái)實(shí)現(xiàn)飛機(jī)噴氣的效果。在 myplane.py中加多一種圖片。
(4)創(chuàng)建敵機(jī):
敵機(jī)分為小中大三個(gè)尺寸,它們的速度一次就是快中慢(越小越快),在頁(yè)面上方,我們就需要隨機(jī)創(chuàng)建一些敵機(jī),可以通過(guò)在頁(yè)面外部上方5個(gè)屏幕高度范圍內(nèi)隨機(jī)生成一個(gè)敵機(jī)以保證不讓敵機(jī)在一排出現(xiàn)。
(3)敵方飛機(jī)
敵方飛機(jī)從屏幕頂端出現(xiàn),向下移動(dòng)至窗口上部,左右移動(dòng)射擊,射擊子彈數(shù)量達(dá)到一定值后,添加向下移動(dòng)。
10.碰撞檢測(cè):
敵方飛機(jī)和我方飛機(jī)發(fā)生碰撞時(shí),兩方應(yīng)該是玉石俱焚的,所以在完成之前的基礎(chǔ)操作后,現(xiàn)在要為每一個(gè)類(lèi)增加撞擊時(shí)發(fā)生的慘烈畫(huà)面。導(dǎo)入慘烈畫(huà)面的圖片。
碰撞檢測(cè)使用 spritecollide() 方法:
碰撞和墜機(jī)是實(shí)現(xiàn)了,但是我們發(fā)現(xiàn),兩個(gè)飛機(jī)還沒(méi)真正的接觸就已經(jīng)撞上了,這是為什么呢?
這是因?yàn)槲覀兪褂昧似胀ǖ?spritecollide() 方法,這個(gè)方法默認(rèn)情況下是以圖片的矩形位置區(qū)域作為檢測(cè)的范圍,而我們飛機(jī)的矩形范圍遠(yuǎn)大于自身,但是我們完全是可以做得更好的,我們可以做到完美的碰撞檢測(cè),怎么實(shí)現(xiàn)呢?
sprite 模塊里有一個(gè)叫做 collide_mask 的函數(shù)可以利用,這個(gè)函數(shù)要求檢測(cè)對(duì)象擁有一個(gè) mask 屬性,這個(gè)屬性就是用于指定檢測(cè)的范圍,關(guān)于 mask,Pygame 還專(zhuān)門(mén)寫(xiě)了一個(gè) mask 模塊,其中有一個(gè)叫做 from_surface() 的函數(shù),可以將 Surface 對(duì)象中非透明的部分標(biāo)記為 mask 并返回。
首先,給每個(gè)類(lèi)加上 mask 屬性。
self.mask = pygame.mask.from_sueface(self.image) #將非透明部分標(biāo)記為mask。
然后在main 函數(shù)中修改碰撞檢測(cè)代碼,指定檢測(cè)方法為 pygame.sprite.collide_mask。
但是:
剛才我們實(shí)際上是存在很明顯的Bug,那樣操作將導(dǎo)致部分音效無(wú)法正常播放,你要畫(huà)它墜機(jī)的圖片,需要好多幀,但是這里你重復(fù)的播放了好多次它墜機(jī)的音效,一個(gè)飛機(jī)墜機(jī)只需要播放一次音效即可,你要播放很多次,導(dǎo)致的結(jié)果就是你把所有音效的通道都占滿(mǎn)了,因?yàn)镻ygame 默認(rèn)只有8條音效的通道。詳細(xì)請(qǐng)看源代碼實(shí)現(xiàn)。
11、定義子彈:
子彈有兩種:一種是一次只發(fā)射一顆,一種是補(bǔ)給發(fā)放的超級(jí)子彈,一次可以射2顆子彈。子彈的運(yùn)動(dòng)軌跡是直線(xiàn)向上的,速度要略快于飛機(jī)的速度,子彈如果超出屏幕范圍的話(huà),我們就重新繪制子彈,飛機(jī)在哪里,子彈就重新繪制在哪里,擊中敵機(jī)的時(shí)候,子彈也是需要重新繪制的。因此,我們給子彈添加一個(gè) active 屬性,來(lái)判斷子彈是否需要重新繪制,我們單獨(dú)定義一個(gè) bullet 模塊。
設(shè)置每10幀發(fā)射一顆子彈。
接下來(lái)檢測(cè)射出去的子彈是否擊中敵機(jī),擊中的話(huà),敵機(jī)和子彈的 active 會(huì)設(shè)置為 False:
到目前為止,這樣我們基本上就戰(zhàn)無(wú)不勝了。無(wú)論是中型敵機(jī)還是大型敵機(jī),我們直接一槍就把它秒殺了,這就顯得敵機(jī)太弱了吧。
因此,先給中型敵機(jī)和大型敵機(jī)添加一個(gè) energy 的屬性,顯示還有多少生命值。
之后,我們就來(lái)修改main 模塊,每當(dāng)中大型敵機(jī)被子彈擊中的時(shí)候,我們先將其enery 屬性的值減1,減到為0時(shí),才讓敵機(jī)墜機(jī)。我們還可以為中大型敵機(jī)增加血槽的顯示功能,這樣子可以更直觀的讓玩家知道敵機(jī)還剩多少生命值,當(dāng)中型敵機(jī)和大型敵機(jī)被子彈擊中時(shí),但不至于墜機(jī)時(shí),這時(shí)候應(yīng)該是要有特效的。
我們現(xiàn)在 enemy 模塊中增加特效的圖片,并且增加一個(gè)用于檢測(cè)是否被擊中的 hit 屬性。
然后我們?cè)谧訌棑糁兄行突虼笮惋w機(jī)時(shí),將hit 屬性的值改為T(mén)rue
然后再繪制中型或大型飛機(jī)時(shí),就需要根據(jù)hit 作調(diào)整。
12、暫停功能:
我們?cè)诮缑嬗疑辖翘砑右粋€(gè)暫停符。
總共有4張圖片,兩張表示要暫停,兩個(gè)表示要恢復(fù)游戲。兩組各有一張深色的和淺色的,當(dāng)鼠標(biāo)移到圖像上方時(shí)(并沒(méi)有點(diǎn)擊鼠標(biāo)),圖片會(huì)加深,起到一個(gè)提示的效果。
我們通過(guò)響應(yīng) MOUSEBUTTONDOWN 的事件可以知道用戶(hù)是否點(diǎn)下鼠標(biāo),在點(diǎn)下鼠標(biāo)那一剎那,我們?nèi)カ@得鼠標(biāo)的位置,就可以知道玩家是否點(diǎn)下了暫停按鈕。通過(guò)響應(yīng) MOUSEMOTION 事件,我們可以改變按鈕的樣式。
在main函數(shù)里加一個(gè) pause 變量作為判斷暫停的標(biāo)志。
接下來(lái)我們響應(yīng) MOUSEBUTTONDOWN 事件 和 MOUSEMOTION 事件:
在點(diǎn)擊一次暫停按鈕后必須要移動(dòng)鼠標(biāo)才會(huì)進(jìn)行更改,使鼠標(biāo)在圖標(biāo)在點(diǎn)下的時(shí)候能立即更改。
13、難度提升:
因?yàn)閿橙艘怀刹蛔兊穆某霈F(xiàn),對(duì)于玩家來(lái)說(shuō)是無(wú)法忍受的,玩家希望的游戲體驗(yàn)是刺激。我們要讓游戲的難度隨著玩家的得分增加而增加,這里將游戲難度劃分為 5 個(gè)級(jí)別,每提升一個(gè)級(jí)別,就會(huì)增加一些敵機(jī)或者說(shuō)增加敵機(jī)的移動(dòng)速度。
但是考慮到,如果 level 到 5 的時(shí)候,敵機(jī)的密集度就會(huì)很大,玩家就很容易陷入不利的局面,這就需要給玩家提供大殺招:全屏爆炸。
這個(gè)大殺招的觸發(fā)是通過(guò)空格鍵來(lái)觸發(fā)的,初始化情況下,我們帶著3顆全屏炸彈,我們可以通過(guò)每30秒一次的補(bǔ)給獲得,但是最多你的飛機(jī)只能裝載3顆。
由于觸發(fā)全屏炸彈是屬于偶然事件,因此我們通過(guò)響應(yīng) KEYDOWN事件,再檢測(cè) event.key 是否為 K_SPACE 就可以了。
在全屏炸彈用完之后,我們可以通過(guò)每30秒一次的補(bǔ)給來(lái)獲得,補(bǔ)給包有自己的圖片,也有自己的運(yùn)行軌跡(由上而下),新建兩個(gè)類(lèi)來(lái)實(shí)現(xiàn),實(shí)例化補(bǔ)給包并這只補(bǔ)給包發(fā)放定時(shí)器,定時(shí)器每30秒觸發(fā)一次。
超級(jí)子彈,當(dāng)我們接收到超級(jí)子彈補(bǔ)給的時(shí)候,子彈由原來(lái)的單發(fā)變成了雙發(fā),子彈的速度相對(duì)也會(huì)提高一些。超級(jí)子彈的使用時(shí)長(zhǎng)為18秒,過(guò)了這個(gè)時(shí)間,就自動(dòng)變?yōu)槠胀ㄗ訌棥R虼宋覀冃枰粋€(gè)超級(jí)子彈的定時(shí)器,另外,我們還需要一個(gè)變量來(lái)表示子彈的類(lèi)型,然后然后生成超級(jí)子彈。
14、玩家敵機(jī)架數(shù)
人非圣賢,孰能無(wú)惑。玩游戲也是這樣,不可能一個(gè)人玩一個(gè)游戲能一次不死,玩到地老天荒,就算有,那也是玩游戲的天才,這樣的天才,萬(wàn)中無(wú)一,所以我們需要給玩家多次的機(jī)會(huì),哪怕失敗了,誒,那也沒(méi)有關(guān)系,你還有多次的機(jī)會(huì)。
我們定義玩家有3次機(jī)會(huì),我們就需要在main模塊中 加多一個(gè) life_num 的變量,表示生命數(shù)量。這里的話(huà),有一個(gè)小細(xì)節(jié),就是每次我方飛機(jī)犧牲后,你在誕生的位置恰好有一個(gè)敵機(jī),那么會(huì)直接導(dǎo)致我方飛機(jī)直接掛掉,因此,我們需要設(shè)定每次誕生有3秒鐘的安全期,做法其實(shí)也不難。
我們只需要在 Myplane 類(lèi)中加入一個(gè)屬性,命名為 invincible ,在每次碰撞時(shí)先檢測(cè)該屬性的值。
15、結(jié)束游戲
結(jié)束畫(huà)面,游戲結(jié)束畫(huà)面會(huì)顯示歷史最高分和此次分?jǐn)?shù),并提供玩家兩個(gè)選擇:重新游戲 或者 退出游戲。刷新紀(jì)錄是我們玩家的追求,歷史最高分是存放在 record.txt 文件中的。
游戲結(jié)束的判定:
游戲結(jié)束的判定分為兩種:第一種是用戶(hù)單擊退出游戲按鈕,退出游戲會(huì)觸發(fā)綁定事件,調(diào)用積分模塊,進(jìn)行積分存儲(chǔ),然后程序會(huì)強(qiáng)制結(jié)束。第二種則是己方飛機(jī)受到攻擊生命數(shù)為0時(shí)(起初為3),游戲界面給出游戲結(jié)束提示,然后調(diào)用積分模塊,并提供重新開(kāi)始與退出游戲,如果用戶(hù)成績(jī)超過(guò)最高記錄,系統(tǒng)將會(huì)記錄用戶(hù)的賬號(hào)和成績(jī)。
六.系統(tǒng)測(cè)試
(1)功能檢查:根據(jù)需求與實(shí)現(xiàn)產(chǎn)品,驗(yàn)證功能需求實(shí)現(xiàn)情況,檢查功能實(shí)現(xiàn)是否有遺漏偏差。
(2)數(shù)據(jù)檢查:主要對(duì)用戶(hù)、積分信息進(jìn)行檢查,檢查數(shù)據(jù)庫(kù)與程序之間的交互部分。
(3)性能檢查:針對(duì)于本次的飛機(jī)大戰(zhàn)游戲,該項(xiàng)主要是檢查游戲幀率,是否存在卡頓現(xiàn)象
(4)穩(wěn)定性檢查:由于事件讀取是從鼠標(biāo)鍵盤(pán)上獲取的,而導(dǎo)致后臺(tái)響應(yīng)頻率較高,所以要檢查程序是否出現(xiàn)運(yùn)行終止、重啟等現(xiàn)象
總結(jié)與展望
本次課題研究是基于興趣愛(ài)好的一次實(shí)踐,興趣愛(ài)好給予了我很大的動(dòng)力,這也使我在遇到各種問(wèn)題時(shí),總能通過(guò)多種渠道找到解決方案。雖然是第一次使用Python開(kāi)發(fā)游戲,在一邊進(jìn)行學(xué)習(xí),一邊進(jìn)行游戲開(kāi)發(fā)和設(shè)計(jì)過(guò)程中,遇到了很多問(wèn)題,也走了不少?gòu)澛?#xff0c;但鍛煉了自我解決問(wèn)題的能力。這次課題研究不僅讓我對(duì)Python有了進(jìn)一步的了解,而且還大大提高了編程能力,鍛煉了自己的邏輯思維和整體設(shè)計(jì)的能力,收獲頗多。通過(guò)這次課題研究,我意識(shí)到完整的軟件開(kāi)發(fā)思路是非常重要的,它關(guān)系到我們開(kāi)發(fā)過(guò)程能否順利實(shí)現(xiàn)。在項(xiàng)目開(kāi)始之前,必須有軟件工程的系統(tǒng)化的知識(shí)體系,不僅如此,還應(yīng)包括軟件結(jié)構(gòu)位置、代碼編寫(xiě)和模塊劃分和整體布局,只有做完這些步驟,才能逐步開(kāi)發(fā)出想要實(shí)現(xiàn)的功能。這樣定能達(dá)到事半功倍的效果。
整個(gè)軟件按照計(jì)劃大致實(shí)現(xiàn)了游戲的具體功能,雖然游戲能正常運(yùn)行,不過(guò)因所學(xué)知識(shí)及開(kāi)發(fā)周期有限,還有很多需要改進(jìn)的地方,有待于日后進(jìn)一步的改進(jìn)和完善。
經(jīng)過(guò)匯總測(cè)試人員的建議,本游戲應(yīng)該完善的功能如下:
(1)BOSS未設(shè)置過(guò)多技能,沒(méi)有設(shè)置過(guò)關(guān)動(dòng)畫(huà)。
希望日后,我能夠有能力對(duì)這個(gè)游戲進(jìn)行改進(jìn),以?xún)?yōu)化系統(tǒng),完善玩家體驗(yàn)、使游戲更加流暢美觀。
源代碼+素材:
關(guān)注公眾號(hào)【輕松玩編程】,回復(fù)飛機(jī)大戰(zhàn)即可獲取源代碼+素材。
關(guān)注公眾號(hào)【輕松玩編程】回復(fù)關(guān)鍵字激活碼即可獲取:全家桶通用激活碼(激活碼支持idea,pycharm,webstorm,phpstorm…激活)定期更新。適用于最新及以下版本。(無(wú)需破解和修改hosts,如果破解過(guò)請(qǐng)卸載重新安裝官方原版,如果修改過(guò)hosts,請(qǐng)刪除你添加的網(wǎng)址,然后重新激活)
回復(fù)關(guān)鍵字“電子書(shū)”,“計(jì)算機(jī)資源”,“Java從入門(mén)到進(jìn)階”,”JavaScript教程“,“算法”,“Python學(xué)習(xí)資源”,“人工智能”等即可獲取學(xué)習(xí)資源。
總結(jié)
以上是生活随笔為你收集整理的python实现飞机大战源代码+素材+项目分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python进阶实战 1.0 :爬取豆瓣
- 下一篇: python测量镜头到目标距离,如果从相