在我的本系列的第一篇文章中,我解释了如何使用 Python 创建一个简单的、基于文本的骰子游戏。你还使用了 Turtle 模块来生成一些简单的图形。在本文中,你将开始使用一个名为 Pygame 的模块来创建一个带有图形的游戏。
Turtle 模块默认包含在 Python 中。任何安装了 Python 的人也拥有 Turtle。对于像 Pygame 这样的高级模块来说,情况并非如此。因为它是一个专门的代码库,你必须自己安装 Pygame。现代 Python 开发使用虚拟环境的概念,这为你的 Python 代码提供了自己的运行空间,并且还有助于管理你的应用程序使用的代码库。这确保了当你将你的 Python 应用程序传递给另一个用户玩时,你确切地知道他们需要安装什么才能使其工作。
你可以手动管理你的 Python 虚拟环境,或者你可以让你的 IDE 帮助你。现在,你可以让 PyCharm 完成所有工作。如果你没有使用 PyCharm,阅读 László Kiss Kollár 关于管理 Python 包的文章。
Pygame 入门
Pygame 是一个库,或Python 模块。它是一个通用代码的集合,可以防止你在编写每个新游戏时都必须重新发明轮子。你已经使用了 Turtle 模块,你可以想象,如果你必须在用它绘图之前编写代码来创建一个笔,那将有多么复杂。Pygame 提供了类似的优势,但用于视频游戏。
视频游戏需要一个设置,一个它发生的场所世界。在 Pygame 中,有两种不同的方法来创建你的设置
- 设置背景颜色
- 设置背景图片
无论哪种方式,你的背景都只是一张图片或一种颜色。你的视频游戏角色无法与背景中的事物互动,所以不要把任何太重要的东西放在那里。它只是布景。
设置你的第一个 Pygame 脚本
要启动一个新的 Python 项目,你通常会在你的计算机上创建一个新文件夹,并将你所有的游戏文件放入这个目录中。至关重要的是,你要将运行你的游戏所需的所有文件都保存在你的项目文件夹中。
PyCharm (或你使用的任何 IDE) 可以为你做到这一点。
要在 PyCharm 中创建一个新项目,请导航到 File 菜单并选择 New Project。在出现的窗口中,输入你的项目名称 (例如 game_001)。请注意,这个项目被保存在你的主目录中的一个特殊的 PycharmProjects 文件夹中。这确保了你的游戏所需的所有文件都保存在一个地方。
在创建新项目时,让 PyCharm 使用 Virtualenv 创建一个新的环境,并接受所有默认设置。启用创建 main.py 文件的选项 (并设置一些重要的默认设置)。

opensource.com
在你单击 Create 按钮后,一个新的项目会出现在你的 PyCharm 窗口中。该项目由一个虚拟环境 (左列中列出的 venv 目录) 和一个名为 main.py 的演示文件组成。
删除 main.py 的所有内容,以便你可以输入你自己的自定义代码。一个 Python 脚本以文件类型、你的姓名以及你想使用的许可证开始。使用开源许可证,以便你的朋友可以改进你的游戏并与你分享他们的更改
#!/usr/bin/env python3
# by Seth Kenlon
## GPLv3
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://gnu.ac.cn/licenses/>.
然后告诉 Python 你想使用哪些模块。在这个代码示例中,你不需要在每一行上键入 # 字符或其后的任何内容。Python 中的 # 字符表示注释,即为自己和其他编码人员留下的代码注释。
import pygame # load pygame keywords
import sys # let python use your file system
import os # help python identify your OS
请注意,PyCharm 不理解 Pygame 是什么,并在其下方划线以将其标记为错误。这是因为 Pygame 与 sys 和 os 不同,它不是默认包含在 Python 中的。你需要将 Pygame 包含在你的项目目录中,然后才能在代码中成功使用它。要包含它,请将鼠标悬停在 pygame 一词上,直到你看到一个通知弹出窗口解释该错误。
单击警报框中的 Install package pygame 链接,等待 PyCharm 将 Pygame 安装到你的虚拟环境中。
一旦安装完成,错误就会消失。
如果没有像 PyCharm 这样的 IDE,你可以使用 pip 命令手动将 Pygame 安装到你的虚拟环境中。
代码段
因为你将大量使用这个脚本文件,所以在文件中创建段落会有助于你了解在哪里放置东西。你使用块注释来做到这一点,块注释是仅在查看你的源代码时才可见的注释。在你的代码中创建四个块。这些都是 Python 忽略的注释,但当你学习这些课程时,它们对你来说是很好的占位符。当我编码时,我仍然使用占位符,因为它有助于我组织和计划。
'''
Variables
'''
# put variables here
'''
Objects
'''
# put Python classes and functions here
'''
Setup
'''
# put run-once code here
'''
Main Loop
'''
# put game loop here
接下来,设置你的游戏窗口大小。请记住,并非每个人都有一个大的电脑屏幕,所以最好使用适合“大多数”人的电脑的屏幕尺寸。
有一种方法可以切换全屏模式,就像许多现代视频游戏那样,但因为你才刚刚开始,所以保持简单,只设置一个尺寸。
'''
Variables
'''
worldx = 960
worldy = 720
Pygame 引擎需要一些基本设置,然后你才能在脚本中使用它。你必须设置帧速率,启动其内部时钟,并启动 (使用关键字 init
,即 initialize) Pygame。
添加这些变量
fps = 40 # frame rate
ani = 4 # animation cycles
在 Setup 部分添加启动 Pygame 内部时钟的指令
'''
Setup
'''
clock = pygame.time.Clock()
pygame.init()
现在你可以设置你的背景了。
设置背景
在继续之前,打开一个图形应用程序,并为你的游戏世界创建一个背景。将其保存为项目目录中名为 images
的文件夹中的 stage.png
。如果你需要一个起点,你可以从 kenny.nl 下载一组 Creative Commons 背景。
有几个免费的图形应用程序可以用来创建、调整大小或修改你的游戏的图形。
- Pinta 是一款基本的、易于学习的绘画应用程序。
- Krita 是一款专业级的绘画材料模拟器,可以用来创作精美的图像。如果你对为视频游戏创作艺术非常感兴趣,你甚至可以购买一系列在线 游戏艺术教程。
- Inkscape 是一款矢量图形应用程序。使用它来绘制形状、线条、样条曲线和贝塞尔曲线。
你的图形不必很复杂,你可以随时返回并稍后更改它。一旦你有了背景,在你的文件的 setup 部分添加这段代码
world = pygame.display.set_mode([worldx,worldy])
backdrop = pygame.image.load(os.path.join('images','stage.png'))
backdropbox = world.get_rect()
如果你只是想用颜色填充你的游戏世界的背景,你只需要
world = pygame.display.set_mode([worldx, worldy])
你还必须定义要使用的颜色。在你的 setup 部分,使用红色、绿色和蓝色 (RGB) 的值创建一些颜色定义。
'''
Variables
'''
BLUE = (25, 25, 200)
BLACK = (23, 23, 23)
WHITE = (254, 254, 254)
注意错误
PyCharm 很严格,这对于编程来说是很典型的。语法至关重要!当你在 PyCharm 中输入你的代码时,你会看到警告和错误。警告是黄色的,错误是红色的。
然而,PyCharm 有时可能过于热心,所以通常可以安全地忽略警告。你可能违反了“Python 风格”,但这些是细微的约定,你会在时间中学习到。你的代码仍然会按预期运行。
另一方面,错误会阻止你的代码 (有时甚至是 PyCharm) 执行你期望的操作。例如,PyCharm 非常坚持在代码的最后一行末尾有一个换行符,所以你必须在你的代码末尾按下键盘上的 Enter 或 Return。如果你不这样做,PyCharm 会悄悄地拒绝运行你的代码。
运行游戏
在这一点上,理论上你可以启动你的游戏了。问题是,它只会持续一毫秒。
为了证明这一点,保存然后运行你的游戏。
如果你正在使用 IDLE,请从 Run 菜单中选择 Run Module
来运行你的游戏。
如果你正在使用 PyCharm,请单击右上角工具栏中的 Run file
按钮。

opensource.com
你也可以直接从 Unix 终端或 Windows 命令提示符运行 Python 脚本,只要你在你的虚拟环境中。
无论你如何启动它,都不要期望太多,因为你的游戏现在只持续几毫秒。你可以在下一节中修复这个问题。
循环
除非另有说明,否则 Python 脚本只运行一次且仅运行一次。现在的计算机速度非常快,所以你的 Python 脚本会在不到一秒的时间内运行。
要强制你的游戏保持打开和活动状态足够长的时间,以便有人看到它 (更不用说玩它了),请使用 while
循环。要使你的游戏保持打开状态,你可以将一个变量设置为某个值,然后告诉 while
循环只要变量保持不变就继续循环。
这通常被称为“主循环”,你可以使用术语 main
作为你的变量。将此添加到你的 Variables 部分的任何位置
main = True
在主循环期间,使用 Pygame 关键字来检测键盘上的键是否已被按下或释放。将此添加到你的 main loop 部分
'''
Main loop
'''
while main:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
try:
sys.exit()
finally:
main = False
if event.type == pygame.KEYDOWN:
if event.key == ord('q'):
pygame.quit()
try:
sys.exit()
finally:
main = False
务必在你的代码的最后一行之后按下 Enter 或 Return,以便在你的文件底部有一个空行。
同样在你的主循环中,刷新你的世界的背景。
如果你正在使用图像作为背景
world.blit(backdrop, backdropbox)
如果你正在使用颜色作为背景
world.fill(BLUE)
最后,告诉 Pygame 刷新屏幕上的所有内容并推进游戏的内部时钟。
pygame.display.flip()
clock.tick(fps)
保存你的文件,然后再次运行它,看看有史以来最无聊的游戏。
要退出游戏,请按键盘上的 q
。
冻结你的 Python 环境
PyCharm 正在管理你的代码库,但你的用户不会从 PyCharm 运行你的游戏。就像你保存你的代码文件一样,你也需要保留你的虚拟环境。
转到 Tools 菜单并选择 Sync Python Requirements。这会将你的库依赖项保存到一个名为 requirements.txt 的特殊文件中。当你第一次同步你的需求时,PyCharm 会提示你安装一个插件并添加依赖项。单击以接受这些提议。

opensource.com
一个 requirements.txt 为你生成,并放置在你的项目目录中。
代码
这是到目前为止你的代码应该看起来的样子
#!/usr/bin/env python3
# by Seth Kenlon
# GPLv3
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://gnu.ac.cn/licenses/>.
import pygame
import sys
import os
'''
Variables
'''
worldx = 960
worldy = 720
fps = 40 # frame rate
ani = 4 # animation cycles
main = True
BLUE = (25, 25, 200)
BLACK = (23, 23, 23)
WHITE = (254, 254, 254)
'''
Objects
'''
# put Python classes and functions here
'''
Setup
'''
clock = pygame.time.Clock()
pygame.init()
world = pygame.display.set_mode([worldx, worldy])
backdrop = pygame.image.load(os.path.join('images', 'stage.png'))
backdropbox = world.get_rect()
'''
Main Loop
'''
while main:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
try:
sys.exit()
finally:
main = False
if event.type == pygame.KEYDOWN:
if event.key == ord('q'):
pygame.quit()
try:
sys.exit()
finally:
main = False
world.blit(backdrop, backdropbox)
pygame.display.flip()
clock.tick(fps)
下一步做什么
在本系列的下一篇文章中,我将向你展示如何添加到你当前空旷的游戏世界中,所以开始创建或查找一些图形来使用吧!
6 条评论