Python?pygame派生精靈和精靈組創(chuàng)建敵機
派生精靈子類代碼實現(xiàn)
本案例需求的類圖如下所示:三個屬性,兩個方法
本文所要開發(fā)的游戲精靈,是繼承自pygame的精靈子類
| GameSprite | ||
|---|---|---|
| image | rect | speed |
| init(self, image_name, speed = 1): | update(self): |
實現(xiàn)思路:
想實現(xiàn)游戲精靈這個子類代碼。首先,讓游戲精靈繼承自pygame的精靈類,在初始化方法中,我們先調用了一下父類的初始化方法。然后,按照需求,依次定義了三個屬性,分別是圖像(image),位置(rect),以及速度(speed)。并且,重寫了一下父類的update方法,在update方法中,我們對rect的y值做了一個修改,讓y值加上速度speed,這樣,我們就可以讓游戲精靈按照垂直方向進行移動了。
擴展補充
注意:在我們開發(fā)子類的時候,如果子類的父類不是object這個基類,我們在初始化方法中,需要主動調用一下父類的初始化方法。因為,不主動調用父類的初始化方法,我們就沒辦法享受到父類中已經封裝好的初始化方法。
代碼演示
按照需求所完成的具體代碼演示如下所示:
- 先給類起了個名字
GameSprite,在括號中指定一下游戲精靈的父類pygame.sprite.Sprite。 - 初始化方法中,增加兩個形參,image_name和speed。使用super調用父類的初始化方法。
- 初始化方法中定義三個屬性(圖像、位置、速度)
- image調用get.rect方法返回圖像大小
- 定義speed,把形參的speed加載進來
- 定義update方法
- update方法中,使精靈在屏幕的垂直方向移動,移動距離為1
import pygame
class GameSprite(pygame.sprite.Sprite):
"""飛機大戰(zhàn)游戲精靈"""
def __init__(self, image_name, speed=1):
# 調用父類的初始化方法
super().__init__()
# 定義對象的屬性
self.image = pygame.image.load(image_name)
self.rect = self.image.get_rect()
self.speed = speed
pass
def update(self):
# 在屏幕的垂直方向上移動
self.rect.y += self.speed飛機大戰(zhàn)游戲簡介
首先回顧一下,我們的項目實戰(zhàn)內容:
本項目主要想使用pygame模塊開發(fā)一款飛機大戰(zhàn)游戲,從而強化面向對象程序設計,游戲能夠使玩家控制英雄飛機,消滅敵機,根據(jù)用戶的交互或其他情況,移動這些圖像,產生動畫效果。
然后根據(jù)圖像之間是否發(fā)生重疊,判斷敵機是否被摧毀等其他情況。
使用游戲精靈和精靈組創(chuàng)建敵機
案例需求:
使用上一小節(jié)中剛剛派生的游戲精靈和精靈組創(chuàng)建敵機并且實現(xiàn)敵機動畫。
實現(xiàn)步驟:
- 使用from導入plane_sprites模塊
from導入的模塊可以直接使用import導入的模塊需要通過模塊名.來使用
- 在游戲初始化創(chuàng)建精靈對象和精靈組對象
- 在游戲循環(huán)中,讓精靈組分別調用
update()(更新組中所有精靈的位置)和draw(screen)(把組中所有的精靈全部繪制在屏幕上)方法
職責:
精靈對象職責:
- 封裝圖像image、位置rect和速度speed
- 提供update()方法,根據(jù)游戲需求,更新位置rect
精靈組對象職責:
- 包含多個精靈對象
update方法,讓精靈組中的所有精靈調用update方法更新位置draw(screen)方法,在screen上繪制精靈組中所有精靈
代碼演示
案例中對應的具體代碼演示如下所示:
- 使用GameSprite類創(chuàng)建了兩個敵機對象
- 把兩個敵機對象添加到精靈組enemy_group中
- 讓精靈組調用兩個方法(分別為update和draw)
- update- 讓組中的所有精靈更新位置
- draw- 在screen上繪制所有的精靈
import pygame
from plane_sprites import *
pygame.init()
# 創(chuàng)建游戲的窗口 640*642
screen = pygame.display.set_mode((640, 642))
# 繪制背景圖像
bg = pygame.image.load("./飛機大戰(zhàn)資料包/images/background1.jpg")
screen.blit(bg, (0, 0))
# 繪制英雄的飛機
hero = pygame.image.load("./飛機大戰(zhàn)資料包/images/me1.png")
screen.blit(hero, (280, 500))
# 可以在所有繪制工作完成之后,統(tǒng)一調用update方法
pygame.display.update()
# 創(chuàng)建時鐘對象
clock = pygame.time.Clock()
# 游戲循環(huán)->意味著游戲的正式開始
# 1. 定義rect記錄飛機的初始位置
hero_rect = pygame.Rect(280, 500, 102, 126)
# 創(chuàng)建敵機的精靈,使用類創(chuàng)建對象
enemy = GameSprite("./飛機大戰(zhàn)資料包/images/enemy1.png")
enemy1 = GameSprite("./飛機大戰(zhàn)資料包/images/enemy1.png", 2)
# 創(chuàng)建敵機的精靈組
enemy_group = pygame.sprite.Group(enemy, enemy1)
# 游戲循環(huán)->意味著游戲的正式開始
while True:
# 希望無限循環(huán)內部的代碼每秒鐘重復循環(huán)60次
# 可以指定循環(huán)體內部的代碼執(zhí)行的頻率
clock.tick(60)
# 監(jiān)聽事件
for event in pygame.event.get():
# 判斷事件類型是否是退出事件
if event.type == pygame.QUIT:
print("游戲退出...")
# quit卸載所有的模塊
pygame.quit()
# exit()直接終止當前正在執(zhí)行的程序
exit()
# 2. 修改飛機的位置
hero_rect.y -= 1
# 判斷飛機的位置
if hero_rect.y <= -126:
hero_rect.y = 642
# 3. 調用blit方法繪制圖像
# 先繪制背景,在繪制飛機,就不會留下殘影(背景把上一次的飛機遮擋)
screen.blit(bg, (0, 0))
screen.blit(hero, hero_rect)
# 讓精靈組調用兩個方法
# update- 讓組中的所有精靈更新位置
enemy_group.update()
# draw- 在screen上繪制所有的精靈
enemy_group.draw(screen)
# 4. 調用update方法更新顯示
pygame.display.update()
pygame.quit()
運行結果
代碼運行結果如下圖所示:可以看出有兩j架敵機向下飛行,實際結果為動畫效果。

以上就是Python pygame派生精靈和精靈組創(chuàng)建敵機的詳細內容,更多關于Python pygame精靈精靈組的資料請關注腳本之家其它相關文章!
相關文章
利用Python實現(xiàn)網絡運維自動化的實戰(zhàn)案例
Python作為一種簡潔而強大的編程語言,已經成為網絡運維自動化的熱門選擇,本文將介紹如何利用Python實現(xiàn)網絡設備配置管理、監(jiān)控和故障排除等自動化任務,并提供代碼示例,需要的朋友可以參考下2024-03-03
python2 與 python3 實現(xiàn)共存的方法
這篇文章主要介紹了python2 與 python3 實現(xiàn)共存的方法,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-07-07
python借助ChatGPT讀取.env實現(xiàn)文件配置隔離保障私有數(shù)據(jù)安全
這篇文章主要為大家介紹了python讀取.env實現(xiàn)文件配置隔離保障私有數(shù)據(jù)安全,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
Windows下的Python 3.6.1的下載與安裝圖文詳解(適合32位和64位)
這篇文章主要介紹了Windows下的Python 3.6.1的下載與安裝圖文詳解(適合32位和64位),需要的朋友可以參考下2018-02-02

