通过创建视频游戏学习 Python

通过我们新电子书中的分步说明,以有趣的方式了解 Python。
134 位读者喜欢这篇文章。
5 arcade-style games for Linux

Cicada Strange 在 Flickr 上, CC BY-SA 2.0

Python 是目前最流行的编程语言之一。无论您是想为了工作还是为了娱乐而学习它,它都是一种功能强大且有用的语言,适用于任何目的。您可以创建应用程序来帮助您完成日常任务、您和您的朋友可以玩的有趣游戏、处理数据的脚本、生成或解析信息的应用程序等等。

无论您打算用编程语言做什么,我们都认为通过创建游戏来学习比通过处理数字或转换字符串更有趣。如果您是编程新手,那么当您可以在视频游戏等熟悉的设置中看到代码运行时,就更容易理解为什么必须在代码中做某事。

您可能不会选择 Python 作为可用的最佳编程语言(每个人都有自己的答案),但它是一种相对容易入门的语言。Python 可以使用很多单词(例如 isis not)而不是符号(例如 =!=)。它还管理许多底层任务,因此您通常不必担心数据类型和垃圾回收之类的事情。这通常意味着您可以开始编码,而不会像 CJava 等复杂语言那样一开始就感到沮丧。

为了帮助您学习 Python,我们编写了一本电子书,展示了如何使用它创建平台视频游戏。逐步学习课程,在构建视频游戏的同时学习 Python。作为额外的益处,您还将学习编程逻辑、语法、运算符等。您可以在学习的同时看到立竿见影的效果,因此您学到的一切都会得到及时的巩固。

一分钟了解 Python

Python 是一种通用语言,这意味着它(像大多数语言一样)提供了使用数字和字母进行简单“技巧”的功能。Linux 用户已经安装了 Python。Mac 用户有一个旧版本的 Python,但您可以从 Python.org 网站安装最新版本。Windows 用户可以从这篇在 Windows 上安装 Python 文章中学习如何安装 Python。

安装完成后,您可以启动交互式 Python shell 并进行数学运算

$ python3
>>> 5+6
11
>>> 11/2
5.5
>>> 11//2
5
>>> 11%2
1

正如您从这个示例中看到的,有一些特殊的表示法是必需的,但对于任何熟悉数学的人来说,它都非常熟悉。也许您不是数字爱好者,更喜欢字母

$ python3
>>> string = "hello world"
>>> print(string)
hello world
>>> print(string.upper())
HELLO WORLD
>>> print(string[0])
h
>>> print(string[1])
e
>>> print(string[2])
l
>>> print(string[3])
l
>>> print(string[4])
o

同样,相对基本的任务也有特殊的表示法,但即使没有解释,您可能也已经检测到 [0][1] 表示法使您能够“切片”数据,而 print 在屏幕上显示数据。

五分钟了解 Pygame

如果您想仅使用 Python 创建视频游戏或超出基本计算器的任何内容,可能需要大量的学习、工作和时间。幸运的是,Python 已经存在了几十年,因此人们开发了代码库来帮助您以(相对)非常少的精力执行典型的编程壮举。Pygame 是一组旨在创建视频游戏的代码模块。它不是唯一的此类库,但它是最古老的(有好有坏),因此网上有很多文档和示例。

首先学习推荐的 Python 虚拟环境工作流程

$ python3 -m venv mycode/venv
$ cd mycode
$ source ./venv/bin/activate
(venv)$ 

进入虚拟环境后,您可以安全地将 Pygame 安装到您的项目文件夹中

(venv)$ echo "pygame" >> requirements.txt
(venv)$ python -m pip install -r requirements.txt
[...] Installing collected packages: pygame
Successfully installed pygame-x.y.z

现在您已经安装了 Pygame,您可以创建一个简单的演示应用程序。这比您想象的要容易。Python 可以进行所谓的面向对象编程 (OOP),这是一个花哨的计算机科学术语,用于描述代码的结构,就好像您正在使用代码创建物理对象一样。但是,程序员并没有妄想。他们知道他们在编码时并没有真正制造物理对象,但这可以帮助您以这种方式想象它,因为这样您就可以理解您编程世界的局限性。

例如,如果您被困在荒岛上并想要一个咖啡杯出现,您必须采集一些粘土,制作一个杯子并烘烤它。如果您非常聪明,您将首先创建一个模具,以便在您想要另一个杯子时,您可以从模板中快速创建一个新杯子。即使每个杯子都来自同一个模板,它们在物理上也是独立的:如果一个杯子坏了,您仍然有其他的。您可以通过添加颜色或蚀刻使每个咖啡杯看起来独一无二。

在 Pygame 中,以及在许多编程任务中,您使用类似的逻辑。在您定义它之前,事物不会出现在您的编程世界中。以下是如何在 Python 和 Pygame 程序中使咖啡杯出现的方法。

使用 Pygame 进行面向对象编程

创建一个名为 main.py 的新文件,并输入此代码以初始化 Pygame 模块并使用 Pygame 模板创建窗口

import pygame

pygame.init()

screen = pygame.display.set_mode((960,720))

正如您可能使用模板在现实生活中创建对象一样,您可以使用 Pygame 提供的模板来创建精灵(这是 Pygame 中视觉游戏对象的术语)。在面向对象编程中,表示对象的模板。将此代码键入您的文档

class Cup(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)

	# image
        img = pygame.image.load('coffeecup.png').convert()
        self.image = img

	# volume
        self.rect = self.image.get_rect()
        self.rect.x = 10
        self.rect.y = 10

此代码块使用 Pygame 的 sprite 模板来设计咖啡杯精灵。您的咖啡杯精灵具有图像,因为使用了 self.image,而 self.rect 为其提供了体积(宽度和高度)。这些是 Pygame 期望精灵拥有的属性,但如果您要创建可玩视频游戏,您可以为其赋予您想要的任何其他属性,例如生命值和分数。

到目前为止,您所做的只是创建一个窗口和咖啡杯的模板。您的游戏实际上还没有制作一个杯子。

代码的最后一部分必须使用您的模板来生成一个杯子并将其添加到您的游戏世界中。您可能知道,计算机速度非常快,因此从技术上讲,您到目前为止创建的代码只会运行一毫秒左右。在编写图形计算机应用程序时,您必须强制计算机保持打开状态,无论它是否认为已完成规定的任务。程序员使用无限循环来做到这一点,在 Python 中,无限循环由指令 while True 表示(True 始终为真,因此循环永远不会结束)。

无限循环确保您的应用程序保持打开状态足够长的时间,以便计算机用户看到和使用该应用程序

cup = Cup()

while True:
    pygame.display.update()
    screen.blit(cup.image, cup.rect)

此代码示例从您的模板 Cup 创建一个杯子,然后使用 Pygame 函数更新显示。最后,它使用 Pygame 的 blit 函数在其边界框内绘制杯子的图像。

获取图形

在您可以成功运行代码之前,您需要咖啡杯的图形。您可以在 FreeSVG.org 上找到许多 知识共享 咖啡杯图形。我使用了这个。将图形保存在您的项目目录中,并将其命名为 coffeecup.png

运行游戏

启动您的应用程序

(venv)$ python ./main.py

下载 Python 游戏电子书

Pygame 是一个功能强大的框架,您可以使用它做很多事情,而不仅仅是在屏幕上绘制咖啡杯。下载我们的免费电子书,以更好地了解 Pygame 以及 Python 本身。

接下来阅读什么

向您的 Python 游戏添加计分

在本系列关于使用 Python 的 Pygame 模块进行编程的第十一篇也是最后一篇文章中,当您的游戏玩家收集战利品或受到伤害时,显示他们的分数。

向您的 Python 游戏添加声音

通过向您的游戏添加声音,聆听您的英雄战斗、跳跃、收集战利品等时发生的事情。在本系列关于创建平台游戏的第 13 篇文章中学习如何添加声音……

(团队,红帽)
2020 年 9 月 28 日
标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,而且经常同时工作。

贡献者

2 条评论

感谢您以电子书格式提供所有文章 Les。它节省了在 opensource.com 网站上搜索和查找相应文章的大量时间。这些文章极大地帮助我使用 pygame 创建了我的第一个游戏。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.