这款游戏的名称是《Math Ninja》,是首款iPhone教育游戏,旨在将加减乘除运算变得更有趣。
在这个过程中,我学到很多关于游戏开发的经验,我觉得你应该会对此感兴趣。
1. 进行重写不要紧
我首次编写《Math Ninja》时,游戏的代码非常糟糕。应该说是糟糕透了。我是Cocos2D新手,所以犯了很多新手错误,边编写代码边设计游戏,所以游戏的结构非常丑陋,瑕疵无处不在。
所以我在项目中间遭遇瓶颈——我是否应该就此将游戏包装起来,假设终端用户不会发现其所存在的瑕疵?或者我应该重新编写代码,沿途进行完善?现在我知道自己应该怎么做会更好。
关于这一话题的争论很多,我最终决定重新进行——主要出于自我满足和进行学习的目的。重写代码所耗费的时间是首次编写《Math Ninja》时间总量的一半,确实是非常费时间。最终是否值得?
在此显然非常值得,主要表现在如下原因:
* 总体来说,游戏搭载于一个更稳固的根基,方便我添加新功能。
* 在重写代码的过程中,我重组关卡设计的逻辑,将其放入一个简单的配置文件中,这促使游戏设计变得更加简单。
* 在重写过程中,我将更多心思投入于如何存储和保存游戏状态,这简化加载和保存过程。在重写过程中,我对游戏的运作投以更多关注,这令应用变得更具反应性。
* 也许最重要的是,我个人更满意这些结果,且因此感到自豪(而不是觉得愧疚)。
我觉得这里的主要经验是,当你学习新数据库或新软件建构方式时,你通常会在第一次尝试中犯下许多错误。你可以沿途进行代码重构,但对于游戏,你需要持续进行调整,直到发现真正的趣味点。
所以我们很难维持重整步伐,且同时又学习新数据库。所以重写代码让我能够在“建模”阶段加快开发速度,条件是在随后投入更多的开发时间。
我觉得将来在更适合快速开发的语言中创建模型,然后落实所有游戏设计元素效果会更好,接着在游戏设计看起来颇为稳固/有趣时,转投Cocos2D-iPhone。
2. 尽量简化游戏设计
我第一次编写《Math Ninja》时,游戏设计基本上是硬性植入游戏中。改变怪兽的健康值需要改变怪兽类的构造函数数值。调整关卡新生的怪兽需要在函数中编写若干代码。再来就是武器和故事元素等。
调整这些设置并不难,但文件/代码的反复切换让我出于懒惰不再想要改变任何游戏设计元素。
这很糟糕。为方便自由调整游戏设计元素(游戏邦注:例如怪兽统计数值和关卡衍生数目),这些编辑操作需要尽量保持简单。
在重写代码的过程中,我将所有怪兽、关卡和故事的定义抽出,放入一个容易调节的XML文件中。我开始给XML文件创建WPF编辑器,但我随后发现手动编辑XML要比通过任何编辑器简单和快速得多,因此我只能继续处理XML文件。
最重要的是,我做出的所有改变令游戏设计元素变得易于调节。下面是原因所在:
* 由于改变游戏设计元素非常简单,我可以随意做出任何调整,将游戏变得更有趣/更平衡。
* 测试工作变得更简单。我可以轻松创建关卡,衍生我所制作的特定怪兽或组合内容。
* 游戏设计元素和编程元素存在明显的差异。这令我能够针对各项任务树立正确“心态”——这让我觉得非常特别。
3. 但游戏设计依然非常艰难
另一我从中学到的经验是,无论你将游戏设计变得多么简单,要找到优秀的设计依然非常困难,是项非常耗时的工作。
我自己都不记得给游戏各类武器的影响、破坏性和升级路线做出过多少次调整,或是通过不同的武器选择体验不同难度系数的关卡多少次。
起初我因为在游戏设计中投入这些时间而感到愧疚。对我这样的程序员来说,在本该进行编码工作时腾给游戏设计如此多时间就好像是在“玩耍”或“混时间”。
但我随后意识到,从逻辑上讲,顺利完成游戏设计至关重要(游戏邦注:这是决定游戏是否有趣的关键点),所以这完全值得我们投入时间。
我发现我要学习的游戏设计知识还有很多。我觉得有经验的游戏设计师会运用比我更多的数学和电子表格技巧,会计算平均DPS,每时间帧的最大伤害值等,算出武器/升级道具的正确伤害值。
作为新手,我知道的唯一方式就是反复进行尝试,直到呈现优质内容。这个方式非常可行——但需要耗费更多的时间和精力。
4. 是的,你需要测试者!
在接近游戏包装尾声时,我妻子和我对于最终成果非常满意,致使我们开始说出诸如此类的话:“我们不需要测试者,我们的游戏非常杰出,怎么可能会有不妥的地方?”
我们是井底之蛙。
幸运的是,我们开始寻求好友和家人的帮助,这些对象处于不同年龄层及技术水平,让他们对游戏进行试验。他们从中发现漏洞,因此如果直接将游戏发行,我们将陷入尴尬的境地。
不仅如此,他们还向我们提供很多很棒的构思。
所以所获经验是——无论你觉得自己的应用/游戏多么优秀,务必寻找若干测试者。你定不会为此后悔!
5. 最后10%最困难
回到我开始制作这款游戏之前,我记得有位朋友告诉我,在他的游戏项目中,最后10%最困难。
他对此说法完全正确!
我觉得要估算制作《Math Ninja》所需的时间总量很难。我觉得自己很善于估算制作应用所需要的时间,但在游戏领域,这截然不同。
我觉得其中的困难之处在于游戏永远没有真正完工的一天。你总是可以多植入一个功能,多引入一个关卡,多制造一个视觉效果,进而将内容变得更优秀。
所以你要怎么知道自己需要投入多少时间完成游戏的制作?在我看来,这是个开放式问题。坦白讲我对此没有答案,所以我只是持续进行制作,直到自己对此表示满意,虽然我能够添加的潜在功能不胜枚举。
但快要提交作品的这个阶段是最艰难的时候。很多次我都告诉自己作品“差不多完成了”,但最后发现自己1个礼拜后依然投身于此。
更不要说项目出现拖延的情况,越是希望项目“恰好完工”,在项目制作过程中就会越是感到疲惫。但游戏尚未准备就绪,需要进行更多润色,所以有段时间我不得不从心里强迫自己完成剩余工作,然后将其呈现给用户。
所以在制作游戏过程中你需要有坚持到底的毅力——你需要意识到,无论你预计完成的工作量是多少,实际情况总会超出你的预期。