python第三方库pygame的使用详解

yizhihongxing

Python第三方库pygame的使用详解

什么是pygame

pygame是一款Python第三方库,它是专为Python语言编写的多媒体库,用于开发2D游戏和多媒体应用程序,它提供了丰富的API,让开发者可以很轻松地创建各种复杂的游戏和多媒体应用。

安装pygame

在Windows系统下,可以使用以下命令安装pygame:

pip install pygame

在Mac OS X下,可以使用以下命令安装pygame:

brew install sdl sdl_image sdl_mixer sdl_ttf portmidi
pip install pygame

常用API介绍

pygame.display

pygame.display 模块用于创建游戏窗口,并对窗口进行各种操作,例如设置窗口标题、设置窗口大小、切换全屏等。

创建游戏窗口

通过 pygame.display.set_mode() 函数创建游戏窗口,参数是一个元组,表示游戏窗口的大小,例如 (800, 600) 代表宽度为800,高度为600的游戏窗口。

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((800, 600))

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

设置窗口标题

通过 pygame.display.set_caption() 函数设置游戏窗口标题。

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((800, 600))

# 设置游戏窗口标题
pygame.display.set_caption("My Game")

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

切换全屏

通过 pygame.display.toggle_fullscreen() 函数切换全屏,参数是一个元组,表示游戏窗口的大小,例如 (800, 600) 代表宽度为800,高度为600的游戏窗口。

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((800, 600))

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN and event.key == pygame.K_F11:
            # 切换全屏
            pygame.display.toggle_fullscreen((800, 600))

pygame.Surface

pygame.Surface 类代表了游戏窗口中的一个矩形区域,可以对其中的像素点进行操作。

创建Surface对象

通过 pygame.Surface() 函数创建一个空的Surface对象,参数是一个元组,表示Surface对象的大小,例如 (800, 600) 表示Surface对象的宽度为800,高度为600。

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((800, 600))

# 创建Surface对象
surface = pygame.Surface((800, 600))

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

绘制矩形

通过 pygame.draw.rect() 函数在Surface对象上绘制矩形,参数是一个元组,表示矩形的左上角坐标和矩形的宽度和高度,例如 (100, 100, 50, 50) 表示矩形的左上角坐标是 (100, 100),宽度是50,高度是50。

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((800, 600))

# 创建Surface对象
surface = pygame.Surface((800, 600))

# 绘制矩形
pygame.draw.rect(surface, (255, 0, 0), (100, 100, 50, 50))

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

    # 在游戏窗口中绘制Surface对象
    screen.blit(surface, (0, 0))

    # 更新游戏窗口
    pygame.display.update()

pygame.event

pygame.event 模块用于处理事件,例如键盘输入、鼠标操作等。

获取事件

通过 pygame.event.get() 函数获取当前游戏窗口中的所有事件,返回一个列表,列表中的每一个元素代表一个事件,可以通过事件的 type 属性获取事件类型,例如 pygame.QUIT 表示关闭窗口事件。

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((800, 600))

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

键盘输入事件

通过 pygame.KEYDOWN 事件获取键盘按键事件,可以通过 event.key 属性获取按键对应的常量,例如 pygame.K_LEFT 表示左箭头键。

import pygame

pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((800, 600))

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                print("按下了上箭头键")
            elif event.key == pygame.K_DOWN:
                print("按下了下箭头键")
            elif event.key == pygame.K_LEFT:
                print("按下了左箭头键")
            elif event.key == pygame.K_RIGHT:
                print("按下了右箭头键")
            elif event.key == pygame.K_SPACE:
                print("按下了空格键")
        elif event.type == pygame.QUIT:
            pygame.quit()
            exit()

示例

示例1:Pong游戏

import pygame

# 初始化pygame
pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Pong游戏")

# 创建Surface对象
surface = pygame.Surface((800, 600))

# 创建球的初始位置
ball_x = 400
ball_y = 300
ball_speed_x = 5
ball_speed_y = 5

# 创建球拍的初始位置
left_paddle_y = 250
right_paddle_y = 250

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                left_paddle_y -= 10
            elif event.key == pygame.K_s:
                left_paddle_y += 10
            elif event.key == pygame.K_UP:
                right_paddle_y -= 10
            elif event.key == pygame.K_DOWN:
                right_paddle_y += 10

    # 绘制球
    pygame.draw.circle(surface, (255, 255, 255), (ball_x, ball_y), 10)

    # 碰壁检测和反弹
    if ball_y <= 0 or ball_y >= 600:
        ball_speed_y = -ball_speed_y
        pygame.mixer.Sound("bounce.wav").play()

    # 球拍碰撞检测
    if ball_x <= 30 and abs(ball_y - left_paddle_y) <= 50:
        ball_speed_x = -ball_speed_x
        pygame.mixer.Sound("bounce.wav").play()
    elif ball_x >= 770 and abs(ball_y - right_paddle_y) <= 50:
        ball_speed_x = -ball_speed_x
        pygame.mixer.Sound("bounce.wav").play()

    # 移动球
    ball_x += ball_speed_x
    ball_y += ball_speed_y

    # 绘制球拍
    left_paddle_rect = pygame.Rect(10, left_paddle_y - 50, 10, 100)
    pygame.draw.rect(surface, (255, 255, 255), left_paddle_rect)
    right_paddle_rect = pygame.Rect(780, right_paddle_y - 50, 10, 100)
    pygame.draw.rect(surface, (255, 255, 255), right_paddle_rect)

    # 在游戏窗口中绘制Surface对象
    screen.blit(surface, (0, 0))

    # 更新游戏窗口
    pygame.display.update()

示例2:飞机大战

import pygame
import random

# 初始化pygame
pygame.init()

# 创建游戏窗口
screen = pygame.display.set_mode((480, 800))
pygame.display.set_caption("飞机大战")

# 创建Surface对象
surface = pygame.Surface((480, 800))

# 创建背景图
background = pygame.image.load("background.png")

# 创建玩家飞机
player_plane = pygame.image.load("player.png")
player_x = 240
player_y = 640

# 创建敌机
enemy_plane = pygame.image.load("enemy.png")
enemies = []
for i in range(5):
    enemy = {"x": random.randint(0, 430), "y": random.randint(-200, -100)}
    enemies.append(enemy)

# 创建子弹
bullet = pygame.image.load("bullet.png")
bullets = []

# 创建分数
score = 0

# 加载音效
pygame.mixer.music.load("music.mp3")
pygame.mixer.music.set_volume(0.3)
pygame.mixer.music.play(-1)
shoot_sound = pygame.mixer.Sound("shoot.wav")
shoot_sound.set_volume(0.1)
hit_sound = pygame.mixer.Sound("hit.wav")
hit_sound.set_volume(0.1)

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player_x -= 10
            elif event.key == pygame.K_RIGHT:
                player_x += 10
            elif event.key == pygame.K_SPACE:
                bullet_x = player_x + 49
                bullet_y = player_y - 20
                bullet_rect = pygame.Rect(bullet_x, bullet_y, 10, 20)
                bullets.append(bullet_rect)
                shoot_sound.play()

    # 绘制背景
    surface.blit(background, (0, 0))

    # 绘制玩家飞机
    surface.blit(player_plane, (player_x, player_y))

    # 移动敌机和检测是否撞到玩家飞机
    for enemy in enemies:
        enemy["y"] += 5
        enemy_rect = pygame.Rect(enemy["x"], enemy["y"], 55, 45)
        surface.blit(enemy_plane, (enemy["x"], enemy["y"]))
        if enemy_rect.colliderect(pygame.Rect(player_x, player_y, 100, 124)):
            hit_sound.play()
            pygame.time.delay(1000)
            pygame.quit()
            exit()

    # 移动子弹和检测是否撞到敌机
    for bullet_rect in bullets:
        bullet_rect.y -= 10
        surface.blit(bullet, bullet_rect)
        for enemy in enemies:
            enemy_rect = pygame.Rect(enemy["x"], enemy["y"], 55, 45)
            if bullet_rect.colliderect(enemy_rect):
                hit_sound.play()
                bullets.remove(bullet_rect)
                enemies.remove(enemy)
                score += 1

    # 绘制分数
    font = pygame.font.Font(None, 36)
    text = font.render("Score: {}".format(score), True, (255, 255, 255))
    surface.blit(text, (10, 10))

    # 添加敌机
    if len(enemies) < 5:
        enemy = {"x": random.randint(0, 430), "y": -50}
        enemies.append(enemy)

    # 在游戏窗口中绘制Surface对象
    screen.blit(surface, (0, 0))

    # 更新游戏窗口
    pygame.display.update()

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python第三方库pygame的使用详解 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • Python之re模块案例详解

    下面是详细的攻略: Python之re模块案例详解 Python的re模块是用于正则表达式操作的模块,它提供了一系列函数来进行正则表达式匹配和替换。本文将手把手教你如何使用Python的re模块进行正则表达式操作,并提供两个示例说明。 re模块基础 在使用re模块之前,我们需要先了解一些基础知识。下面是一些常用的正则表达式元字符: .:匹配任意字符,除了换行…

    python 2023年5月14日
    00
  • Python实现网站表单提交和模板

    Python实现网站表单提交和模板是一种常见的自动化测试方法,可以帮助我们更好地测试网站的功能和稳定性。本文将介绍如何使用Python实现网站表单提交和模板,并提供两个示例。 1. 使用requests库实现网站表单提交 我们可以使用requests库实现网站表单提交。以下是一个示例,演示如何使用requests库实现网站表单提交: import reque…

    python 2023年5月15日
    00
  • python PIL和CV对 图片的读取,显示,裁剪,保存实现方法

    下面我将为您讲解如何使用Python PIL和CV对图片进行读取、显示、裁剪和保存。 图片读取 使用PIL库可以轻松读取图片,只需要使用Image.open()函数并传入图片路径即可。 from PIL import Image img = Image.open("example.jpg") 使用cv2库也可以读取图片,只需要使用cv2.…

    python 2023年5月18日
    00
  • Pytorch使用shuffle打乱数据的操作

    PyTorch中的shuffle操作可以将数据集顺序打乱,这对于训练模型时的数据增广以及防止模型对数据的顺序敏感都非常重要。下面是使用shuffle打乱数据的操作攻略: 1.使用DataLoader中的shuffle参数 在PyTorch中,可以直接在DataLoader中设置shuffle参数来打乱数据。DataLoader是一个用于加载数据集的工具,可以…

    python 2023年6月3日
    00
  • python输入、数据类型转换及运算符方式

    Python输入、数据类型转换及运算符方式 1. Python输入方法 1.1 使用input()函数输入 Python中,我们可以使用input()函数获取用户的输入,例如: name = input(‘请输入你的名字:’) print(‘你好,’+ name) 在运行程序时,当程序执行到input()函数时,会弹出一个输入框让用户输入数据,用户输入完成后…

    python 2023年6月5日
    00
  • 详解Python prometheus_client使用方式

    下面是详解Python prometheus_client使用方式的完整攻略: 目录 安装 prometheus_client 基本使用介绍 应用实例 收集 CPU 使用率指标 收集自定义指标 安装 prometheus_client 使用 pip 工具可以非常方便地安装 prometheus_client: pip install prometheus_c…

    python 2023年6月2日
    00
  • python框架django项目部署相关知识详解

    Python框架Django项目部署相关知识详解 Django是一个流行的Python Web框架,用于快速开发Web应用程序。在开发完成后,我们需要将Django项目部署到服务器上,以便用户可以访问我们的应用程序。本文将详细讲解Python框架Django项目部署相关知识,包括服务器选择、部署方式、数据库配置、静态文件处理等,并提供两个示例。 服务器选择 …

    python 2023年5月15日
    00
  • 神经网络(BP)算法Python实现及应用

    神经网络(BP)算法Python实现及应用 BP神经网络是一种常用的人工神经网络,它可以用于分类、回归等任务。在Python中,可以使用多种库实现BP神经网络包括TensorFlow、Keras、PyTorch等。本文将详细讲解神经网络(BP)算法Python实及应用的完整攻略,包括算法原理、Python实现过程和示例。 算法原理 BP神经网络是一前向反馈神…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部