两个月期限已到,项目终止。我想做十个失败的业余项目,这是第二个。roots 是一款多人在线沙盒挂机游戏,灵感来源于 Global Game Jam 2023

game - roots

截至目前的开发进度

  1. 实现了一个棋盘状无边界地图的模拟沙盒引擎,Go 语言实现。具备基本地图功能(BFS 寻路、向量、框选等)、游戏循环控制(类似 Unity 引擎的 Update 方法)。
  2. 状态机框架、游戏物体状态数据结构(可拓展,有背包系统)。已经实现的角色行为:挖矿(寻找资源,开采)、种植作物(寻找合适条件的地形,改变土地块状态)、攻击、无目的漫游。还不能满足生命周期循环需要的所有行为。
  3. debug 工具/流程。目前的方式是直接在终端打印 emoji,如上图所示。

未完成:生态系统、部落冲突、贸易市场、决策系统。只有这些内容完成了,这个游戏才会有第一个真正有可玩性的版本。

为什么失败了?

时间安排/项目管理。 我对整个项目的工作量预估过度乐观,项目开始时,我认为只需要两个月的业余时间就能开发出可以玩的版本。其次,我没有考虑情绪以及精力。下班时间非常晚,我以为自己是天选之子般的快乐码农,但精力有限就是有限。一个业余项目如果不能以愉悦的方式来完成,对我来说没有必要坚持下去。说到这里,想玩音乐了!

缺乏热情。 这个游戏并不是我喜欢的游戏类型,事实上我没有认真玩过任何一款作为参考的游戏。超过最后期限后,再花时间来开发这个游戏,不再像一开始那样吸引我了。

焦虑情绪。 在应该休息放松的时间,这个项目给我带来了不少情绪底噪:“如果你现在有空,你应该去完成这个项目!”我渐渐发现,找到生活的心流状态远比一切更重要。

缺乏游戏开发经验。 游戏开发过程中,排查错误、运行测试十分繁琐。游戏逻辑代码基本没办法写单元测试。其次,我对于许多游戏开发的设计模式、最佳实践了解程度较浅,在实现功能时需要耗费更多时间构思设计。以上仅仅描述了开发时遇到的问题,对我个人而言,更大的问题是:在这个项目中我常常陷入玩法设计的困境;而且在独立开发的情况下,我时常要更改玩法设计。

学习新技术的目的没有达成。 在项目开始时,我想顺带学习的技术(gRPC 在线程序、sqlite 数据库持久化、Go语言程序性能分析优化)实际上不适合在这个项目中学习。这个项目需要的时间远远比想象中多,我还没有进行到学习这些技术的阶段。

学到了什么?

关于编程:

  • 不要在看不到代码的时候思考代码。让代码编辑器成为思考延伸的助手。
  • 独立开发特有的编程策略:代码随时调整,如流水一般。逻辑层可以反向影响框架层,在写代码时并不可能严格按顺序设计、实现;尝试直接开发有代表性的上层逻辑代码能反向为底层框架设计提供思路。

关于项目计划:

  • 对我个人而言,我会过度乐观地判断一些我并不熟悉但又略有了解的事物,在这个项目中主要是玩法设计。而这些错误的判断往往会阻塞整个项目推进的进度。
  • 即使是业余项目,项目管理也要制定更周全的计划,尽力控制项目执行过程中才发现的难题。我只能告诉你在那以前要多想!
  • 由上述内容联想,上班确实是一个程序员最靠谱的进步途径之一。

关于游戏设计:

  • 虽然这次项目实践的体验十分痛苦,但是我还是认为:独立游戏的玩法应该由游戏自己生长出来,并由开发者探索出巧妙的设计。

关于业余项目:

  • 每一周投入到业余项目的时间非常少,每个月能达成的目标十分有限,进展缓慢会消磨意志。
  • 找到心流远比达成目的重要。

感谢自己又认真失败了一次!