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




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

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

# Initialize pygame
pygame.init()

# Set the width and height of the screen (width, height)
screen = pygame.display.set_mode((800, 600))

# Set the title of the window
pygame.display.set_caption("Catch Game")

# Set the clock
clock = pygame.time.Clock()

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

# Player class
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):
      # Get the current key state
      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

# Object class
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):
      # Move the object down the screen
      self.rect.y += self.speed

      # If the object goes off the bottom of the screen, reset it
      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)

# Create groups for all sprites and objects
all_sprites = pygame.sprite.Group()
objects = pygame.sprite.Group()

# Create the player
player = Player()
all_sprites.add(player)

# Create the objects
for i in range(10):
   obj = Object()
   all_sprites.add(obj)
   objects.add(obj)

# Set the score
score = 0

# Set the font
font_name = pygame.font.match_font("arial")

# Function to draw text on the screen
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)

# Game loop
running = True
while running:
   # Set the frame rate
   clock.tick(60)

   # Process events
   for event in pygame.event.get():
      if event.type == pygame.QUIT:
         running = False

   # Update all sprites
   all_sprites.update()

   # Check for collisions between the player and objects
   hits = pygame.sprite.spritecollide(player, objects, True)
   for hit in hits:
      score += 1
      obj = Object()
      all_sprites.add(obj)
      objects.add(obj)

   # Draw everything on the screen
   screen.fill(BLACK)
   all_sprites.draw(screen)
   draw_text(screen, "Score: {}".format(score), 18, 50, 10)

   # Update the screen
   pygame.display.update()

代码解析

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

  • pygame.init() − 这个函数用于初始化Pygame。



  • screen = pygame.display.set_mode((800, 600)) − 这个函数创建一个分辨率为800×600像素的游戏窗口。

  • pygame.display.set_caption(“Catch Game”) − 这个函数设置窗口的标题为”Catch Game”。

  • clock = pygame.time.Clock() − 这个函数创建一个Pygame时钟,用于控制游戏的帧率。

  • Colors − 这些行定义了一些颜色常量,将在代码后面使用。

  • Player类 − 这是一个Pygame精灵类,用于定义玩家对象。它有一个叫做”update”的方法,每帧调用一次,用于根据用户输入更新玩家的位置。

  • Object类 − 这是另一个Pygame精灵类,用于定义玩家需要捕捉的物体。它有一个叫做”update”的方法,每帧调用一次,用于更新物体的位置。

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

    • objects = pygame.sprite.Group() − 这创建了一个包含玩家需要捕捉的所有物体的Pygame精灵组。

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

    • for i in range(10) − 这创建了10个Object类的实例,并将它们添加到all_sprites组和objects组中。

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

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

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

    • 游戏循环 – 这是主游戏循环。它会一直运行,直到”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中构建一个简单的游戏

结论

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

通过学习本教程,您应该对Pygame的工作原理和如何使用它创建更复杂的游戏有所了解。总体而言,Pygame是游戏开发者构建基于Python的游戏的极好工具。



Python 精选笔记
如何在Python正则表达式中忽略重复后的字符匹配Python中的[ d+]正则表达式如何工作如何在Pandas DataFrame中获取第n行?Python 在列表中进行互相元组的减法使用Python-乘法选择性值使用Python将列表中的交替元素相乘?移除Python中嵌套列表中的所有重复项和排列通过Python Vincent制作柱状图使用Python Matplotlib创建基本甘特图Python Kivy中的相对布局使用Python Tkinter生成随机密码生成器使用Python Tkinter实时货币转换器在循环范围内打印Python列表元素Python - 使用OCR读取PDF内容Python - 使用正则表达式匹配包含g后跟一个或多个e的单词的程序在Python中打印2D列表的对角线Python - 打印字母直到NPython - 列表中的平方乘积Python – 列表中前缀的乘积Python – 前缀和子数组,直到出现false值Python - 字典中的优先键分配Python - 删除给定索引的元素后打印列表Python - 列表中第k列的乘积使用Python删除范围外的所有子列表如何使用Python从字符串列表中删除所有数字?如何使一个Python文件运行另一个文件?如何在Matplotlib中更改X轴和Y轴的范围?如何在Python中获得格式化的日期和时间?Python - PIL 属性Python - 字典中的前缀键匹配Python 列表中最大元素的位置Python - 在字符串中替换多个索引Python - 在字典的每个键上执行操作Python - 特定字符前的前缀提取Python - 根据大小提取前缀通过常数乘以Python字典的值Python 在包含字符串和数字的混合列表中相乘整数Python - 将给定元素移动到列表开头如何相乘Python Tuple的元素?使用Python spacy进行句子分割如何在Python中将元素移动到列表的末尾?Python-将子列表中的每个元素乘以其索引使用Qiskit在Python中的量子电路实现经典的非逻辑门Django中的基于类和基于函数的视图使用'in'和'not in'运算符在Python Pandas中检查DataFrame中是否存在某个值Python - PIL属性Python - 字典中的前缀键匹配Python - 列表中最大元素的位置Python - 在字符串中替换多个索引Python - 对字典中的每个键执行操作Python -指定字符前的前缀提取Python - 根据大小提取前缀通过常数乘以Python字典值Python-在混合字符串和数字列表中相乘整数Python – 将给定元素移动到列表的开头如何乘以Python元组的元素?使用Python spacy执行句子分割如何在Python中将元素移动到列表的末尾?Python-通过索引将子列表中的每个元素相乘使用Qiskit在Python中实现经典非逻辑门的量子电路在Django中的基于类视图和基于函数视图的对比在Python Pandas中使用'in'和'not in'运算符检查DataFrame中是否存在值使用LightFM库在Python中构建推荐引擎使用YOLO算法构建实时物体检测系统使用Python和Scikit-Learn构建客户流失预测的机器学习模型使用Python和WebSocket技术构建实时聊天应用使用Python和BERT构建问答系统使用Python和dlib库构建人脸识别系统使用Python和OpenCV库构建人脸识别系统使用Python和Pandas库构建数据预处理管道使用Pygame模块在Python中构建一个简单的游戏使用Python和ccxt库构建一个加密货币交易机器人使用Python和自然语言工具包(NLTK)构建聊天机器人使用Plan模块在Python中编写crontab文件使用Python和Requests库开发网络爬虫使用Python中的Whoosh库开发文本搜索引擎使用Python和scikit-learn开发机器学习模型使用Python和Plotly Dash创建基于Web的数据可视化仪表板使用Python控制树莓派GPIO引脚使用Python和Pandas库构建股票价格预测模型如何在Python中解析XML并计算特定节点属性的实例?如何在Python中解析本地HTML文件?如何按多列对PySpark DataFrame进行排序?如何在Pygame中移动游戏角色?如何在Python中同时打开两个文件?如何使用Python移动文件夹及其子文件夹的列表?如何使用Python将多个文件夹合并成一个文件夹?如何使用Python将多个Excel文件合并成一个单一文件?如何使用Python Pandas按照共同的键合并多个TSV文件?如何使用PIL将透明的PNG图片与另一张图片合并?Python中嵌套函数是如何工作的?Python中的全局变量和局部变量?在Python函数中如何使用全局变量?如何从Python对象中获取源代码?如何在Python中返回一个函数?如何在Python中安装matplotlib?Python - 分割包含散乱字符的字符串Python - 记录列表XORPython – 向记录的末尾添加数据Python - 键值大于K的记录在Python中垂直打印列表Python - 列表中字符串平均长度Python列表中的交替循环Python程序实现混淆词游戏Python-记录联合Python程序计算列表中元组的重复项Python程序:将字符串的字符转换为相反的大小写Python - 打印给定年份列表中的闰年数量Python - 打印所有子列表中的共同元素Python - 删除嵌套列表中的所有元素如何在Python列表中检查空格?在Python中引发异常到另一个异常Python字符串中的范围复制Python程序计算包含列表的列表中列表的数量修改给定Python列表中的重复值Python - 检查元素是否在指定范围内出现从Python的元组列表中删除所有字符串如何使用Pygame添加颜色呼吸效果?如何在Bokeh中添加颜色条如何在Bokeh中添加颜色选择器?使用Python程序显示带有星边框的数字半菱形图案Python使用ipaddress模块确定给定的IPv4地址是否为保留地址使用ipaddress模块的Python程序来确定给定的IP地址是公网还是私网Python程序通过平方和连接给定数字的奇数位数来创建一个OTPPython程序创建以零为中心的列表Python程序计算字符串中的字符数Python程序将米转换为码,反之亦然Python程序:统计文本文件中的元音、行数和字符数Python程序计算文本文件中的单词数量Python程序,用于计算文本文件中空格的数量将字典的值转换为字符串的Python程序Python程序将浮点数转换为指数Python程序将整数转换为指数Python程序将整数转换为罗马数字将整数列表转换为字符串列表的Python程序Python程序将XML转换为字典Python程序:通过重复键对应的值次数将字典转换为列表将Dict of list转换为CSV的Python程序使用正则表达式统计Python程序中大写字母、小写字母、特殊字符和数字值的个数Python元组的并集Python - 嵌套和混合列表中的类型转换