谈谈“编程游戏”

来源:互联网 发布:mac怎么卸载双系统 编辑:程序博客网 时间:2024/05/22 06:49

编程游戏(不是游戏编程,也不是编游戏……),也叫代码游戏,代表着市面上一类特别的游戏。它在游戏中加入了编程的特性(或许反过来说也对)。本文意在梳理市面上的一些编程游戏,并对其玩法进行介绍和评价。

选择标准

  • 项目必须是在时间上是较新的,或者有一定的知名度。不包括年代久远且不活跃的、知名度过低的。
  • 是电子游戏而不是实体游戏(如桌游)。
  • 能在线游戏,或者可以获得可运行的程序。

经过这样一个简单的筛选,我得到了一个长长的项目列表。这里面有知名度较高的CodeCombat和腾讯的Code Tank,也有比较新的创业公司的游戏如Glitchspace和Hakitzu。
以下是本文中涉及到的游戏列表:

  • Github的热门项目 CodeCombat
  • 代码坦克 Code Tank
  • 第一人称编程解谜游戏 Glitchspace
  • 机器人格斗 Hakitzu
  • 代码龟 Algoid
  • 用Java学习魔法 CodeSpells
  • 微软的在线编程游戏 Code Hunt
  • 机器人大战 Robocode
  • 解谜闯关游戏 Python Challenge
  • 自动机编程 Manufactoria

首先我按照游戏的不同特征进行了分类。

玩法

游戏的玩法大致是通过编程控制游戏中的人物或道具,本文选择的大部分的游戏都属于此类。不过也有一类具有特殊的玩法,通常也被认为是编程游戏,本文称之为谜题游戏。
前者中,游戏的主角通常是魔法师、机器人、坦克等。后者的代表有Python Challenge、Code Hunt和Manufactoria。

编程语言

游戏中的编程语言一般是已有的语言,或者是游戏自创的某种语言,或者没有直接使用编程语言。

  • CodeCombat支持语言最多。从最初只支持JavaScript到现在的JavaScript、Python、CoffeeScript、Clojure、Lua、IO。
  • Code Tank和Hakitzu使用JavaScript。
  • CodeSpells、Code Hunt和Robocode使用Java。此外,Code Hunt还支持微软自家的C#。
  • Algoid使用自己的类Logo语言。
  • 其他的游戏中没有直接使用编程语言。

游戏目标

游戏的目标通常有:

  • 通过游戏使玩家学习某种语言。如Hakitzu和Code Hunt。
  • 帮助孩子或初学者了解编程。如CodeCombat、Algoid和CodeSpells。
  • 为熟悉编程的人提供编程对战的平台。如Code Tank和Robocode。
  • 不知道要干什么(益智)。如Manufactoria。

有了以上的了解,下面对几个典型的游戏进行简单介绍。

CodeCombat

CodeCombat是一个通过玩游戏来学习编程的网站,也是GitHub上最大的开源CoffeeScript项目,有上千程序员和玩家为其编写程序、测试游戏。到目前为止,已经翻译成17种国外语言。官方称,他们网站的任务就是教会人们如何编程,游戏覆盖编程菜鸟到大神各个阶段,总共超过9千关。人们不需要任何编程知识即可了解程序的运行逻辑,并编出实用的代码。(以下两张图片来自驱动之家)

在游戏中,通过代码实现角色的移动、对话、攻击、拾取和使用道具。在一开始的关卡中,玩家只要输入顺序执行的指令即可完成任务。随着游戏的进行,玩家要完成的任务也更加复杂,玩家需要学习使用判断、循环等语句,在这个过程中玩家不知不觉中就了解了编程。

想要深入了解可以看这篇评测。
和王国守卫战类似的画风再加上游戏有趣的剧情设定和众包得到的丰富关卡,说他是当下编程游戏的佼佼者应该没有什么异议吧。

Code Tank

Code Tank是由腾讯AlloyTeam开发的一款编程游戏。据说灵感来自上面提到的Robocode。引用一段自家的介绍:

CodeTank是一个非常有趣的竞赛性编程游戏平台,通过几行简单的Javascript代码和CodeTank API,每个人都可以方便的构建属于自己富有智能和个性的坦克(Tank)机器人,并通过互联网进行在线互动和竞赛!CodeTank是 Code Game(代码游戏,也叫编程游戏)的一种,可以让你在娱乐的同时学习和提高Javascript编程水平以及进行人工智能的研究。它使用HTML5、CSS3等Web新技术构建的在线平台,天然的基于互联网,Tank机器人的代码不需要人工上传下载,可以直接在线运行与其他选手进行战斗。

这个游戏和上一个不同,并不是给初学者学习用的。我没有太多JavaScript编程经验,进入到游戏中不知道该干什么。进入游戏后首先要创建自己的坦克,之后就是编写自己的代码,实现AI控制坦克运动。最终目的是打败其他玩家的坦克,和那些机器人比赛差不多。

CodeSpells

这是我本人比较喜欢的一款编程游戏,尽管它本身并不火,而且需要下载Java客户端。下面这段话是它唯一的一段中文介绍:

这款游戏是由计算机学家 William Griswold 带领的大四学生团队开发的,游戏的主要受众为高中生。研发团队希望由此来开发学生们的创新力和想象力,让他们主动地去学习知识。该作是一款第一人称游戏。玩家将扮演一名和矮人们生活在荒岛上的魔法师。因为矮人们失去了使用魔法的能力,所以作为魔法师的玩家将帮助矮人们完成魔法。这些咒语是以 Java 语言的形式呈现在玩家面前。玩家需要通过编写这些语句来完成魔法。在帮助矮人们的同时,玩家还能通过一些解密游戏来获得相应的成就,当然,同样是通过 Java 语言的编写。

通过这段视频可以看到,该游戏所表现的内容较好地体现了面向对象的编程思想,玩家通过代码可以支配游戏中的物品,进而改造游戏中的世界。

其他

剩下的那几个我就简单来个一句话介绍吧。

  • Algoid:使用给定的语言和API控制小乌龟运动来画画。可以画很复杂的画哦。不过画了几个没什么动力就不玩了……
  • Code Hunt:学习C#和Java不错,确实是从头一点点学习。但感觉只是披着游戏的外衣的编程题目。Python Challenge和Manufactoria这俩也一样。
  • Python Challenge:每一关卡一个解谜题目。其实和Python没什么关系,什么语言都可以;感觉和编程关系也不大……
  • Manufactoria:自动机编程。Matrix67在他博客上推荐的。
  • Glitchspace和Hakitzu:没有相应的设备,所以没玩。
  • Robocode:和Code Tank一样。要下载Java代码到本地,或许还要Eclipse……

小结

本人认为真正好的教育类编程游戏应体现编程思想,而不应局限于某种编程语言或技巧。我所设想的编程游戏应当体现一个开放式的世界,玩家可以对其中的对象编程,玩家可以编程创造或改造物品。这里的编程不一定要通过代码,如果能通过可视化的方式,玩家或许能更容易理解。或许以后有空我会尝试一下。