对于许多人来说,编程很有趣,因为它有点像解谜。您知道,从理论上讲,如果您可以按正确的顺序排列逻辑语句和条件,并使用正确的语法,那么您最终将得到一个可以执行某些有用操作的应用程序。奇怪的是,问题有时在于您不知道为什么需要最终得到的应用程序。这就像出门散步却无处可去。正如马拉松为漫无目的的步行提供了框架和目标一样,也有一些为程序员举办的无目的活动。这些编程活动被称为冲刺、黑客马拉松、挑战赛或创作营,是坐下来(可能与您的编码伙伴团队一起)开发一些有趣的东西的绝佳借口。

(Open Jam,CC BY-SA 4.0)
Open Jam 是一年一度、为期周末的虚拟游戏创作营,参与者可以在 80 小时的活动时间内完成尽可能多的开源游戏。我第一次接触 Open Jam 是在 All Things Open 2018 年大会上,创作营的组织者在那里放置了一台街机,运行着前一年的作品。

(Opensource.com,CC BY-SA 4.0)
我之前玩过其他创作营的小游戏,并且一直认为加入其中一个创作营会很有趣。但是,我对为非开源项目或在非开源堆栈上开发的项目做贡献不感兴趣。因此,开源创作营的想法对我来说足够有说服力,让我下定决心参与。
今年,我为 Open Jam 完成了一个游戏,这次体验很棒——而且与我预期的完全不同。如果您受到游戏创作营带来的名声和财富的诱惑,请通读我从参加 Open Jam 中学到的五个教训,以避免一些陷阱。
1. 保持简单
2019 年,我报名参加了 Open Jam,目的是用 Lua 编程一个简单的游戏。我对游戏有一些好想法,而且我认为参与看起来很简单,所以我安排了一个周末来编码。但这个游戏从未完成。
事实证明,有简单的想法,还有真正简单的想法。对于周末游戏创作营,您必须让简单性渗透到游戏的方方面面。
您想要在游戏中加入故事吗?它必须是一个两拍子的故事。跳过第二幕,直接从第一幕(提出问题)到第三幕(问题解决,游戏结束)。
您需要游戏的图形。保持图形简单。即使您找到一位四处游荡的艺术家(他们确实存在,并且他们会聚集在 Open Jam 的聊天服务器中寻找要加入的项目),他们的时间也和您一样有限。游戏中的图形会快速成倍增加——当您使用动画时更是如此。
如果您想要音效和音乐,请保持简单。您可能会找到作曲家,但一个周末没有足够的时间进行作曲、演奏和交付。您可能必须选择可能不太适合您的游戏的现有音乐,或者使用可以快速交付的简单曲调。循环可能是理想的选择,让您的作曲家处理音效可以确保音乐和效果很好地融合在一起。
对于我今年的游戏,我摒弃了简单性,采用了极端简约主义。我是一个人的团队(我后来才意识到,这不一定符合协作游戏创作营的精神),所以我选择了没有彩色方块之外的图形,并且主要使用单音音乐片段(在 LMMS 上创作)——而且大部分音乐都是由用户在游戏过程中作为效果创作的。
2. 从头开始
当我开始编写游戏时,我从游戏板开始,并在很大程度上研究了机制,试图发现我是否真的有一个游戏。有几个小时,我完全不相信我仅仅是在编写一个数字 Etch-A-Sketch,而看不到任何游戏元素。我最终在编写的代码中找到了一个游戏,但是当我完成初稿时,我发现我有一个游戏,每次您想再次玩时都需要重新启动。我没有开始屏幕、没有结束屏幕、没有排行榜,也没有选择再次玩的方式。
解决这些问题需要进行一些重构,即使在目前的状态下,代码也没有尽可能地优化。在我的实用代码中,我通常不介意为了记录我自己和其他想要理解它的人的逻辑而使用比必要更冗长的代码。但是,这只是一个轻松的游戏,所以我认为最好是拥有组织良好的优化代码,而不是与重要类和匆忙添加的全局变量混合在一起的事后诸葛亮函数。
其中一些可以用我的代码是在疯狂的游戏创作营期间编写的来解释,但在未来,我更愿意从头开始,即使只是样板模板。我将从一个开始屏幕开始,玩家可以在其中设置难度级别,我将确保有一个结束屏幕,其中可以选择退出或再次玩,等等。
3. 专注于一种游戏机制
我不是游戏设计师,但这并不能阻止我尝试成为游戏设计师。在拥有大量关卡的最棒的大型视频游戏中,体验的一部分是发现新的游戏机制。想象一下一个游戏,您一开始通过微妙的提示发现您可以停止时间。接下来,您获得的能力不仅可以停止时间,还可以将时间倒退几秒钟。稍后,您将获得快进时间的能力。等等。
听起来很有趣,并且像您永远不应该在游戏创作营中尝试制作的东西。
在我游戏的原始版本中,我开始编写计算机对玩家采取的自动操作,试图扰乱游戏板。这让我走上了一条复杂计算、状态检测、回合预测和概率的道路。我花了几个小时试图找到一种良好的平衡,既能提供良好的刺激,又不会让人感到厌烦,并且还在努力模仿智能决策。
最终,我从我作为 Dungeon Master™ 的经验中学到了一两课:玩家最可怕的对手是玩家自己。我放弃了扰乱游戏状态的想法,而是让玩家有思考过度的空间。
从设计角度和代码角度来看,这都是正确的选择。毕竟,您的游戏中拥有的机制越多,您需要编写的代码就越多。您需要编写的代码越多,您需要调试的代码就越多。
4. 仔细选择您的语言
我今年之所以选择 Python 和 Pygame 用于我的项目,与其说是我选择了 Python 和 Pygame,不如说是 Python 和 Pygame 选择了我。我刚刚向某人演示了如何使用嵌套循环创建一个网格(一个简单的二维数组),而他们使用的语言恰好是 Python。我使用了 Pygame 而不是更现代的东西,例如 Arcade,因为我熟悉 Pygame。在我演示完任务后,我意识到现在是 Open Jam 周末,并且通过“仅仅几行”额外的代码,我可以从我创建的数组中创建一个游戏。毫不奇怪,这几行额外的代码最终变成了 200 行左右。
Python 很棒,因为它具有跨平台性,但是如果您没有提前计划(而且我没有提前计划),那么将 Python 应用程序交付到其所有可能的平台可能本身就是另一场创作营。您绝对可以将 Python 交付到桌面操作系统、Android、iOS 等,但是为了获得最佳效果,您必须通过使用 Kivy 或 BeeWare 或类似的框架来牢记这一点进行开发。这些不是您运行代码以神奇地立即获得所有平台的软件包的处理器;这些是您必须从头到尾使用的框架。由于我没有考虑到我的目标进行计划,因此我在 Open Jam 结束时完成了一个在 Linux、Windows 和 macOS 上运行良好,但仍然需要打包并且根本无法在移动平台上运行的游戏。
如果我要带着改进的远见重复游戏创作营,我会使用 Java 或 Processing,这两者都具有适用于桌面和移动设备的简单打包解决方案。
最终,请牢记您的目标,并朝着您期望的结果努力。不要整个周末都在编程,结果却发现最终交付需要再一个周末。
5. 使用您所知道的
消除完成的障碍是确保您完成游戏的最佳方法之一。虽然 Pygame 在某些方面可能不是最佳选择,但考虑到结果,它是最佳选择。正如我去年向自己证明的那样,很容易不完成游戏创作营,因此通过使用我过去几年教给儿童和成人的框架来确保我有充分的机会完成,这是一个很好的策略。
这也扩展到其他方面。游戏创作营可能不是尝试任何不熟悉的东西的最佳时机。不要尝试在您几乎从未接触过的应用程序上作曲。不要使用您在互联网上读到但只打开过一次的酷炫新应用程序来设计您的图形。在两天内完成游戏已经够难的了,所以您希望在开发过程中使用的所有东西都有助于最终目标。
下次计划
我是一个人的团队,所以我没有利用(或贡献)Open Jam 的社交方面,但它仍然是一次令人满意和有趣的体验。当很多人为了一个统一的目标聚集在一起时,会产生很大的动力,而 Open Jam 对开源游戏的推广很容易让开源和游戏玩家都感到兴奋。如果您曾经想过加入游戏创作营,我强烈建议您报名参加明年的 Open Jam!
评论已关闭。