为什么 Python 和 Pygame 是初学程序员的绝佳组合

我们来看看 Pygame 成为学习编程的良好选择的三个原因。
964 位读者喜欢这个。
3 cool machine learning projects using TensorFlow and the Raspberry Pi

Opensource.com

上个月,Scott Nesbitt 写了一篇关于 Mozilla 奖励 50 万美元以支持开源项目 的文章。HTML/JavaScript 游戏平台 Phaser 获得了 50,000 美元奖励。我教我十几岁的女儿 Phaser 已经一年了,它是学习的最佳和最简单的 HTML 游戏开发平台之一。Pygame,然而,对于初学者来说可能是更好的选择。原因如下。

1. 一长串代码块

Pygame 基于 Python,最流行的入门计算机课程语言。Python 非常适合用一长串代码块写出想法。孩子们从单个文件和单个代码块开始。在他们接触到函数或类之前,他们从很快就会像意大利面条一样的代码开始。这就像手指画,他们将想法扔到页面上。

这种学习方法有效。随着代码变得越来越难以管理,孩子们自然会开始将事物分解为函数和类。通过在学习函数之前学习像 Python 这样的语言的语法,学生将在使用全局和局部作用域之前获得基本的编程知识。

大多数 HTML 游戏将结构、样式和编程逻辑在某种程度上分离到 HTML、CSS 和 JavaScript 中,并且需要 CSS 和 HTML 知识。虽然从长远来看,分离更好,但这可能是初学者的障碍。一旦孩子们意识到他们可以使用 HTML 和 CSS 快速构建网页,他们可能会被颜色、字体和图形的视觉兴奋所分散注意力。即使那些专注于 JavaScript 编码的人仍然需要学习 JavaScript 代码所在的文档基本结构。

2. 全局变量更明显

Python 和 JavaScript 都使用动态类型变量,这意味着变量在赋值时会变成字符串、整数或浮点数;但是,在 JavaScript 中更容易犯错。与类型变量类似,JavaScript 和 Python 都具有全局和局部变量作用域。在 Python 中,函数内部的全局变量用 global 关键字标识。

让我们看看 Alvin Ourrad 和 Richard Davey 编写的基本 制作你的第一个 Phaser 游戏教程,以了解使用 Phaser 教初学者编程的挑战。在 JavaScript 中,全局变量(可以在程序中的任何位置访问的变量)很难跟踪,并且通常是难以解决的错误的来源。Richard 和 Alvin 是专业的程序员,他们有意使用全局变量来保持简洁。


var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });

function preload() {

    game.load.image('sky', 'assets/sky.png');

}

var player;
var platforms;

function create() {
    game.physics.startSystem(Phaser.Physics.ARCADE);
…

在他们的 Phaser 编程书 Interphase, 中,Richard Davey 和 Ilija Melentijevic 解释说,全局变量通常在许多 Phaser 项目中使用,因为它们使快速完成工作变得更容易。

“如果你曾经从事过任何规模相当大的游戏,那么这种方法可能已经让你感到有点畏缩了……那么我们为什么要这样做呢?原因很简单,因为这是演示 Phaser 可以做什么的最简洁和最不复杂的方法。”

虽然可以将 Phaser 应用程序构建为使用局部变量并将事物很好地划分为关注点分离是可能的,但这对于刚开始学习编程的孩子来说很难理解。

如果您决心教您的孩子使用 JavaScript 编码,或者如果他们已经知道如何使用另一种语言(如 Python)进行编码,那么一个好的 Phaser 课程是 完整的移动游戏开发课程,作者是 Pablo Farias Navarro。虽然标题侧重于手机游戏,但实际课程侧重于 JavaScript 和 Phaser。JavaScript 和 Phaser 应用程序通过 PhoneGap 移动到手机。

3. Pygame 需要的组装更少

感谢 Python Wheels,Pygame 现在非常 易于安装。您还可以使用 yum 包管理器在 Fedora/Red Hat 上安装它

sudo yum install python3-pygame

有关更多信息,请参阅官方 Pygame 安装文档

虽然 Phaser 本身更容易安装,但使用它需要更多知识。如前所述,学生将需要在包含一些 CSS 的 HTML 文档中组装他们的 JavaScript 代码。除了 HTML、CSS 和 JavaScript 这三种语言之外,Phaser 还需要使用 Firefox 或 Chrome 开发工具和编辑器。JavaScript 最常用的编辑器是 Sublime、Atom、VS Code(可能是按此顺序)。

由于 同源策略,如果您直接在浏览器中打开 HTML 文件,Phaser 应用程序将无法运行。您必须运行 Web 服务器并通过连接到 Web 服务器来访问文件。幸运的是,您不需要在本地计算机上运行 Apache;对于大多数项目,您可以运行像 httpster 这样的轻量级工具。

Phaser 和 JavaScript 的优势

考虑到 JavaScript 和 Phaser 的所有挑战,我为什么要教它们呢?老实说,我犹豫了很久。我担心学生学习变量提升和作用域。我开发了自己的基于 Pygame 和 Python 的课程,然后我开发了一个基于 Phaser 的课程。最终,我决定使用 Pablo 的预制课程作为起点。 

我转向 JavaScript 实际上有两个原因。首先,JavaScript 已经成为一种在严肃应用程序中使用的严肃语言。除了 Web 应用程序之外,它还用于移动和服务器应用程序。JavaScript 无处不在,并且广泛用于孩子们每天看到的应用程序中。如果他们的朋友用 JavaScript 编码,他们也很可能想这样做。当我看到 JavaScript 背后的势头时,我研究了可以编译成 JavaScript 的替代方案,主要是 Dart 和 TypeScript。我不介意额外的转换步骤,但我仍然关注 JavaScript。

最后,我选择使用 Phaser 和 JavaScript,因为我意识到这些问题可以通过 JavaScript 和一些工作来解决。高质量的调试工具和一些非常聪明的人的工作使 JavaScript 成为一种既易于访问又对教孩子们编码有用的语言。

最后的话:Python 与 JavaScript

当人们问我应该让他们的孩子从哪种语言开始时,我立即建议 Python 和 Pygame。有很多很棒的课程选择,其中许多是免费的。我与我的儿子一起使用了 Al Sweigart 的 《用 Python 和 Pygame 制作游戏》。我还使用了 Allen B. Downey 的 Think Python:像计算机科学家一样思考。您可以通过 RAPT Pygame(由 Tom Rothamel 编写)在您的 Android 手机上获得 Pygame。

尽管我提出了建议,但我总是怀疑孩子们很快就会转向 JavaScript。这没关系——JavaScript 是一种成熟的语言,具有出色的工具。他们会喜欢 JavaScript 并学到很多东西。但是,在多年帮助我女儿的哥哥用 Python 创建酷炫游戏之后,我将始终对 Python 和 Pygame 抱有情感依恋。

标签
User profile image.
东京 Linux 用户组首任主席和联合创始人。O'Reilly Japan 出版的《Linux Japanese Environment》一书的合著者。亚洲首家 ISP 成立的核心团队成员。主要 Linux 公司产品管理和产品营销前副总裁。硅谷 Oppkey 开发者关系咨询公司合伙人。

4 条评论

很棒的文章

感谢这篇文章!我不知道这些教学工具,它们看起来会派上用场!

(顺便说一句,你女儿的哥哥是你的儿子。)

感谢这篇精彩的文章

一个临近项目的灯塔。
非常感谢

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.