”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Pygame开发游戏实用指南---Pygame简介

Pygame开发游戏实用指南---Pygame简介

发布于2024-08-31
浏览:533

在本文中,我们将学习如何下载和安装游戏开发库 Pygame,并且我们将运行一个简单的示例项目来熟悉 Pygame。

项目代码下载链接:https://github.com/la-vie-est-belle/pygame_codes


安装 Pygame

在 Windows 上安装 Pygame
打开命令行窗口并键入命令 pip install pygame,然后按 Enter。如果最后看到Successfully Install pygame的提示,说明Pygame已经安装成功。
The Practical Guide to Game Development with Pygame---Introduction to Pygame

注意:本教程使用的Pygame版本是2.6.0。

当然,我们还需要验证Pygame是否正常工作。打开命令行窗口,输入python,按回车键,进入Python命令行界面。然后输入 import pygame.如果出现Pygame欢迎信息,则说明安装成功,Pygame可以正常使用。
The Practical Guide to Game Development with Pygame---Introduction to Pygame

在 MacOS 上安装 Pygame
同样,打开终端,输入 pip3 install pygame,然后按 Enter 键安装 Pygame。验证方法同上,这里不再赘述。


运行 Pygame 示例项目

打开命令行窗口,运行命令 python -m pygame.examples.aliens 即可启动 Pygame 自带的内置外星人游戏。控件如下:

  • 方向键移动玩家
  • 空格键射击 The Practical Guide to Game Development with Pygame---Introduction to Pygame

The Practical Guide to Game Development with Pygame---Introduction to Pygame

在接下来的实践文章中,我们将一起开发并实现这款外星人游戏。现在,让我们看一下这个简单的 Pygame 示例代码 1-1。

import sys
import pygame

pygame.init()                                       # 1
screen = pygame.display.set_mode((1100, 600))       # 2
pygame.display.set_caption('Dino Runner')           # 3

icon = pygame.image.load('icon.png')                # 4
pygame.display.set_icon(icon)

dino = pygame.image.load('dino_start.png')          # 5
dino_rect = dino.get_rect()
dino_rect.topleft = (80, 300)

while True:                                         # 6
    for event in pygame.event.get():                # 7
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    screen.fill((255, 255, 255))                    # 8
    screen.blit(dino, dino_rect)                    # 9
    pygame.display.flip()                           # 10

结果如下:
The Practical Guide to Game Development with Pygame---Introduction to Pygame

代码解释:
#1 pygame.init() 初始化 Pygame 库中的所有模块。在使用任何 Pygame 函数或类之前必须包含此行。

#2 调用 pygame.display.set_mode() 函数设置游戏窗口的大小(大小作为元组传递)。该函数返回一个窗口对象,该对象存储在变量 screen 中。该对象允许您在窗口中绘制图形、添加图像和文本。 pygame.display模块专门用于窗口管理和屏幕显示。

#3 使用 pygame.display.set_caption() 函数设置窗口标题。

#4 使用 pygame.image.load() 函数加载图像,在本例中为窗口图标。该函数返回一个图像对象,该对象存储在 icon 变量中。接下来,使用pygame.display.set_icon()函数设置窗口图标。

#5 加载主要人物图像,调用get_rect()获取人物图像的矩形区域(一个Rect对象),并将该矩形的左上角topleft设置为屏幕位置。

注:屏幕坐标原点为左上角,X轴向右延伸,Y轴向下延伸。 Pygame中的坐标系将在后面章节详细讲解

#6 进入游戏循环,Pygame 将持续检测和处理用户输入、更新游戏状态或更新屏幕内容。

#7 使用 pygame.event.get() 获取事件队列。在 for 循环中,我们读取并处理每个事件。如果事件类型 event.type 为 pygame.QUIT (即关闭窗口),则调用 pygame.quit() 退出游戏。 sys.exit() 终止当前Python程序,清理并退出运行Pygame程序的线程。

#8 调用窗口对象screen的fill()函数,给窗口填充一种颜色。您传递一个表示颜色 RGB 值的元组,在本例中为白色。

#9 调用窗口对象screen的blit()函数将字符图像显示在屏幕上,位置由之前设置的矩形dino_rect定义。还可以向 blit() 传递一个坐标元组 (x, y) 来设置角色在屏幕上的位置,如:

screen.blit(dino, (80, 300))

#10 调用pygame.display.flip()函数刷新屏幕内容。您还可以使用 pygame.display.update() 来达到相同的效果。后者还可以接受矩形区域来仅更新屏幕的该部分。例如,以下行将仅更新左上角位于 (0, 0) 且宽度和高度为 350 像素的矩形。

pygame.display.update((0, 0, 350, 350))

The Practical Guide to Game Development with Pygame---Introduction to Pygame


概括

在本文中,我们学习了如何在 Windows 和 MacOS 上安装 Pygame,并探索了一个简单的示例代码来了解 Pygame 的基本结构、运行原理和一些常用功能。如果还有不完全理解的部分,可以暂时先不说。后面的章节可能有助于阐明这些概念。

如果您喜欢本教程,请请作者喝杯咖啡。 :)

  • The Practical Guide to Game Development with Pygame---Introduction to Pygame

  • The Practical Guide to Game Development with Pygame---Introduction to Pygame

  • The Practical Guide to Game Development with Pygame---Introduction to Pygame

版本声明 本文转载于:https://dev.to/code_egg/the-practical-guide-to-game-development-with-pygame-introduction-to-pygame-2b3k?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何使用PHP从XML文件中有效地检索属性值?
    如何使用PHP从XML文件中有效地检索属性值?
    从php 您的目标可能是检索“ varnum”属性值,其中提取数据的传统方法可能会使您感到困惑。 - > attributes()为$ attributeName => $ attributeValue){ echo $ attributeName,'=“',$ at...
    编程 发布于2025-02-19
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月份)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将...
    编程 发布于2025-02-19
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    element.addeventlistener(event,function(){/要解决此问题,请考虑将事件处理程序存储在中心位置,例如页面的主要对象,请考虑将事件处理程序存储在中心位置,否则无法清理匿名事件处理程序。 。这允许在需要时轻松迭代和清洁处理程序。
    编程 发布于2025-02-19
  • 如何使用Python的记录模块实现自定义处理?
    如何使用Python的记录模块实现自定义处理?
    使用Python的Loggging Module 确保正确处理和登录对于疑虑和维护的稳定性至关重要Python应用程序。尽管手动捕获和记录异常是一种可行的方法,但它可能乏味且容易出错。解决此问题,Python允许您覆盖默认的异常处理机制,并将其重定向为登录模块。这提供了一种方便而系统的方法来捕获和...
    编程 发布于2025-02-19
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能以在window.onunload事件上调用。 pre> window.onload ...
    编程 发布于2025-02-19
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样?使用openssl? openssl_decrypt()函数要求iv参数的长度与所使用的cipher的块大小相同。 && && && && &&华openssl_decry...
    编程 发布于2025-02-19
  • 对象拟合:IE和Edge中的封面失败,如何修复?
    对象拟合:IE和Edge中的封面失败,如何修复?
    解决此问题,我们采用了一个巧妙的CSS解决方案来解决问题:左:50%; 高度:auto; 宽度:100%; //对于水平块 ,使用绝对定位将图像定位在中心,以object-fit:object-fit:cover in IE和edge消除了问题。现在,图像将按比例扩展,保持所需的效果而不会失真。...
    编程 发布于2025-02-19
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    如何为JavaScript对象变量创建动态键,尝试为JavaScript对象创建动态键,使用此Syntax jsObj['key' i] = 'example' 1;将不起作用。正确的方法采用方括号:他们维持一个长度属性,该属性反映了数字属性(索引)和一个数字属性的数量。标准对象没有模仿这...
    编程 发布于2025-02-19
  • 为什么箭头函数在IE11中引起语法错误?如何修复它们?
    为什么箭头函数在IE11中引起语法错误?如何修复它们?
    为什么arrow functions在IE 11 中引起语法错误。 IE 11不支持箭头函数,导致语法错误。这使用传统函数语法来定义与原始箭头函数相同的逻辑。 IE 11现在将正确识别并执行代码。
    编程 发布于2025-02-19
  • 如何使用PHP将斑点(图像)正确插入MySQL?
    如何使用PHP将斑点(图像)正确插入MySQL?
    在尝试将image存储在mysql数据库中时,您可能会遇到一个可能会遇到问题。本指南将提供成功存储您的图像数据的解决方案。 essue values('$ this-> image_id','file_get_contents($ tmp_image)&#...
    编程 发布于2025-02-19
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError:SomeClass实...
    编程 发布于2025-02-19
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    [2明确担心Microsoft Visual C(MSVC)在正确实现两相模板实例化方面努力努力。该机制的哪些具体方面无法按预期运行?背景:说明:的初始Syntax检查在范围中受到限制。它未能检查是否存在声明名称的存在,导致名称缺乏正确的声明时会导致编译问题。为了说明这一点,请考虑以下示例:一个符合...
    编程 发布于2025-02-19
  • 如何以不同的频率控制Android设备振动?
    如何以不同的频率控制Android设备振动?
    控制使用频率变化的Android设备振动是否想为您的Android应用程序添加触觉元素?了解如何触发设备的振动器至关重要。您可以做到这一点:生成基本振动以生成简单的振动,使用振动器对象:这将导致设备在指定的持续时间内振动。许可要求通过上述技术,您可以创建在您的Android应用程序中自定义振动,以增...
    编程 发布于2025-02-19
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在java中的多个返回类型:一个误解介绍,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但是,情况确实如此吗?通用方法:拆开神秘 [方法仅具有单一的返回类型。相反,它采用机制,如钻石符号“ ”。分解方法签名: :本节定义了一个通用类型参数,E。它表示该方法接受了扩展foo类的任...
    编程 发布于2025-02-19
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    Exploiting Regular ExpressionsA more efficient solution involves leveraging regular expressions.正则表达式允许您定义复杂的搜索模式并在单个操作中执行文本转换。示例使用接下来,您可以使用匹配器查找令牌的所...
    编程 发布于2025-02-19

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3