学习编程的过程可能是一个噩梦。热情满满的编程员费尽千辛万苦,克服了那么多令人讨厌的框架和百思不得其解的错误信息,终于,出成果了——屏幕上跳出”Hello, World!”这个字眼。然后,他疑惑了:“好吧,接下来怎么样?我到底要怎么办才能做出点像样的东西来啊?”
当游戏开发者看到有人在编程游戏上痛苦挣扎时,通常会发现“这整个东西就是拙劣游戏所走的路线:一堆徒劳无功的努力,不明所以的失败案例,强加给新玩家的高级功能”等等。如果我们能够单纯地运用一些简单的游戏设计原则,学习编程将会更有趣而更有效得多。
那么,理想的编程游戏应该是怎么样的呢?
编程游戏
以编程教学为主题的游戏概念并不算什么新创意。当下已有不少受欢迎的编程游戏,如《RoboRally》、《Robozzle》、《Robot Odyssey》和《Light-Bot》等。但这些游戏着重表现的是编程的抽象概念,而不是传授真实的编程方法。这种情况类似于FPS游戏可让人们捕捉到一些射击的快感,但却无从掌握真正的射击本领。
所以,我们怎样才能利用游戏教授真正意义上的编程方法?
编程游戏的关键特征
以下是一些关键的、游戏化的原则,可以让编程学习更加有趣。我已经根据这些原则制作了一个可玩的网页游戏《CodeHero》。(游戏邦注:此游戏仍在测试,需要用到Flash Player和Actionscript 3.0.)
0.选择一种真正的语言。许多编程游戏使用的是游戏性语言、游戏性界面、游戏性环境。虽然这种设计很适合小孩子,但成年的玩家很快就会注意到这种语言的局限性,同时认为这门技术只适合游戏环境。显然,真实编程语言的缺失使得从编程游戏到现实的编程之间产生了难以逾越的障碍。
解决办法就是,使用专业的编程语言。保证语言的功能特征的完整,使玩家在掌握即学即用的语言的同时,还有充分的进步空间。技巧就是把语言简单地分成几个易吸收的小块。
1.容易入门。与所有游戏一样,编程游戏的上手门槛要低。一般来说,学习编程的***步是安装并启动集成环境,但这并不是一个有趣的开端。为了消除这道障碍,代码与主游戏UI必须同步显示,玩家编写好代码后,可以直接在UI上运行代码并从UI上收到错误信息。
为了使用户简单快速地上手,还需要隐藏某些高级概念。比如,命名空间和主功能切入点,虽然这对于完整的程序运行是必要的,但对于初学者来说,这些内容太空洞了,而且需要事先弄懂非常多的高级概念。大多数传统的编程教学技术只会告诉学生把需要的代码敲进去,但基本上无视这些代码。好游戏不会让玩家去做一些他们摸不着头脑的事!
让编程容易呈现于游戏界面。仔细思考让游戏为玩家编写好切入点和错误处理程序,或是简单地隐藏这些概念。
2.明确的反馈结果。编程新手写的代码应该通过动画和声音让其清楚地看到效果。
大多数代码的运行是可视的。但是,“int a = 4 + 3;”这串代码的运行,用户是看不到效果的。好游戏的动作输出总是很明显——编程游戏也应该如此。理想情况是,上述代码语句能够在特殊的编译器中运行,而这个编译器必须能够重写“+”运算符,如,一个显示4+3的图表,然后结果7存在一个称为“a”的变量中。当然,不可能每一种语言都这样,所以也许可以让用户编写一个显示输出的函数,如储存(“a”, add (4, 3))——可能是一个有效的解决办法。无论怎样,编程游戏应该有一个明确的、可检测的输出结果。
3.失败帮助。刚入门的代码写手可能会因为各种各样的原因而失败:语法错误、异常、无限循环和逻辑错误等。理想的情况是,游戏应该检测到最普遍的编写错误并提供修改指导。
4.清楚可达的目标。开始编程最困难的一部分是决定编写内容。编写内容取决于编程员的技术水平。不幸的是,大多数新代码写手并不知道自己能写什么,不能写什么(大家都知道有不少新手程序员妄想从零起点写出一款FPS)。编程游戏应该追踪用户已经掌握的技术,然后选择用户可以达到的目标。例如,如果编程游戏已经教会用户如何循环,那就可以在数组部分中涉及循环。事实上,在教授新知识的同时,迫使玩家使用之前学会的内容可以强化旧概念的记忆,即温故知新。
总之,游戏应该呈现用户已知的知识能解决的问题。
其他例子
还有其他一些程序运用了类似的技术。例如,Code School是一个商业教学网站,它通过代码界面互动地教授如“Ruby on Rails”这样的课题。(注:但因为要付费,所以作者没试过。)
结论
设计并制作一款好的编程学习游戏应该很贴近广大开发者的需求。毕竟,没有程序员,就没有这么多游戏。除了对游戏产业的实际效用,当运用于现实世界时,这种设计训练还展现出游戏设计的价值所在。虽然这类游戏存在于封闭的空间,但在现实的背景之下,其传达的知识是无价的。
原文:http://gamerboom.com/archives/37399
【编辑推荐】