Python?pygame派生精靈和精靈組創(chuàng)建敵機(jī)
派生精靈子類代碼實(shí)現(xiàn)
本案例需求的類圖如下所示:三個(gè)屬性,兩個(gè)方法
本文所要開發(fā)的游戲精靈,是繼承自pygame的精靈子類
| GameSprite | ||
|---|---|---|
| image | rect | speed |
| 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ǔ)充
注意:在我們開發(fā)子類的時(shí)候,如果子類的父類不是object這個(gè)基類,我們?cè)诔跏蓟椒ㄖ?,需要?strong>動(dòng)調(diào)用一下父類的初始化方法。因?yàn)?,不主?dòng)調(diào)用父類的初始化方法,我們就沒辦法享受到父類中已經(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)來
- 定義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)游戲簡介
首先回顧一下,我們的項(xiàng)目實(shí)戰(zhàn)內(nèi)容:
本項(xiàng)目主要想使用pygame模塊開發(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)入的模塊需要通過模塊名.來使用
- 在游戲初始化創(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)->意味著游戲的正式開始
# 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)->意味著游戲的正式開始
while True:
# 希望無限循環(huán)內(nèi)部的代碼每秒鐘重復(fù)循環(huán)60次
# 可以指定循環(huán)體內(nèi)部的代碼執(zhí)行的頻率
clock.tick(60)
# 監(jiān)聽事件
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)文章
使用rst2pdf實(shí)現(xiàn)將sphinx生成PDF
這篇文章主要介紹了使用rst2pdf實(shí)現(xiàn)將sphinx生成PDF的相關(guān)資料,以及使用過程用遇到的錯(cuò)誤的處理方法,非常的全面,需要的朋友可以參考下2016-06-06
對(duì)pandas進(jìn)行數(shù)據(jù)預(yù)處理的實(shí)例講解
下面小編就為大家分享一篇對(duì)pandas進(jìn)行數(shù)據(jù)預(yù)處理的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04
利用Python實(shí)現(xiàn)網(wǎng)絡(luò)運(yùn)維自動(dòng)化的實(shí)戰(zhàn)案例
Python作為一種簡潔而強(qiáng)大的編程語言,已經(jīng)成為網(wǎng)絡(luò)運(yùn)維自動(dòng)化的熱門選擇,本文將介紹如何利用Python實(shí)現(xiàn)網(wǎng)絡(luò)設(shè)備配置管理、監(jiān)控和故障排除等自動(dòng)化任務(wù),并提供代碼示例,需要的朋友可以參考下2024-03-03
python2 與 python3 實(shí)現(xiàn)共存的方法
這篇文章主要介紹了python2 與 python3 實(shí)現(xiàn)共存的方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07
python借助ChatGPT讀取.env實(shí)現(xiàn)文件配置隔離保障私有數(shù)據(jù)安全
這篇文章主要為大家介紹了python讀取.env實(shí)現(xiàn)文件配置隔離保障私有數(shù)據(jù)安全,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Windows下的Python 3.6.1的下載與安裝圖文詳解(適合32位和64位)
這篇文章主要介紹了Windows下的Python 3.6.1的下載與安裝圖文詳解(適合32位和64位),需要的朋友可以參考下2018-02-02

