Python 專案 小遊戲3 精靈?藍精靈?

2022-07-05 08:54:08 字數 3882 閱讀 2489

等等,我們好像只是繪製了一動的張圖

專案原始碼

不知道你有沒有發現,我們現在好像只是繪製了一張動的圖,只是一張!!!就這麼多**了,如果有100張 10000+張?那我們這麼高?

別擔心,pygame給我們提供了解決方案------精靈還有精靈組

在遊戲開發中 顯示影象的物件 就是精靈

別著急我們先來看一下,它確實是乙個類,這裡是它的類圖

作用:分析一下這個類的構成

小心有坑!

乙個精靈組可以包含多個精靈物件

呼叫精靈組物件的update()方法

呼叫精靈組物件的draw(螢幕物件)方法

總的來說就是統一指揮 統一行動,但是每乙個項又有自己的獨立的運動方法和屬性

group(*sprites) -> group
例項**:

# 1. 新建 `plane_sprites.py` 檔案

# 2. 定義 `gamesprite` 繼承自 `pygame.sprite.sprite`

import pygame

# 3.寫在括號裡的意思是繼承父類

class gamesprite(pygame.sprite.sprite):

"""飛機大戰中的遊戲精靈,根據設計的uml編寫**"""

#注意這裡要重寫init方法,我們在init初始化方法(行函式)傳參

def __init__(self, image_name, speed=1):

# 呼叫父類的初始化方法,當我們的父類不是object基類的時候一定要呼叫super()物件來呼叫父類的初始化inint方法

super().__init__()

# 定義物件的屬性,它們分別記錄著精靈的位置速度還有運動方式

# 載入影象

self.image = pygame.image.load(image_name)

# 設定尺寸

self.rect = self.image.get_rect()

# 記錄速度

self.speed = speed

def update(self):

# 在螢幕的垂直方向上移動

self.rect.y += self.speed

什麼?你不知道我們的主程式是什麼?好吧,是我忘記告訴你了,我們的主程式就是我們之前寫的 繪製視窗的那個程式,

其實這也非常的簡單 ,你只需要在遊戲主程式中匯入包

如何完成新增「敵機」精靈,並且讓它動起來,再把它們放到遊戲迴圈裡面就行了

注意:

我們先來明確一下精靈還有精靈組的分工

1. 精靈

* 封裝 **影象 image**、**位置 rect** 和 **速度 speed**

* 提供 `update()` 方法,根據遊戲需求,**更新位置 rect**

2. 精靈組

* 包含 **多個** **精靈物件**

* `update` 方法,讓精靈組中的所有精靈呼叫 `update` 方法更新位置

* `draw(screen)` 方法,在 `screen` 上繪製精靈組中的所有精靈

完整的**例項

import pygame

# 你需要匯入 form和import 使用inprom匯入的時候需要.來使用 使用form的時候 直接使用模組提供的工具就行了。

# 它們都是實現了匯入模組的功能

from plane_sprites import *

# 遊戲的初始化

pygame.init()

# 建立遊戲的視窗 480 * 700

screen = pygame.display.set_mode((480, 700))

# 繪製背景影象

bg = pygame.image.load("./images/background.png")

screen.blit(bg, (0, 0))

# pygame.display.update()

# 繪製英雄的飛機

hero = pygame.image.load("./images/me1.png")

screen.blit(hero, (150, 300))

# 可以在所有繪製工作完成之後,統一呼叫update方法

pygame.display.update()

# 建立時鐘物件

clock = pygame.time.clock()

# 1. 定義rect記錄飛機的初始位置

hero_rect = pygame.rect(150, 300, 102, 126)

# 開始我們的業務邏輯

# 建立敵機的精靈

# 敵人的戰鬥機物件

enemy = gamesprite("./images/enemy1.png")

enemy1 = gamesprite("./images/enemy1.png", 2)

# 建立敵機的精靈組,我們可以使用多值的方式傳遞精靈組合,有了這個精靈組,我們就可以直接使用精靈的方法了,一次性的繪製所有的影象

enemy_group = pygame.sprite.group(enemy, enemy1)

# # 讓精靈組呼叫兩個方法

# # update - 讓組中的所有精靈更新位置,這個是更新位置

# enemy_group.update()

# # draw - 在screen上繪製所有的精靈,這個是繪製

# enemy_group.draw(screen)

# 我們只是呼叫一次,現在我們把它丟到我們的遊戲迴圈裡面去

# 遊戲迴圈 -> 意味著遊戲的正式開始!

while true:

# 可以指定迴圈體內部的**執行的頻率

clock.tick(60)

# 監聽事件

for event in pygame.event.get():

# 判斷事件型別是否是退出事件

if event.type == pygame.quit:

print("遊戲退出...")

# quit 解除安裝所有的模組

pygame.quit()

# exit() 直接終止當前正在執行的程式

exit()

# 2. 修改飛機的位置

hero_rect.y -= 1

# 判斷飛機的位置

if hero_rect.y <= 0:

hero_rect.y = 700

# 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()

Python 專案 小遊戲

專案原始碼 遊戲初體驗畫面 略,請去參考部落格 驗證一下本地第三方包有沒有匯入 python3 m pygame.examples.aliens 如果沒有出現遊戲畫面請先安裝這個包 sudo pip3 install pygame 開始搭建目錄結構 建立主程式設計師 ganme main.py 把素...

python小遊戲 飛機大戰(3)

二 新增 動畫 3 執行展示 三 遊戲結束介面 四 計分 五 提公升遊戲難度 六 總結 前兩節已經實現遊戲基本功能,接下來是對遊戲的完善,包括 動畫 計分 結束畫面等。這個其實是在剛開始開發就需要做的,這裡是為了方便讀者理解,將其挪到遊戲基本功能完成後再進行調整。基本思路其實很簡單,就是建立時鐘物件...

猜拳小遊戲(python)

import random 載入模組random 隨機數 win 0 定義勝場 lose 0 定義敗場 dogfall 0 定義平局 while true while 迴圈 print 10 猜拳遊戲 10 遊戲開頭輸出 遊戲名 print 勝 s,敗 s,平 s win,lose,dogfall ...