欢迎光临
我们一直在努力

Pygame 入门指南---Python 游戏开发从入门到实践

目录

  • Pygame 简介

  • 环境搭建与安装

  • 核心概念解析

    • 游戏循环 (Game Loop)

    • 坐标系统

  • 第一个 Pygame 程序

    • 代码详解

  • 事件处理机制

  • 图形绘制

  • 完整游戏示例

  • 进阶技巧

    • 使用 Sprite 类

    • 加载图像和音频

    • 文字渲染

  • 总结与资源

Pygame 简介

Pygame 是一个基于 Python 的游戏开发库,它封装了 SDL (Simple DirectMedia Layer) 库,为开发二维游戏提供了简单而强大的 API。Pygame 是学习游戏开发的绝佳入门选择,特别适合初学者快速上手。

Pygame 的主要特点包括:

  • 跨平台兼容性强 – 支持 Windows、macOS、Linux 等多个平台

  • 社区活跃 – 拥有庞大的开发者社区和丰富的教程资源

  • 文档丰富 – 官方文档详尽,示例代码充足

  • 学习曲线平缓 – API 设计简洁,易于理解和使用

无论你想制作简单的小游戏,还是学习游戏开发的基本概念,Pygame 都是一个不错的选择。

环境搭建与安装

安装 Pygame 非常简单,只需要确保你已经安装了 Python 3.6+,然后使用 pip 安装即可:

pip install pygame

安装完成后,可以通过以下代码验证安装是否成功:

import pygame
print(pygame.__version__)  # 输出版本号


核心概念解析

在开始编写游戏之前,我们需要了解 Pygame 的几个核心概念:

游戏循环 (Game Loop)

游戏循环是游戏开发的核心机制。它是一个持续运行的循环,负责处理以下三个主要任务:

  • 事件处理 – 响应用户输入(键盘、鼠标等)

  • 游戏更新 – 更新游戏状态和对象位置

  • 画面渲染 – 将游戏内容绘制到屏幕上

  • ┌─────────────────────────────────────┐
    │           游戏循环开始               │
    └──────────────┬──────────────────────┘
                  ▼
    ┌─────────────────────────────────────┐
    │ 1. 处理事件 (pygame.event.get())   │
    └──────────────┬──────────────────────┘
                  ▼
    ┌─────────────────────────────────────┐
    │ 2. 更新游戏状态 (update logic)     │
    └──────────────┬──────────────────────┘
                  ▼
    ┌─────────────────────────────────────┐
    │ 3. 渲染画面 (screen.fill/draw)     │
    └──────────────┬──────────────────────┘
                  ▼
    ┌─────────────────────────────────────┐
    │ 4. 更新显示 (pygame.display.flip) │
    └──────────────┬──────────────────────┘
                  │
                  └──────→ 回到第 1 步

    坐标系统

    Pygame 使用屏幕坐标系,原点 (0, 0) 位于屏幕左上角。X 轴向右增加,Y 轴向下增加。这一点与数学中的坐标系有所不同,需要注意。

    (0,0) ───────────────────────→ X

    │   ● (200, 150)



    Y


    第一个 Pygame 程序

    下面是一个最简单的 Pygame 程序,它创建了一个窗口并填充为白色:

    import pygame
    import sys

    # 初始化 Pygame
    pygame.init()

    # 设置屏幕尺寸
    screen = pygame.display.set_mode((800, 600))
    pygame.display.set_caption("我的第一个 Pygame 游戏")

    # 设置颜色
    WHITE = (255, 255, 255)

    # 游戏循环
    running = True
    while running:
       for event in pygame.event.get():
           if event.type == pygame.QUIT:
               running = False
       
       # 填充背景
       screen.fill(WHITE)
       
       # 更新显示
       pygame.display.flip()

    pygame.quit()
    sys.exit()

    代码详解

    让我们逐行解析上面的代码:

    代码说明
    pygame.init() 初始化 Pygame 模块,必须在使用其他功能之前调用
    display.set_mode() 创建游戏窗口,参数是宽度和高度的元组
    event.get() 获取所有待处理的事件
    screen.fill() 用指定颜色填充屏幕
    display.flip() 更新屏幕显示,将缓冲区内容显示到屏幕上

    事件处理机制

    Pygame 使用事件驱动的编程模式。常见的事件类型包括:

    事件类型说明
    pygame.QUIT 用户关闭窗口
    pygame.KEYDOWN 键盘按键被按下
    pygame.KEYUP 键盘按键被释放
    pygame.MOUSEBUTTONDOWN 鼠标按键被按下
    pygame.MOUSEMOTION 鼠标移动

    以下是键盘事件处理的示例:

    for event in pygame.event.get():
       if event.type == pygame.QUIT:
           running = False
       elif event.type == pygame.KEYDOWN:
           if event.key == pygame.K_LEFT:
               print("左方向键被按下")
           elif event.key == pygame.K_RIGHT:
               print("右方向键被按下")


    图形绘制

    Pygame 提供了丰富的绘图函数,可以绘制各种基本图形:

    import pygame

    # 绘制矩形
    pygame.draw.rect(screen, (255, 0, 0), (100, 100, 200, 150))

    # 绘制圆形
    pygame.draw.circle(screen, (0, 255, 0), (400, 300), 50)

    # 绘制椭圆
    pygame.draw.ellipse(screen, (0, 0, 255), (500, 200, 150, 100))

    # 绘制线条
    pygame.draw.line(screen, (255, 255, 0), (0, 0), (800, 600), 5)

    # 绘制多边形
    points = [(100, 500), (200, 400), (300, 500)]
    pygame.draw.polygon(screen, (255, 0, 255), points)


    完整游戏示例

    下面是一个完整的"接球"游戏示例,展示了 Pygame 的各项功能:

    import pygame
    import sys
    import random

    # 初始化
    pygame.init()
    WIDTH, HEIGHT = 800, 600
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    pygame.display.set_caption("接球游戏")
    clock = pygame.time.Clock()

    # 颜色定义
    WHITE = (255, 255, 255)
    BLACK = (0, 0, 0)
    RED = (255, 0, 0)
    BLUE = (0, 0, 255)

    # 振板设置
    paddle_width = 100
    paddle_height = 15
    paddle_x = WIDTH // 2 – paddle_width // 2
    paddle_y = HEIGHT – 50
    paddle_speed = 8

    # 小球设置
    ball_radius = 10
    ball_x = WIDTH // 2
    ball_y = HEIGHT // 2
    ball_speed_x = random.choice([-4, 4])
    ball_speed_y = -4

    # 分数
    score = 0
    font = pygame.font.Font(None, 36)

    running = True
    while running:
       # 事件处理
       for event in pygame.event.get():
           if event.type == pygame.QUIT:
               running = False
       
       # 键盘控制
       keys = pygame.key.get_pressed()
       if keys[pygame.K_LEFT] and paddle_x > 0:
           paddle_x -= paddle_speed
       if keys[pygame.K_RIGHT] and paddle_x < WIDTH – paddle_width:
           paddle_x += paddle_speed
       
       # 更新小球位置
       ball_x += ball_speed_x
       ball_y += ball_speed_y
       
       # 碰撞检测
       if ball_x – ball_radius <= 0 or ball_x + ball_radius >= WIDTH:
           ball_speed_x *= -1
       if ball_y – ball_radius <= 0:
           ball_speed_y *= -1
       
       # 振板碰撞
       if (paddle_y <= ball_y + ball_radius <= paddle_y + paddle_height and
           paddle_x <= ball_x <= paddle_x + paddle_width):
           ball_speed_y *= -1
           score += 10
       
       # 游戏结束
       if ball_y > HEIGHT:
           ball_x = WIDTH // 2
           ball_y = HEIGHT // 2
           score = 0
       
       # 绘制
       screen.fill(BLACK)
       pygame.draw.rect(screen, BLUE, (paddle_x, paddle_y, paddle_width, paddle_height))
       pygame.draw.circle(screen, RED, (int(ball_x), int(ball_y)), ball_radius)
       
       # 显示分数
       score_text = font.render(f"Score: {score}", True, WHITE)
       screen.blit(score_text, (10, 10))
       
       pygame.display.flip()
       clock.tick(60)

    pygame.quit()
    sys.exit()


    进阶技巧

    使用 Sprite 类

    对于复杂的游戏,建议使用 Pygame 的 Sprite 类来管理游戏对象:

    class Ball(pygame.sprite.Sprite):
       def __init__(self):
           super().__init__()
           self.image = pygame.Surface((20, 20))
           self.image.fill((255, 0, 0))
           self.rect = self.image.get_rect()
           self.rect.center = (400, 300)
           self.speed_x = 5
           self.speed_y = 5
       
       def update(self):
           self.rect.x += self.speed_x
           self.rect.y += self.speed_y

    # 使用
    ball = Ball()
    all_sprites = pygame.sprite.Group()
    all_sprites.add(ball)
    all_sprites.update()
    all_sprites.draw(screen)

    加载图像和音频

    Pygame 支持加载外部资源:

    # 加载图像
    player_image = pygame.image.load("player.png")
    player_image = pygame.transform.scale(player_image, (50, 50))

    # 加载音频
    pygame.mixer.init()
    sound = pygame.mixer.Sound("jump.wav")
    sound.play()

    # 背景音乐
    pygame.mixer.music.load("bgm.mp3")
    pygame.mixer.music.play(-1)  # 循环播放

    文字渲染

    显示文字是游戏开发中的常见需求:

    # 创建字体对象
    font = pygame.font.Font(None, 48)  # 使用系统默认字体
    # font = pygame.font.Font("arial.ttf", 48) # 使用自定义字体

    # 渲染文字
    text = font.render("Hello Pygame!", True, (255, 255, 255))

    # 显示到屏幕
    screen.blit(text, (300, 250))


    总结与资源

    本文主要介绍了Pygame 的基本用法,包括:

  • 环境搭建 – 安装 Pygame 库

  • 游戏循环 – 事件处理、更新、渲染的循环机制

  • 图形绘制 – 基本图形的绘制方法

  • 事件处理 – 键盘和鼠标事件的响应

  • 进阶技巧 – Sprite、音频、文字等

  • 接下来,你可以尝试修改示例代码,添加更多功能,如增加关卡、道具系统、敌人 AI 等,进一步提升你的游戏开发技能。

    推荐资源

    资源链接
    官方文档 https://www.pygame.org/docs/
    GitHub https://github.com/pygame/pygame
    社区论坛 https://www.pygame.org/contribute.html
    教程推荐 https://kidscancode.org/lessons/

    感谢友友们支持,给博主点个关注吧~

    赞(0)
    未经允许不得转载:171主机测评 » Pygame 入门指南---Python 游戏开发从入门到实践
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址