日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python实现飞机大战源代码+素材+项目分析

發布時間:2023/12/18 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实现飞机大战源代码+素材+项目分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡述:游戲具有用戶注冊,操作說明,顯示最高分和用戶名,暫停游戲,發送補給,難度升級,音效,實時顯示分數和最終得分等效果。

文章目錄

  • 一.項目分析
    • Python程序設計項目
    • 一.系統研究的背景及意義
    • 二. 國內外的發展現狀
    • 三.可行性分析
    • 四. 總體設計原則
    • 五.需求分析
    • 六.系統測試
  • 源代碼+素材:

一.項目分析

Python程序設計項目

題 目 飛機大戰
院 系 信息科學與技術學院
專 業 計算機科學與技術
姓 名 星空
班級學號 37
指導教師 xxx

二O一九年十二月

一.系統研究的背景及意義

當今社會是一個信息社會,一個知識經濟的年代。自從世界上第一臺計算機ENIAC于1946年問世到現在,計算機業飛速發展。隨著以全球信息網絡普及和全球信息共享為標志的“全球信息網絡革命”的蓬勃興起,世界已然進入在計算機信息管理領域的激烈競爭的時代,計算機,自然而然的變成了人們生活中必不可少的一部分。
過去,人們只要是借助電影,電視,音樂等方式來娛樂。而今天,以游戲為代表的電子娛樂正成為主流娛樂方式。因為CPU以及顯卡等設備的高速發展,為人們開發出更加炫目多彩的游戲提供了可能。時代的發展,社會的進步,/科學技術正以日新月異的速度飛速的向前發展。計算機技術的發展更是迅速而且廣泛。可以說,計算機已經涉及到現代絕大部分行業。目前紛繁復雜的游戲軟件比比皆是,無論在線的網路游戲還是桌面游戲,二維的還是三維立體空間的,多由單機版游戲孕育而來。學習簡單的單機版游戲的制作,有利于初學者了解到游戲制作的理念。目前不論是在國內還是世界范圍內,游戲產業都如雨后的春筍,蓬勃發展,越來越多更具娛樂性的游戲產品被開發出來。

二. 國內外的發展現狀

96,97年的國產游戲產品是單機版的游戲,在當時的市場上雖然品質和檔次不如外來產品,但也占有一定的市場,例如《仙劍奇俠傳》、《三國志》等系列帶有鮮明中國特色與氣息的游戲在市場上掀起了一波高潮。1998年聯眾與中國游戲中心等老牌的游戲平臺的推出標志著電腦游戲在中國的開荒與生根。但是到了1999年在沒有形成主流產品的情況下,政策不明朗,包括開發資金出現問題等原因國產游戲開始走下坡路。一直到了2000年,網絡游戲問世并且很快流行起來我國的游戲行業才又漸漸的復蘇,但是由于投入差距太大,起步晚等原因與外國游戲相對而言并沒有競爭力。
時至今日,網絡游戲走入盛世,成為了一部分人休閑娛樂的主要行為。國內網易、騰訊、九城、完美等公司百花齊放,國產網游漸漸走入國際市場,而且基于網絡的發展真正實現了網絡全球化,網絡游戲也是遍布全球,全球同玩一款游戲的現象比比皆是。大量海外游戲走入中國市場,電腦游戲百花紛呈,隨著經濟的進步,計算機科技的發展,這一現象將愈演愈烈。

三.可行性分析

(1)技術可行性
主要分析技術要求的技術可能性可以完成開發任務,硬件和軟件可以滿足開發人員的需求。功能強大的JetBrains是該軟件中使用的開發工具。
PyCharm 2019.1.3 x64,強大的擴展能力是該軟件的特性,該軟件對于飛機大戰游戲的編寫及完善有良好的支持效果,也是眾多Pythoner的喜愛編譯器。隨著互聯網行業的迅猛發展,軟件開發平臺及硬件技術同時不斷更新進步。大容量、可靠性的提高、低價格也使得軟件開發是可行的。本游戲的編譯需求完全可以由Pycharm編譯器承擔。
綜合以上情況及考慮,本游戲的開發在技術上是完全可行的。
(2)經濟可行性
由于本游戲較為小型輕便,開發成本較低。此外,該軟件穩定、后期維護簡單、實用,一旦開發完成即可長期使用。當用戶有了新的需求時,只需要根據需求,在原有代碼基礎上進行更改,維護成本較低。
綜合以上情況及靠背,本游戲在經濟上是完全可接受的。
(3)社會可行性
法律因素:本游戲是本人處于興趣愛好,獨立完成開發的。游戲基于Python完成,同時借鑒市場上同類軟件的功能,收集并歸納用戶需求,制訂設計思路,結合實際中存在的游戲實體,進行創新及開發的。
用戶使用可行性:本游戲對用戶的要求,沒有復雜繁瑣的操作,簡單易用。使用軟件的管理員, 在了解了簡單的流程后就可以對后臺進行管理,沒有額外的學習使用環節,節約成本。
由以上分析可知,本游戲在社會可行性方面是完全可行的。

四. 總體設計原則

總體設計原則的提出是為了確保系統建設成功,并為系統的可持續發展做出規劃。因此在系統設計時,遵守以下原則:
簡單性:實現游戲需求的前提下,盡可能的保證游戲簡單易操作。一方面,簡單的操作會使增進游戲體驗,另一方面操作過于復雜時,游戲實現更易引入問題及漏洞。
針對性:本項目是選用Python作為編程語言的飛機大戰游戲,用明確項目需求為目標,具體需求具體實現,有很強的針對性。
實用性:飛機大戰是一款優秀的休閑娛樂軟件,從該系列游戲誕生以來就深受玩家的喜愛,具有娛樂身心、放松心情、減緩壓力。而且由于該游戲較為普及,大多數玩家都熟知游戲操作方式,更樂于使用這一游戲,因此該游戲具有很強的實用性。
一致性:本游戲的飛機采用的是同一種畫風的飛機,且多種飛機類是由飛機基類繼承得來的,具有較高的視覺一致性。登入界面采用tkinter模塊,主界面采用pygame模塊進行編寫,主界面上的元素統使用標簽插入,具有較高的功能一致性。

五.需求分析

游戲的基本設定
用戶注冊與登入
1.用戶登入于注冊界面:


2.注冊時如果用戶已經存在,會彈出警告界面:


3.登入時如果用戶不存在,會彈出警告界面:

點擊是則會進入注冊界面。
4.如果用戶名或密碼為空,會彈出警告界面:


游戲開始界面:


游戲幫助:主要介紹游戲的玩法,內置返回鍵。

關于:作者說明與簡單游戲聲明,內置返回鍵。

1、敵方共有大中小3款飛機,分別為高中低三中速度。
2、消滅飛機需要1發子彈,中飛機需要8發子彈,大飛機需要20發子彈;
3、加載背景圖片和背景音樂加載進去,其中背景音樂要循環播放。
循環播放只需要設置 pygame.mixer.music.play(-1)
4、每消滅一架飛機得1000分,中飛機4000分,打飛機10000分;
5、每隔30秒有一個隨機的道具補給,分為兩種道具,全屏炸彈和雙倍子彈;
6、全屏炸彈最多只能存放3枚,雙倍子彈可以維持時間為18秒;
7、游戲將根據分數來逐漸提高難度。難度的提高表現為飛機數量的增多以及速度的加快。
8、實時顯示分數:實時顯示玩家得分,規則如下:
擊落小中大敵機分別可以獲得1000,6000,10000分
我們現在main 函數中添加一個 score 變量統計用戶的得分,并設置顯示分數的字體,我們已經放在素材庫的 font 文件夾中了。
(這里要注意的是,你的字體所放的文件路徑中,不能出現中文!!!
然后在大型敵機墜機要重建之前加10000分,中小型敵機同理。
然后在繪制我方飛機時把分數繪制到界面上。
9、(1)我方飛機
創建一個名為 myplane 的模塊,然后把我方飛機的所有屬性和方法定義在里邊。
main 模塊中響應用戶的鍵盤操作,響應用戶的鍵盤操作有兩種方法:
【1】、通過檢測事件消息,檢測到如果有 KEYDOWN 或者 KEYUP 事件,我們就知道是用戶按下了鍵盤按鍵。(這是我們之前常用的一種方法)
【2】、調用 key 模塊里的 get_pressed() 方法,會返回一個序列,該序列包含鍵盤上所有按鍵的布爾類型的值,如果這個值是True 的話,表示該按鍵被按下。
我們這里有一個建議:對于檢測偶然觸發的鍵盤事件,我們推薦使用方法1,例如該游戲中會設置一個全屏炸彈,按下空格鍵時爆炸,這是偶然觸發的,沒有經常觸發,這時使用第1種方法較好;對于頻繁觸發的鍵盤事件,我們則建議使用第二種方法,例如控制飛機移動的4個方向鍵,我們就使用方法2。
(2)我方飛機移動分為單向移動與雙向移動,如果玩家同時按下兩個方向鍵或(A,S,W,E)鍵就會同時朝綜合方向移動,實現方法是為我方飛機類設置了8個方向的移動方法,根據按鍵調用對應的。
(3)為了增加我方飛機的動態效果,我們可以通過兩張圖片(me1,png 和 me2.png)的切換來實現飛機噴氣的效果。在 myplane.py中加多一種圖片。

(4)創建敵機:
敵機分為小中大三個尺寸,它們的速度一次就是快中慢(越小越快),在頁面上方,我們就需要隨機創建一些敵機,可以通過在頁面外部上方5個屏幕高度范圍內隨機生成一個敵機以保證不讓敵機在一排出現。

(3)敵方飛機
敵方飛機從屏幕頂端出現,向下移動至窗口上部,左右移動射擊,射擊子彈數量達到一定值后,添加向下移動。
10.碰撞檢測:
敵方飛機和我方飛機發生碰撞時,兩方應該是玉石俱焚的,所以在完成之前的基礎操作后,現在要為每一個類增加撞擊時發生的慘烈畫面。導入慘烈畫面的圖片。
碰撞檢測使用 spritecollide() 方法:
碰撞和墜機是實現了,但是我們發現,兩個飛機還沒真正的接觸就已經撞上了,這是為什么呢?
這是因為我們使用了普通的 spritecollide() 方法,這個方法默認情況下是以圖片的矩形位置區域作為檢測的范圍,而我們飛機的矩形范圍遠大于自身,但是我們完全是可以做得更好的,我們可以做到完美的碰撞檢測,怎么實現呢?

sprite 模塊里有一個叫做 collide_mask 的函數可以利用,這個函數要求檢測對象擁有一個 mask 屬性,這個屬性就是用于指定檢測的范圍,關于 mask,Pygame 還專門寫了一個 mask 模塊,其中有一個叫做 from_surface() 的函數,可以將 Surface 對象中非透明的部分標記為 mask 并返回。
首先,給每個類加上 mask 屬性。
self.mask = pygame.mask.from_sueface(self.image) #將非透明部分標記為mask。
然后在main 函數中修改碰撞檢測代碼,指定檢測方法為 pygame.sprite.collide_mask。
但是:
剛才我們實際上是存在很明顯的Bug,那樣操作將導致部分音效無法正常播放,你要畫它墜機的圖片,需要好多幀,但是這里你重復的播放了好多次它墜機的音效,一個飛機墜機只需要播放一次音效即可,你要播放很多次,導致的結果就是你把所有音效的通道都占滿了,因為Pygame 默認只有8條音效的通道。詳細請看源代碼實現。
11、定義子彈:
子彈有兩種:一種是一次只發射一顆,一種是補給發放的超級子彈,一次可以射2顆子彈。子彈的運動軌跡是直線向上的,速度要略快于飛機的速度,子彈如果超出屏幕范圍的話,我們就重新繪制子彈,飛機在哪里,子彈就重新繪制在哪里,擊中敵機的時候,子彈也是需要重新繪制的。因此,我們給子彈添加一個 active 屬性,來判斷子彈是否需要重新繪制,我們單獨定義一個 bullet 模塊。
設置每10幀發射一顆子彈。
接下來檢測射出去的子彈是否擊中敵機,擊中的話,敵機和子彈的 active 會設置為 False:
到目前為止,這樣我們基本上就戰無不勝了。無論是中型敵機還是大型敵機,我們直接一槍就把它秒殺了,這就顯得敵機太弱了吧。
因此,先給中型敵機和大型敵機添加一個 energy 的屬性,顯示還有多少生命值。
之后,我們就來修改main 模塊,每當中大型敵機被子彈擊中的時候,我們先將其enery 屬性的值減1,減到為0時,才讓敵機墜機。我們還可以為中大型敵機增加血槽的顯示功能,這樣子可以更直觀的讓玩家知道敵機還剩多少生命值,當中型敵機和大型敵機被子彈擊中時,但不至于墜機時,這時候應該是要有特效的。
我們現在 enemy 模塊中增加特效的圖片,并且增加一個用于檢測是否被擊中的 hit 屬性。
然后我們在子彈擊中中型或大型飛機時,將hit 屬性的值改為True
然后再繪制中型或大型飛機時,就需要根據hit 作調整。

12、暫停功能:
我們在界面右上角添加一個暫停符。
總共有4張圖片,兩張表示要暫停,兩個表示要恢復游戲。兩組各有一張深色的和淺色的,當鼠標移到圖像上方時(并沒有點擊鼠標),圖片會加深,起到一個提示的效果。
我們通過響應 MOUSEBUTTONDOWN 的事件可以知道用戶是否點下鼠標,在點下鼠標那一剎那,我們去獲得鼠標的位置,就可以知道玩家是否點下了暫停按鈕。通過響應 MOUSEMOTION 事件,我們可以改變按鈕的樣式。
在main函數里加一個 pause 變量作為判斷暫停的標志。
接下來我們響應 MOUSEBUTTONDOWN 事件 和 MOUSEMOTION 事件:
在點擊一次暫停按鈕后必須要移動鼠標才會進行更改,使鼠標在圖標在點下的時候能立即更改。

13、難度提升:
因為敵人一成不變的慢慢的出現,對于玩家來說是無法忍受的,玩家希望的游戲體驗是刺激。我們要讓游戲的難度隨著玩家的得分增加而增加,這里將游戲難度劃分為 5 個級別,每提升一個級別,就會增加一些敵機或者說增加敵機的移動速度。
但是考慮到,如果 level 到 5 的時候,敵機的密集度就會很大,玩家就很容易陷入不利的局面,這就需要給玩家提供大殺招:全屏爆炸。
這個大殺招的觸發是通過空格鍵來觸發的,初始化情況下,我們帶著3顆全屏炸彈,我們可以通過每30秒一次的補給獲得,但是最多你的飛機只能裝載3顆。
由于觸發全屏炸彈是屬于偶然事件,因此我們通過響應 KEYDOWN事件,再檢測 event.key 是否為 K_SPACE 就可以了。
在全屏炸彈用完之后,我們可以通過每30秒一次的補給來獲得,補給包有自己的圖片,也有自己的運行軌跡(由上而下),新建兩個類來實現,實例化補給包并這只補給包發放定時器,定時器每30秒觸發一次。
超級子彈,當我們接收到超級子彈補給的時候,子彈由原來的單發變成了雙發,子彈的速度相對也會提高一些。超級子彈的使用時長為18秒,過了這個時間,就自動變為普通子彈。因此我們需要一個超級子彈的定時器,另外,我們還需要一個變量來表示子彈的類型,然后然后生成超級子彈。

14、玩家敵機架數
人非圣賢,孰能無惑。玩游戲也是這樣,不可能一個人玩一個游戲能一次不死,玩到地老天荒,就算有,那也是玩游戲的天才,這樣的天才,萬中無一,所以我們需要給玩家多次的機會,哪怕失敗了,誒,那也沒有關系,你還有多次的機會。
我們定義玩家有3次機會,我們就需要在main模塊中 加多一個 life_num 的變量,表示生命數量。這里的話,有一個小細節,就是每次我方飛機犧牲后,你在誕生的位置恰好有一個敵機,那么會直接導致我方飛機直接掛掉,因此,我們需要設定每次誕生有3秒鐘的安全期,做法其實也不難。
我們只需要在 Myplane 類中加入一個屬性,命名為 invincible ,在每次碰撞時先檢測該屬性的值。
15、結束游戲
結束畫面,游戲結束畫面會顯示歷史最高分和此次分數,并提供玩家兩個選擇:重新游戲 或者 退出游戲。刷新紀錄是我們玩家的追求,歷史最高分是存放在 record.txt 文件中的。
游戲結束的判定:
游戲結束的判定分為兩種:第一種是用戶單擊退出游戲按鈕,退出游戲會觸發綁定事件,調用積分模塊,進行積分存儲,然后程序會強制結束。第二種則是己方飛機受到攻擊生命數為0時(起初為3),游戲界面給出游戲結束提示,然后調用積分模塊,并提供重新開始與退出游戲,如果用戶成績超過最高記錄,系統將會記錄用戶的賬號和成績。

六.系統測試

(1)功能檢查:根據需求與實現產品,驗證功能需求實現情況,檢查功能實現是否有遺漏偏差。
(2)數據檢查:主要對用戶、積分信息進行檢查,檢查數據庫與程序之間的交互部分。
(3)性能檢查:針對于本次的飛機大戰游戲,該項主要是檢查游戲幀率,是否存在卡頓現象
(4)穩定性檢查:由于事件讀取是從鼠標鍵盤上獲取的,而導致后臺響應頻率較高,所以要檢查程序是否出現運行終止、重啟等現象
總結與展望
本次課題研究是基于興趣愛好的一次實踐,興趣愛好給予了我很大的動力,這也使我在遇到各種問題時,總能通過多種渠道找到解決方案。雖然是第一次使用Python開發游戲,在一邊進行學習,一邊進行游戲開發和設計過程中,遇到了很多問題,也走了不少彎路,但鍛煉了自我解決問題的能力。這次課題研究不僅讓我對Python有了進一步的了解,而且還大大提高了編程能力,鍛煉了自己的邏輯思維和整體設計的能力,收獲頗多。通過這次課題研究,我意識到完整的軟件開發思路是非常重要的,它關系到我們開發過程能否順利實現。在項目開始之前,必須有軟件工程的系統化的知識體系,不僅如此,還應包括軟件結構位置、代碼編寫和模塊劃分和整體布局,只有做完這些步驟,才能逐步開發出想要實現的功能。這樣定能達到事半功倍的效果。
整個軟件按照計劃大致實現了游戲的具體功能,雖然游戲能正常運行,不過因所學知識及開發周期有限,還有很多需要改進的地方,有待于日后進一步的改進和完善。
經過匯總測試人員的建議,本游戲應該完善的功能如下:
(1)BOSS未設置過多技能,沒有設置過關動畫。
希望日后,我能夠有能力對這個游戲進行改進,以優化系統,完善玩家體驗、使游戲更加流暢美觀。

源代碼+素材:

關注公眾號【輕松玩編程】,回復飛機大戰即可獲取源代碼+素材。

關注公眾號【輕松玩編程】回復關鍵字激活碼即可獲取:全家桶通用激活碼(激活碼支持idea,pycharm,webstorm,phpstorm…激活)定期更新。適用于最新及以下版本。(無需破解和修改hosts,如果破解過請卸載重新安裝官方原版,如果修改過hosts,請刪除你添加的網址,然后重新激活)

回復關鍵字“電子書”,“計算機資源”,“Java從入門到進階”,”JavaScript教程“,“算法”,“Python學習資源”,“人工智能”等即可獲取學習資源。

總結

以上是生活随笔為你收集整理的python实现飞机大战源代码+素材+项目分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。