通过创建视频游戏学习 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 游戏添加声音

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

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

贡献者

2 条评论

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

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