使用 PyGame 模块在 Python 中构建简单游戏

pythonserver side programmingprogramming

Pygame 是一个很好的游戏开发库,因为它包含各种内置工具和功能,可用于创建从简单到复杂的各种类型的游戏。该库包括图形、声音和输入处理,所有这些都是任何游戏所必需的。

创建和修改精灵的能力是 Pygame 最出色的功能之一。精灵是描绘游戏角色、对象和其他游戏功能的图形对象。Pygame 包含一个强大的精灵类,允许开发人员将图形和动画合并到游戏中,移动和旋转精灵,并检测它们之间的碰撞。

Pygame 的另一个重要元素是碰撞检测,它允许开发人员识别两个游戏对象何时发生碰撞。在游戏中,这至关重要,因为它允许用户与环境和其他游戏项目进行交互。 Pygame 包含一个碰撞检测机制,用于检测精灵与其他游戏元素之间的碰撞。

除了精灵和碰撞检测之外,Pygame 还包含声音和音乐功能。这使开发人员可以轻松地将音效和音乐融入到他们的游戏中,从而显著改善游戏体验。

总体而言,Pygame 是一个强大且适应性强的工具包,可用于构建各种游戏和多媒体应用程序。它拥有简单的 API、广泛的文档和庞大的用户群。

我们将要构建的游戏是一个简单的 2D 游戏,您可以在其中与环境互动并移动玩家以捕捉屏幕上的物体。每次玩家触摸它时,他都会获得一个分数。

这是一款简单的游戏,但开发它将让您深入了解 Pygame 模块以及如何使用它来创建更高级的游戏。

入门

在深入使用 pygame 库之前,我们首先需要使用 pip 安装该库。

但是,由于它不是内置的,我们必须首先安装 pygame 库。这可以使用 pip 包管理器完成。

要安装 pygame 库,请打开您的终端并输入以下命令 -

pip install pygame

这将下载并安装 pygame 库及其依赖项。安装后,我们可以使用以下语句在 Python 代码中导入 pygame -

import pygame

使用 Pygame 模块构建一个简单的游戏

这篇文章与其他文章略有不同,因为在本文中,我们将首先使用快速简便的注释编写整个脚本,以便于理解,然后最终分解所有组件以及我们正在做的事情。这样更容易理解,也不会干扰学习过程!

完整代码

示例

以下是完整代码 −

import pygame
import random

# 初始化 pygame
pygame.init()

# 设置屏幕的宽度和高度 (width, height)
screen = pygame.display.set_mode((800, 600))

# 设置窗口的标题
pygame.display.set_caption("Catch Game")

# 设置时钟
clock = pygame.time.Clock()

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

# 玩家类别
class Player(pygame.sprite.Sprite):
   def __init__(self):
      super().__init__()
      selfelf.image = pygame.Surface([50, 50])
      self.image.fill(RED)
      self.rect = self.image.get_rect()
      self.rect.x = 375
      self.rect.y = 500
      self.speed = 5

   def update(self):
      # 获取当前按键状态
      keys = pygame.key.get_pressed()

      # Move the player
   if keys[pygame.K_LEFT]:
      self.rect.x -= self.speed
   elif keys[pygame.K_RIGHT]:
      self.rect.x += self.speed

# 对象类
class Object(pygame.sprite.Sprite):
   def __init__(self):
      super().__init__()
      self.image = pygame.Surface([25, 25])
      self.image.fill(BLUE)
      self.rect = self.image.get_rect()
      self.rect.x = random.randrange(0, 750)
      self.rect.y = random.randrange(-100, -40)
      self.speed = random.randint(2, 8)

   def update(self):
    # 将对象沿屏幕向下移动
    self.rect.y += self.speed
    
    # 如果对象超出屏幕底部,则重置它
      if self.rect.top > 600:
         self.rect.x = random.randrange(0, 750)
         self.rect.y = random.randrange(-100, -40)
         self.speed = random.randint(2, 8)

# 为所有精灵和对象创建组
all_sprites = pygame.sprite.Group()
objects = pygame.sprite.Group()

# 创建玩家
player = Player()
all_sprites.add(player)

# 创建对象
for i in range(10):
    obj = Object()
    all_sprites.add(obj)
    objects.add(obj)

# 设置分数
score = 0

# 设置字体
font_name = pygame.font.match_font("arial")

# 在屏幕上绘制文本的函数
def draw_text(surf, text, size, x, y):
   font = pygame.font.Font(font_name, size)
   text_surface = font.render(text, True, WHITE)
   text_rect = text_surface.get_rect()
   text_rect.midtop = (x, y)
   surf.blit(text_surface, text_rect)

# 游戏循环
running = True
while running:
    # 设置帧速率
    clock.tick(60)
    
    # 处理事件
    for event in pygame.event.get():
    	if event.type == pygame.QUIT:
    		running = False
    
    # 更新所有精灵
    all_sprites.update()
    
    # 检查玩家与物体之间的碰撞
    hits = pygame.sprite.spritecollide(player,objects,True)
    for hit in hits:
        score += 1
        obj = Object()
        all_sprites.add(obj)
        objects.add(obj)
        
    # 在屏幕上绘制所有内容
    screen.fill(BLACK)
    all_sprites.draw(screen)
    draw_text(screen,"Score:{}".format(score),18,50,10)
    
    # 更新屏幕
    pygame.display.update()

代码分解

此代码是 Pygame 游戏的一个基本示例。以下是代码各部分的解释 -

  • pygame.init() - 初始化 Pygame。

  • screen = pygame.display.set_mode((800, 600)) - 创建分辨率为 800x600 像素的游戏屏幕。

  • pygame.display.set_caption("Catch Game") - 将窗口的标题设置为"Catch Game"。

  • clock = pygame.time.Clock() - 创建 Pygame 时钟,用于调节游戏的帧速率。

  • Colors - 这些行定义了稍后将在代码中使用的各种颜色常量。

  • Player 类 - 这是一个定义玩家对象的 Pygame 精灵类。它有一个名为"update"的方法,该方法每帧都会被调用,以根据用户输入更新玩家的位置。

  • Object class - 这是另一个 Pygame 精灵类,它定义玩家需要捕捉的对象。它有一个名为"update"的方法,每帧都会调用该方法来更新对象的位置。

  • all_sprites = pygame.sprite.Group() − 这将创建一个 Pygame 精灵组,其中包含游戏中的所有精灵。

  • objects = pygame.sprite.Group() − 这将创建一个 Pygame 精灵组,其中包含玩家需要捕捉的所有对象。

  • player = Player() − 这将创建 Player 类的一个实例并将其添加到 all_sprites 组。

  • for i in range(10) − 这将创建 Object 类的 10 个实例,将它们添加到 all_sprites 组,然后将它们添加到对象组。

  • score = 0 − 这将分数初始化为 0。

  • font_name = pygame.font.match_font("arial") − 设置用于显示分数的字体。

  • draw_text(surf, text, size, x, y) − 这是一个辅助函数,用于在屏幕上绘制文本。

  • Game loop − 这是主游戏循环。它会一直运行,直到"running"变量被设置为 False。

  • clock.tick(60) − 这会将帧速率设置为每秒 60 帧。

  • for event in pygame.event.get() − 这会处理每帧期间发生的所有 Pygame 事件。

  • all_sprites.update() − 这会调用 all_sprites 组中的所有精灵的"update"方法。

  • hits = pygame.sprite.spritecollide(player,objects,True) − 这会检查玩家和物体之间的碰撞。如果检测到碰撞,则从对象组中移除该对象,并将分数增加 1。

  • screen.fill(BLACK) − 这会用黑色填充屏幕。

  • all_sprites.draw(screen) − 这会将 all_sprites 组中的所有精灵绘制在屏幕上。

  • draw_text(screen, "Score − {}".format(score), 18, 50, 10): 这会将分数绘制在屏幕上。

  • pygame.display.update() − 这会使用当前帧期间所做的所有更改更新屏幕。

输出

以下是示例输出

结论

Pygame 是一个强大的开源软件包,用于用 Python 创建游戏和多媒体应用程序。它的各种功能和工具使其可用于创建各种类型的游戏,从简单的 2D 平台游戏到更复杂的 3D 游戏。在本教程中,我们研究了如何使用 Pygame 制作一个简单的游戏,玩家可以在其中与环境互动、四处移动并抓取屏幕上的东西。

按照本教程,您应该已经了解了 Pygame 的工作原理以及如何使用它来创建更复杂的游戏。总的来说,对于想要构建基于 Python 的游戏的游戏开发者来说,Pygame 是一个绝佳的工具。


相关文章