博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么Python和Pygame是入门程序员的最佳选择
阅读量:2530 次
发布时间:2019-05-11

本文共 3047 字,大约阅读时间需要 10 分钟。

上个月, ( 发表了有关 。 HTML / JavaScript游戏平台Phaser 。 我已经为我的未成年女儿教过Phaser一年了,它是学习的最好,最简单HTML游戏开发平台之一。 但是, 对于初学者可能是一个更好的选择。 这就是为什么。

1.一长段代码

Pygame基于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向初学者教授编程的挑战。 在JavaScript中,全局变量(可以在程序中的任何位置访问的变量)很难跟踪,并且经常是难以解决的bug的来源。 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编程书 Richard Davey和Ilija Melentijevic解释说,全局变量通常在许多Phaser项目中使用,因为它们使快速完成工作变得容易。

“如果您曾经从事过任何大型游戏,那么这种方法可能已经使您有些畏缩了。那么,为什么我们要这么做呢? 原因仅仅是因为这是展示Phaser可以做什么的最简洁,最简单的方法。”

尽管可以构造一个Phaser应用程序以使用局部变量并将其很好地拆分为关注点分离,但这对于孩子们在初次学习编程时很难理解。

如果您打算教孩子使用JavaScript进行编码,或者他们已经知道如何使用Python等其他语言进行编码,那么最好的Phaser课程是编写的 。 尽管标题侧重于手机游戏,但实际课程侧重于JavaScript和Phaser。 JavaScript和Phaser应用程序已通过移至手机。

3. Pygame需要更少的组装

感谢 ,Pygame现在非常 。 您也可以使用yum软件包管理器将其安装在Fedora / Red Hat上:

sudo yum install python3-pygame

有关更多信息,请参见官方 。

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

如果您出于而直接在浏览器中打开HTML文件,则Phaser应用程序将无法运行。 您必须运行Web服务器并通过连接到Web服务器来访问文件。 幸运的是,您无需在本地计算机上运行Apache。 您可以为大多数项目运行诸如轻量级产品。

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的 。 我还使用了Allen B. Downey撰写的 。 您可以使用 Pygame在Android手机上 。

尽管有我的建议,但我始终怀疑孩子很快就会转向JavaScript。 没关系-JavaScript是一种成熟的语言,具有出色的工具。 他们将使用JavaScript玩乐并学到很多东西。 但是,在多年帮助我女儿的哥哥使用Python创建出色的游戏之后,我将始终对Python和Pygame充满感情。

翻译自:

转载地址:http://irbzd.baihongyu.com/

你可能感兴趣的文章
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_8_Stream流中的常用方法_skip...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_3_Stream流中的常用方法_filter...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_10_练习:集合元素处理(传统方式)...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_9_Stream流中的常用方法_concat...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_11_练习:集合元素处理(Stream方式)...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_1_方法引用基本介绍...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_2_方法引用_通过对象名引用成员方法...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_5_方法引用_通过this引用本类的成员...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_7方法引用_数组的构造器引用...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_3_方法引用_通过类名引用静态成员...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第1节 基础加强_3_Junit_使用步骤...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_6_方法引用_类的构造器(构造方法)引用...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第2节 反射_5_反射_概述
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第1节 基础加强_2_Junit_测试概述...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第2节 反射_7_反射_Class对象功能概述...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第1节 基础加强_4_Junit_@Before&@After...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第2节 反射_9_反射_Class对象功能_获取Constructor...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第2节 反射_6_反射_获取字节码Class对象的三种方式...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第2节 反射_11_反射_案例
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第2节 反射_8_反射_Class对象功能_获取Field...
查看>>