搜尋
首頁後端開發Python教學python第三方函式庫pygame如何使用

python第三方函式庫pygame如何使用

Jun 02, 2023 pm 09:50 PM
pythonpygame

作用:pygame一般用來做遊戲

注意:1.在使用pygame提供的功能之前,需要呼叫init方法

2.在遊戲結束前需要呼叫quit 方法

pygame中的各個函數:

1.pygame.init():該函數在使用pygame時進行初始化,只有引用了該函數才能使用pygame提供的所用功能

2.pygame.Rect():函數可以設定一張圖片的位置以及大小,這是一個特殊的函數,不需要引用init函數都可以使用

3.pygame.display.set_mode (resolution=(0,0),flags=0,depth=0):此函數可以建立遊戲的主視窗對象,

參數1:指定螢幕的寬與高,預設與螢幕大小一致

參數2:指定螢幕的附加選項,預設不傳遞

參數3:顏色的位數,預設會自動匹配

4.pygame.display.update():刷新主視窗內容

5.pygame.image.load():載入所需的圖片

6.主視窗物件.blit(影像,位置):將影像繪製到指定的位置

7.pygame.time.Clock():建立一個時間對象,用來控制幀率

8.時間對象.tick(數字):控制每秒的幀率

9.pygame.event.get():事件監聽,回傳的是一個清單

10.pygame.sprite.Sprite:精靈,用來儲存映像資料images和rect的物件

11.pygame.sprite.Group(精靈1,精靈2):建立精靈群組物件

12.精靈群組物件.update():更新精靈群組中精靈的位置

13.精靈組物件.draw():把精靈群組中的所有精靈畫到主視窗

#14.pygame.time.set_time(eventid,milliseconds):設定每個一段時間程式會執行什麼內容,第一個需要基於常數pygame.USEREVENT來指定,第二個參數是毫秒值

15.pygame.key.get_pressed():按鍵監聽,會傳回所有按鍵的元組,通過鍵盤常數,判斷元組中某個按鍵是否被觸發,如果被觸發對應數值為1

16.pygame.sprite.groupcollide(精靈組1,精靈組2,bool,bool):檢測兩個精靈組的碰撞,會傳回一個字典,第一個參數和第三個參數關聯,第二個參數和第四個參數關聯,當bool型別為真時,碰撞會被銷毀

# 17.pygame.sprite.spritecollide(精靈,精靈組,bool):偵測精靈和精靈群組的碰撞,會傳回精靈群組的列表,當bool型別為真時,精靈群組會被銷毀

#一個飛機大戰的遊戲總結:

import pygame
import time
from plane_Sprite import *
 
class PlaneGame(object):
    def __init__(self):
        print('初始化')
        # 1.创建游戏窗口
        self.screem = pygame.display.set_mode(SCREEM_RECT.size)  # 这里需要拿到元组类型的数据,使用 .size 可以拿到数组中的数据
        # 2.创建游戏时钟
        self.clock = pygame.time.Clock()
        # 3.调用私有方法,精灵和精灵组的创建
        self.__create_sprite()
        # 4.创建敌机定时器
        pygame.time.set_timer(CREATE_ENEMY_EVENT, 1000)
        # 5.创建子弹定时器
        pygame.time.set_timer(HERO_FIRE_EVENT, 500)
    def __create_sprite(self):
        # 创建背景精灵类
        # bg1 = BackGround('./images/background.jpg')
        # bg2 = BackGround('./images/background.jpg')
        bg1 = BackGround()
        bg2 = BackGround(True)
        self.back_groud = pygame.sprite.Group(bg1, bg2)  # 创建背景精灵组
        self.enemy_group = pygame.sprite.Group()  # 创建敌机精灵组
        self.he1 = Hero()
        self.hero_group = pygame.sprite.Group(self.he1)  # 创建英雄精灵组
 
    def StartGame(self):
        print('开始游戏')
        while True:
            # 1.设置刷新的帧率
            self.clock.tick(SHUA)
            # 2.事件监听
            self.__event_handler()
            # 3.碰撞检测
            self.__check_cllide()
            # 4.更新/和绘制精灵组图片
            self.__update_sprite()
            # 5.更新显示
            pygame.display.update()
    # 定义私有方法
    def __event_handler(self):
        """监听事件处理"""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                # 调用静态方法:使用类名
                PlaneGame.__game_over()
            # 判断定时器事件
            elif event.type == CREATE_ENEMY_EVENT:
                # 创建敌机对象
                enemy = Enemy()
                # 添加到精灵组中
                self.enemy_group.add(enemy)
            elif event.type == HERO_FIRE_EVENT:
                self.he1.fire()
        # 获取键盘信息
        key_pressed = pygame.key.get_pressed()
        # 判断对应的键盘
        if key_pressed[pygame.K_RIGHT]:
            self.he1.speed = 3
        elif key_pressed[pygame.K_LEFT]:
            self.he1.speed = -3
        elif key_pressed[pygame.K_UP]:
            self.he1.speed = -2
        elif key_pressed[pygame.K_DOWN]:
            self.he1.speed = 2
        else:
            self.he1.speed = 0
    def __check_cllide(self):
        """碰撞检测"""
        # 子弹摧毁敌机
        pygame.sprite.groupcollide(self.he1.bullets, self.enemy_group, True, True)
        # 敌机撞毁英雄
        enemy_list = pygame.sprite.spritecollide(self.he1, self.enemy_group,True)
        if len(enemy_list) > 0:
            # 销毁英雄
            self.he1.kill()
            # 结束游戏
            PlaneGame.__game_over()
    def __update_sprite(self):
        """更新精灵组"""
        self.back_groud.update()  # 刷新图像数据
        self.back_groud.draw(self.screem)  # 绘画图像
        # 敌机精灵组更新
        self.enemy_group.update()
        self.enemy_group.draw(self.screem)
        # 英雄精灵组更新
        self.hero_group.update()
        self.hero_group.draw(self.screem)
        # 子弹精灵组更新
        self.he1.bullets.update()
        self.he1.bullets.draw(self.screem)
    @staticmethod # 静态方法
    def __game_over():
        """结束游戏"""
        print('游戏结束')
        pygame.quit()
        exit()
if __name__ == "__main__":
 
    # 创建游戏对象
    plane_start = PlaneGame()
    # 启动游戏
    plane_start.StartGame()

上面是遊戲實現功能的代碼

import random
import pygame
 
# 定义常量,一般使用大写字母'
# 屏幕大小常量
SCREEM_RECT = pygame.Rect(0, 0, 591, 764)
# 刷新的帧率
SHUA = 60
# 设置敌机定时器事件常量
CREATE_ENEMY_EVENT = pygame.USEREVENT
# 设置英雄子弹定时器事件常量
HERO_FIRE_EVENT = pygame.USEREVENT + 1  # 因为 pygame.USEREVENT 被占用,所以需要加1进行区分
 
class GameSprite(pygame.sprite.Sprite):
    """飞机大战游戏精灵"""
    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  # 设置变更的速度
 
    def update(self):
        # 在屏幕垂直向上移动
        self.rect.y += self.speed
 
# 创建一个子类,完成屏幕需求
class BackGround(GameSprite):
    """游戏背景精灵"""
    # is_alt 判断参数
    def __init__(self, is_alt= False):
        # 调用父类初始化方法设置参数
        super().__init__('./images/background.jpg')
        # 判断是否是叠加图像
        if is_alt:
            self.rect.y = -self.rect.height
    def update(self):
        # 调用父类的方法
        super().update()
        # 2.判断是否移出屏幕,移出屏幕,重新设置到屏幕上方
        if self.rect.y >= SCREEM_RECT.height:
            self.rect.y = -self.rect.height
 
# 创建敌机类
class Enemy(GameSprite):
    def __init__(self):
        # 1.调用父类方法,创建敌机精灵,同时指定敌机图片
        super().__init__('./images/enemy_2.jpg')
        # 2.指定敌机的初始随机速度
        self.speed = random.randint(1, 3)
        # 3.指定敌机的初始随机位置
        self.rect.bottom = 0
        max_x = SCREEM_RECT.width - self.rect.width  # 计算x的最大值
        self.rect.x = random.randint(0, max_x)
 
    def update(self):
        # 调用父类方法,保持垂直飞行
        super().update()
        # 判断是否非常屏幕,是,则删除精灵组
        if self.rect.y >= SCREEM_RECT.height + self.rect.height:
            # kill 方法可以将精灵从精灵组中移除,精灵就会被自动销毁
            self.kill()
    def __del__(self):
        # print('%s' % self.rect)
        pass
 
# 创建英雄类
class Hero(GameSprite):
    def __init__(self):
        # 1.调用父类中的初始方法,加载图片
        super().__init__('./images/planeNormal_2.jpg', 0)
        # 2.重新设置位置
        self.rect.centerx = SCREEM_RECT.centerx
        self.rect.bottom = SCREEM_RECT.bottom - 80
        # 创建子弹组
        self.bullets = pygame.sprite.Group()
    def update(self):
        self.rect.x += self.speed
        # 控制屏幕不会出界
        if self.rect.x <= -30:
            self.rect.x = -30
        elif self.rect.right >= SCREEM_RECT.right + 30:
            self.rect.right = SCREEM_RECT.right + 30
    def fire(self):
        # 设置每次发射三枚子弹
        for i in (0, 1, 2):
            # 1.创建子弹精灵
            bullet = Bullet()
            # 2.设置精灵位置
            bullet.rect.bottom = self.rect.y - i * 24
            bullet.rect.centerx = self.rect.centerx
            # 3.将精灵添加到精灵组
            self.bullets.add(bullet)
# 创建子弹类
class Bullet(GameSprite):
    def __init__(self):
        # 调用父类方法
        super().__init__(&#39;./images/bullet2.jpg&#39;, -3)
    def update(self):
        super().update()
        if self.rect.bottom < 0:
            self.kill()

上面是每個精靈實現的代碼,改代碼段命名為plane_Sprite,作為一個模組在功能實現程式碼中被引用,上面程式碼用到的圖片需要自己找

【程式碼實現效果】

python第三方函式庫pygame如何使用

#

以上是python第三方函式庫pygame如何使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
Python的科學計算中如何使用陣列?Python的科學計算中如何使用陣列?Apr 25, 2025 am 12:28 AM

Arraysinpython,尤其是Vianumpy,ArecrucialInsCientificComputingfortheireftheireffertheireffertheirefferthe.1)Heasuedfornumerericalicerationalation,dataAnalysis和Machinelearning.2)Numpy'Simpy'Simpy'simplementIncressionSressirestrionsfasteroperoperoperationspasterationspasterationspasterationspasterationspasterationsthanpythonlists.3)inthanypythonlists.3)andAreseNableAblequick

您如何處理同一系統上的不同Python版本?您如何處理同一系統上的不同Python版本?Apr 25, 2025 am 12:24 AM

你可以通過使用pyenv、venv和Anaconda來管理不同的Python版本。 1)使用pyenv管理多個Python版本:安裝pyenv,設置全局和本地版本。 2)使用venv創建虛擬環境以隔離項目依賴。 3)使用Anaconda管理數據科學項目中的Python版本。 4)保留系統Python用於系統級任務。通過這些工具和策略,你可以有效地管理不同版本的Python,確保項目順利運行。

與標準Python陣列相比,使用Numpy數組的一些優點是什麼?與標準Python陣列相比,使用Numpy數組的一些優點是什麼?Apr 25, 2025 am 12:21 AM

numpyarrayshaveseveraladagesoverandastardandpythonarrays:1)基於基於duetoc的iMplation,2)2)他們的aremoremoremorymorymoremorymoremorymoremorymoremoremory,尤其是WithlargedAtasets和3)效率化,效率化,矢量化函數函數函數函數構成和穩定性構成和穩定性的操作,製造

陣列的同質性質如何影響性能?陣列的同質性質如何影響性能?Apr 25, 2025 am 12:13 AM

數組的同質性對性能的影響是雙重的:1)同質性允許編譯器優化內存訪問,提高性能;2)但限制了類型多樣性,可能導致效率低下。總之,選擇合適的數據結構至關重要。

編寫可執行python腳本的最佳實踐是什麼?編寫可執行python腳本的最佳實踐是什麼?Apr 25, 2025 am 12:11 AM

到CraftCraftExecutablePythcripts,lollow TheSebestPractices:1)Addashebangline(#!/usr/usr/bin/envpython3)tomakethescriptexecutable.2)setpermissionswithchmodwithchmod xyour_script.3)

Numpy數組與使用數組模塊創建的數組有何不同?Numpy數組與使用數組模塊創建的數組有何不同?Apr 24, 2025 pm 03:53 PM

numpyArraysareAreBetterFornumericalialoperations andmulti-demensionaldata,而learthearrayModuleSutableforbasic,內存效率段

Numpy數組的使用與使用Python中的數組模塊陣列相比如何?Numpy數組的使用與使用Python中的數組模塊陣列相比如何?Apr 24, 2025 pm 03:49 PM

numpyArraySareAreBetterForHeAvyNumericalComputing,而lelethearRayModulesiutable-usemoblemory-connerage-inderabledsswithSimpleDatateTypes.1)NumpyArsofferVerverVerverVerverVersAtility andPerformanceForlargedForlargedAtatasetSetsAtsAndAtasEndCompleXoper.2)

CTYPES模塊與Python中的數組有何關係?CTYPES模塊與Python中的數組有何關係?Apr 24, 2025 pm 03:45 PM

ctypesallowscreatingingangandmanipulatingc-stylarraysinpython.1)usectypestoInterfacewithClibrariesForperfermance.2)createc-stylec-stylec-stylarraysfornumericalcomputations.3)passarraystocfunctions foreforfunctionsforeffortions.however.however,However,HoweverofiousofmemoryManageManiverage,Pressiveo,Pressivero

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境