欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python?pygame派生精靈和精靈組創(chuàng)建敵機(jī)

 更新時(shí)間:2022年08月18日 09:05:41   作者:ZacheryZHANG  
這篇文章主要為大家介紹了Python?pygame派生精靈和精靈組創(chuàng)建敵機(jī)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

派生精靈子類代碼實(shí)現(xiàn)

本案例需求的類圖如下所示:三個(gè)屬性,兩個(gè)方法

本文所要開(kāi)發(fā)的游戲精靈,是繼承自pygame的精靈子類

GameSprite
imagerectspeed
init(self, image_name, speed = 1):update(self):

實(shí)現(xiàn)思路:

想實(shí)現(xiàn)游戲精靈這個(gè)子類代碼。首先,讓游戲精靈繼承自pygame的精靈類,在初始化方法中,我們先調(diào)用了一下父類的初始化方法。然后,按照需求,依次定義了三個(gè)屬性,分別是圖像(image),位置(rect),以及速度(speed)。并且,重寫了一下父類的update方法,在update方法中,我們對(duì)rect的y值做了一個(gè)修改,讓y值加上速度speed,這樣,我們就可以讓游戲精靈按照垂直方向進(jìn)行移動(dòng)了。

擴(kuò)展補(bǔ)充

注意:在我們開(kāi)發(fā)子類的時(shí)候,如果子類的父類不是object這個(gè)基類,我們?cè)诔跏蓟椒ㄖ?,需要?strong>動(dòng)調(diào)用一下父類的初始化方法。因?yàn)?,不主?dòng)調(diào)用父類的初始化方法,我們就沒(méi)辦法享受到父類中已經(jīng)封裝好的初始化方法。

代碼演示

按照需求所完成的具體代碼演示如下所示:

  • 先給類起了個(gè)名字GameSprite,在括號(hào)中指定一下游戲精靈的父類pygame.sprite.Sprite。
  • 初始化方法中,增加兩個(gè)形參,image_name和speed。使用super調(diào)用父類的初始化方法。
  • 初始化方法中定義三個(gè)屬性(圖像、位置、速度)
  • image調(diào)用get.rect方法返回圖像大小
  • 定義speed,把形參的speed加載進(jìn)來(lái)
  • 定義update方法
  • update方法中,使精靈在屏幕的垂直方向移動(dòng),移動(dòng)距離為1
import pygame
class GameSprite(pygame.sprite.Sprite):
    """飛機(jī)大戰(zhàn)游戲精靈"""
    def __init__(self, image_name, speed=1):
        # 調(diào)用父類的初始化方法
        super().__init__()
        # 定義對(duì)象的屬性
        self.image = pygame.image.load(image_name)
        self.rect = self.image.get_rect()
        self.speed = speed
        pass
    def update(self):
        # 在屏幕的垂直方向上移動(dòng)
        self.rect.y += self.speed

飛機(jī)大戰(zhàn)游戲簡(jiǎn)介

首先回顧一下,我們的項(xiàng)目實(shí)戰(zhàn)內(nèi)容:

本項(xiàng)目主要想使用pygame模塊開(kāi)發(fā)一款飛機(jī)大戰(zhàn)游戲,從而強(qiáng)化面向?qū)ο蟪绦蛟O(shè)計(jì),游戲能夠使玩家控制英雄飛機(jī),消滅敵機(jī),根據(jù)用戶的交互或其他情況,移動(dòng)這些圖像,產(chǎn)生動(dòng)畫效果。

然后根據(jù)圖像之間是否發(fā)生重疊,判斷敵機(jī)是否被摧毀等其他情況。

使用游戲精靈和精靈組創(chuàng)建敵機(jī)

案例需求:

使用上一小節(jié)中剛剛派生的游戲精靈精靈組創(chuàng)建敵機(jī)并且實(shí)現(xiàn)敵機(jī)動(dòng)畫。

實(shí)現(xiàn)步驟:

  • 使用from導(dǎo)入plane_sprites模塊
    • from導(dǎo)入的模塊可以直接使用
    • import導(dǎo)入的模塊需要通過(guò)模塊名.來(lái)使用
  • 在游戲初始化創(chuàng)建精靈對(duì)象和精靈組對(duì)象
  • 在游戲循環(huán)中,讓精靈組分別調(diào)用update()(更新組中所有精靈的位置)和draw(screen)(把組中所有的精靈全部繪制在屏幕上)方法

職責(zé):

  • 精靈對(duì)象職責(zé):

    • 封裝圖像image、位置rect和速度speed
    • 提供update()方法,根據(jù)游戲需求,更新位置rect
  • 精靈組對(duì)象職責(zé):

    • 包含多個(gè)精靈對(duì)象
    • update方法,讓精靈組中的所有精靈調(diào)用update方法更新位置
    • draw(screen)方法,在screen上繪制精靈組中所有精靈

代碼演示

案例中對(duì)應(yīng)的具體代碼演示如下所示:

  • 使用GameSprite類創(chuàng)建了兩個(gè)敵機(jī)對(duì)象
  • 把兩個(gè)敵機(jī)對(duì)象添加到精靈組enemy_group中
  • 讓精靈組調(diào)用兩個(gè)方法(分別為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("./飛機(jī)大戰(zhàn)資料包/images/background1.jpg")
screen.blit(bg, (0, 0))
# 繪制英雄的飛機(jī)
hero = pygame.image.load("./飛機(jī)大戰(zhàn)資料包/images/me1.png")
screen.blit(hero, (280, 500))
# 可以在所有繪制工作完成之后,統(tǒng)一調(diào)用update方法
pygame.display.update()
# 創(chuàng)建時(shí)鐘對(duì)象
clock = pygame.time.Clock()
# 游戲循環(huán)->意味著游戲的正式開(kāi)始
# 1. 定義rect記錄飛機(jī)的初始位置
hero_rect = pygame.Rect(280, 500, 102, 126)
# 創(chuàng)建敵機(jī)的精靈,使用類創(chuàng)建對(duì)象
enemy = GameSprite("./飛機(jī)大戰(zhàn)資料包/images/enemy1.png")
enemy1 = GameSprite("./飛機(jī)大戰(zhàn)資料包/images/enemy1.png", 2)
# 創(chuàng)建敵機(jī)的精靈組
enemy_group = pygame.sprite.Group(enemy, enemy1)
# 游戲循環(huán)->意味著游戲的正式開(kāi)始
while True:
    # 希望無(wú)限循環(huán)內(nèi)部的代碼每秒鐘重復(fù)循環(huán)60次
    # 可以指定循環(huán)體內(nèi)部的代碼執(zhí)行的頻率
    clock.tick(60)
    # 監(jiān)聽(tīng)事件
    for event in pygame.event.get():
        # 判斷事件類型是否是退出事件
        if event.type == pygame.QUIT:
            print("游戲退出...")
            # quit卸載所有的模塊
            pygame.quit()
            # exit()直接終止當(dāng)前正在執(zhí)行的程序
            exit()
    # 2. 修改飛機(jī)的位置
    hero_rect.y -= 1
    # 判斷飛機(jī)的位置
    if hero_rect.y <= -126:
        hero_rect.y = 642
    # 3. 調(diào)用blit方法繪制圖像
    # 先繪制背景,在繪制飛機(jī),就不會(huì)留下殘影(背景把上一次的飛機(jī)遮擋)
    screen.blit(bg, (0, 0))
    screen.blit(hero, hero_rect)
    # 讓精靈組調(diào)用兩個(gè)方法
    # update- 讓組中的所有精靈更新位置
    enemy_group.update()
    # draw- 在screen上繪制所有的精靈
    enemy_group.draw(screen)
    # 4. 調(diào)用update方法更新顯示
    pygame.display.update()
pygame.quit()

運(yùn)行結(jié)果

代碼運(yùn)行結(jié)果如下圖所示:可以看出有兩j架敵機(jī)向下飛行,實(shí)際結(jié)果為動(dòng)畫效果。

以上就是Python pygame派生精靈和精靈組創(chuàng)建敵機(jī)的詳細(xì)內(nèi)容,更多關(guān)于Python pygame精靈精靈組的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 編寫多線程Python服務(wù)器 最適合基礎(chǔ)

    編寫多線程Python服務(wù)器 最適合基礎(chǔ)

    很好的Python多線程基礎(chǔ)教程,能夠幫助初學(xué)者快速了解Python多線程簡(jiǎn)單實(shí)現(xiàn)。線程可以使任何程序運(yùn)行得更快。但是這也增加了代碼的復(fù)雜性。所以,如果你發(fā)現(xiàn)很難理解,那么添加更多的日志將有助于檢查里面發(fā)生了什么
    2018-09-09
  • 從np.random.normal()到正態(tài)分布的擬合操作

    從np.random.normal()到正態(tài)分布的擬合操作

    這篇文章主要介紹了從np.random.normal()到正態(tài)分布的擬合操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 一篇文章帶你了解python標(biāo)準(zhǔn)庫(kù)--random模塊

    一篇文章帶你了解python標(biāo)準(zhǔn)庫(kù)--random模塊

    這篇文章主要給大家介紹了關(guān)于Python中random模塊常用方法的使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • 提取視頻中的音頻 Python只需要三行代碼!

    提取視頻中的音頻 Python只需要三行代碼!

    這篇文章主要介紹了python 如何提取視頻中的音頻,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-05-05
  • Python實(shí)現(xiàn)遠(yuǎn)程調(diào)用MetaSploit的方法

    Python實(shí)現(xiàn)遠(yuǎn)程調(diào)用MetaSploit的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)遠(yuǎn)程調(diào)用MetaSploit的方法,是很有借鑒價(jià)值的一個(gè)技巧,需要的朋友可以參考下
    2014-08-08
  • MySQL適配器PyMySQL詳解

    MySQL適配器PyMySQL詳解

    這篇文章主要為大家詳細(xì)介紹了MySQL適配器PyMySQL的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 基于Python實(shí)現(xiàn)隨機(jī)點(diǎn)名系統(tǒng)的示例代碼

    基于Python實(shí)現(xiàn)隨機(jī)點(diǎn)名系統(tǒng)的示例代碼

    在某些難以抉擇得時(shí)候,我們經(jīng)常要用外力來(lái)幫助我們做出選擇,比如,梁山出征方臘前沙場(chǎng)點(diǎn)兵,挑選先鋒的場(chǎng)景。所以本文就來(lái)用Python做個(gè)隨機(jī)點(diǎn)名系統(tǒng)吧,需要的可以參考一下
    2023-04-04
  • Python實(shí)現(xiàn)隨機(jī)取一個(gè)矩陣數(shù)組的某幾行

    Python實(shí)現(xiàn)隨機(jī)取一個(gè)矩陣數(shù)組的某幾行

    今天小編就為大家分享一篇Python實(shí)現(xiàn)隨機(jī)取一個(gè)矩陣數(shù)組的某幾行,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • Python2.6版本pip安裝步驟解析

    Python2.6版本pip安裝步驟解析

    這篇文章主要介紹了Python2.6版本pip安裝步驟解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Python?Base64編碼和解碼操作

    Python?Base64編碼和解碼操作

    Base64?就是一種基于64個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù)的方法,這篇文章主要介紹了Python?Base64編碼和解碼,需要的朋友可以參考下
    2022-12-12

最新評(píng)論