雷霆战机
前言
多年前,你我在一起"打飛機"。為了實現真正的打飛機,在下一年前踏足帝都學習了無所不能的Python,辣么接下來帶你在倆個小時用200行代碼學會打飛機。
python中提供了一個pygame的模塊能夠讓我們快速編寫一個游戲。接下來,簡要創建一個目錄結構,存放代碼(規范的目錄結構可以讓代碼保持高度的靈活性及可讀性),如下:
""" PlayPlane/ |-- bin/ | |-- main.py 程序運行主體程序 |-- config/ | |-- settings.py 程序配置(例如: 游戲背景音樂的加載等) |-- material 程序素材放置(打飛機游戲素材放置)|-- ... |-- src/ 程序主體模塊存放 | |-- __init__.py | |-- bullet.py 我方飛機發射子彈實現代碼存放 | |-- enemy.py 敵方飛機實現代碼存放 | |-- plane.py 我方飛機實現代碼存放 |-- manage.py 程序啟動文件 |-- README.md """?打飛機啦
一、首先在 config/settings.py 中進行以下功能的實現
游戲素材滑動到文章底部點擊鏈接即可下載
- 游戲初始化
- 游戲混音器初始化
- 背景音樂初始化
- 我方飛機掛了音樂
- 敵方飛機掛了音樂
- 子彈發射音樂
二、小試牛刀
飛機和子彈都是可移動的,那么怎么實現讓它們動起來呢(我方飛機可以玩家進行操控,敵機就是隨機性的出現,子彈暫由我方飛機發射)。
在Pygame中,所有移動對象都可看做是一個精靈(sprite),精靈之間能夠進行相互的交互通信,例如如何讓碰撞檢測更加精準等等。
那么先讓我們先在屏幕上制作一個游戲板,根據 settings.py 配置,并讓它有聲音播放,首先我們在 bin/main.py 中這么寫:
我們可以直接運行它,那么我們會看到以下畫面,并且還會有激情的聲音吆!!!但是我們要將文件配置為絕對路徑才可以運行,因為剛剛在settings中的加載的音樂文件為相對路徑。
?DEMO接下來呢,我們將要制作我方飛機,敵方飛機和子彈如何讓它們展示在游戲畫板上,繼而讓它們變得可移動起來,請看代碼實現方案...
從游戲畫板上添加飛機,首先我們應怎樣在屏幕上輸出飛機???
上述講過,pygame中的 sprite(精靈)可使一張圖片或者一個靜態物體動起來,那么制作飛機需要考慮并做些什么呢?
那么如何實現以上的功能呢?接下來結合上述的示例代碼我們先將我方飛機繪制到畫板上方,并且我們通過按鍵 J 判定我方飛機的存活狀態為死亡,繪制飛機的死亡畫面并重置飛機
"""創建飛機在pygame中, 所有可移動的對象均叫可看作一個精靈(sprite)該類并實現了碰撞方法 spritecollide我方飛機和敵方飛機指定掩膜屬性以及生存狀態標志位 添加 self.mask 屬性(可以實現更精準的碰撞效果) """# 倒入精靈模塊, 使飛機可以動起來 import pygameclass OurPlane(pygame.sprite.Sprite):def __init__(self, bg_size):super(OurPlane, self).__init__()# 確定我方飛機背景圖(有倆張,可以讓它們不停的切換,形成動態效果)self.image_one = pygame.image.load("material/image/hero1.png")self.image_two = pygame.image.load("material/image/hero2.png")# 獲取我方飛機的位置self.rect = self.image_one.get_rect()# 本地化背景圖片的尺寸self.width, self.height = bg_size[0], bg_size[1]# 獲取飛機圖像的掩膜用以更加精確的碰撞檢測self.mask = pygame.mask.from_surface(self.image_one)# 定義飛機初始化位置,底部預留60像素self.rect.left, self.rect.top = (self.width - self.rect.width) // 2, (self.height - self.rect.height - 60)# 設置飛機移動速度self.speed = 10# 設置飛機存活狀態(True為存活, False為死亡)self.active = True# 加載飛機損毀圖片self.destroy_images = []self.destroy_images.extend([pygame.image.load("material/image/hero_blowup_n1.png"),pygame.image.load("material/image/hero_blowup_n2.png"),pygame.image.load("material/image/hero_blowup_n3.png"),pygame.image.load("material/image/hero_blowup_n4.png")])def move_up(self):"""飛機向上移動的操作函數,其余移動函數方法類似"""if self.rect.top > 0: # 如果飛機尚未移動出背景區域self.rect.top -= self.speedelse: # 若即將移動出背景區域,則及時糾正為背景邊緣位置self.rect.top = 0def move_down(self):"""飛機向下移動"""if self.rect.bottom < self.height - 60:self.rect.top += self.speedelse:self.rect.bottom = self.height - 60def move_left(self):"""飛機向左移動"""if self.rect.left > 0:self.rect.left -= self.speedelse:self.rect.left = 0def move_right(self):"""飛機向右移動"""if self.rect.right < self.width:self.rect.right += self.speedelse:self.rect.right = self.widthdef reset(self):# 初始化飛機(飛機掛了, 初始化到初始位置)self.rect.left, self.rect.top = (self.width - self.rect.width) // 2, (self.height - self.rect.height - 60)# 重置飛機的存活狀態self.active = True上面的代碼寫了一個 我們的飛機 (OurPlane) 類,它初始化了一些屬性以及 上下左右 移動的方法和重置方法,接下來將要運用它展示到游戲畫板上面
由于飛機是一直存在的,接下我們主程序 main 下面的死循環中這樣寫
?1.在屏幕上繪制飛機 ?2.讓飛機上下左右動起來 ?3.按鍵為 j 繪制飛機的死亡狀態那么上述的功能都已經實現了,接下來就開始真正的"打飛機"
三、接下來可以制作我方飛機,敵方戰機,子彈等,這些功能均在 src/ 目錄下實現
- 我方飛機根據按鍵上下左右進行移動,初始化位置,噴氣式圖片加載切換及重置效果等
- 敵方飛機隨機移動出現及重置(制作出我方飛機之后,敵機和子彈其實都是大同小異的)
- 子彈按照我方飛機正中上方發射及頻率調控,重置
在上面的內容中,使用面向對象的形式制作了游戲中可移動的對象并繼承 pygame.sprite.Sprite?
四、繼而在 bin/main.py 中進行主體功能的實現
- 初始化背景圖及大小
- 我方飛機移動及發射子彈
- 敵方飛機移動
- 我方飛機和敵方飛機碰撞檢測
- 鍵盤按鍵監測效果
- 我方飛機和敵方飛機掛了效果繪制
五、暢汗淋漓,一氣呵成打飛機
組合一下,running起來
from bin.main import mainif __name__ == '__main__':"""環境: python3 + pygamerunning 起來就可以打飛機了O(∩_∩)O~."""main()原文來自:https://www.cnblogs.com/leguan1314/p/7927595.html
github下載:https://github.com/1352282824shy/-Lightning-Fighter-Game
?
轉載于:https://www.cnblogs.com/shanghongyun/p/10541727.html
總結
- 上一篇: 【SQL Server 学习系列】--
- 下一篇: 6.5 开始进入设计 … Transit