准备期
在开始这个项目之前,我的想法是做一款小型解谜游戏。记得小时候曾经玩过一款滚动方块的 Flash 游戏,我在网上找了很久,终于找到了它——《Bloxorz》。我的计划是保留游戏的核心机制,即翻滚方块,但去掉《Bloxorz》中的机关块、橙色块和传送门等机制。因为我觉得《Bloxorz》后期的谜题更多是探索,而不是推理。我想做一款专注于翻滚的静态谜题游戏,类似于《见证者》,同时加入一些不破坏静态性的机制。理论上,你可以在谜题开始时就推理出答案。
第一周(7 月 8 日至 7 月 14 日)
这周的重点是快速试验游戏机制,并评估其开发难度和所需的开发时间。
我原本的想法是做一个真 3D 的方块翻转游戏,不仅支持任意形状的方块,地形也是 3D 的。虽然程序上实现 3D 翻转相对简单,但编写 Solver 有些困难,算法性能也有些吃力。基于之前《塔防实验室》项目的经验,我深知所有问题一旦进入 3D 空间,难度都会大幅上升。因此,我迅速放弃了这个想法,转而采用类似原版的长条块在平面上翻转的机制。这个机制的巧妙之处在于,虽然看似是 3D 的,但实际上完全可以当成 2D 问题来解决。
在机制设计上,我主要参考了自己的老项目《PuzzleMino》。当时,我总结了一些常见谜题的变体方式,如挡板、对称、多起点、多终点、颜色等(这些都是从《见证者》总结出来的,真是个谜题宝库)。考虑到时间关系,我的目标是实现 4 种机制(最终只完成了 3 种),预估完成 40 个谜题(最终只完成了 31 个)。
确定了把工作重点放在谜题设计上,所以删去了非必要的功能,包括不做开始菜单(New Game 页面)、不做选关页面,谜题采用线性开启。
- 代码方面,我实现了核心的翻滚机制,编写了 Solver 以及随机谜题生成器。
- 通过玩随机生成的谜题,总结解题技巧,分析解题心流,收集有趣的局部题面。
- 我完成了前 5 个谜题,并制作了第一版美术(简单的原型方块)。
下图展示了实现的翻滚操作。
下图展示的用 A * 算法求解这种非常规移动,不过其对应评估函数我没去深究,所以算出来的不一定是最短路径,但能求出是否有解。下图有时不显示路径,就代表无解。
下图是简单实现的随机谜题生成器,随机出有价值题目的概率大概是 10%。
第二周(7 月 15 日至 7 月 21 日)
这周的主要任务是支持挡板机制。
- 由于时间紧迫,我秉持着“怎么快怎么来”的原则写代码,因此,这周对代码进行了必要的快速重构,使后续扩展更容易,降低模块的耦合度。
- 我开始寻找合适的背景音乐,同时尝试了第二版美术设计(从老项目《PuzzleMino》中拷贝了圆角方块)。
- 高强度地玩随机挡板谜题,总结解题技巧,分析解题心流,收集有趣的局部题面。
- 完成了关于挡板机制的 6 个谜题。
第三周(7 月 22 日至 7 月 28 日)
这周的重点是提高美术表现力。
- 从插件库里找来了动态格子水面效果。
- 开始优化方块滚动动画以及关卡切换动画。
- 从《塔防实验室》项目中拷贝了地形格子系统,这种带裂缝的柱子风格是我个人非常喜欢的。
- 从《mota24》项目中拷贝了 UI 菜单系统。
- 实现了最简单的存档系统(只保存玩家当前玩到的关卡编号)。
- 支持手柄操作(研究 New Input System 花了一些时间)。
- 快速重构代码。
- 完成了关于白色方块的 5 个谜题。
- 由于存在多个可操作的方块,实现了选中系统(我理想的选中系统要复杂很多,这里只实现了最简单的版本,所以导致谜题中不能有太多可操作方块,否则选中操作会变得很麻烦)。
- 游戏字体采用了得意黑(可惜得意黑不支持繁体,所以后续改了)。
- 高强度地玩随机多方块谜题,总结解题技巧,分析解题心流,收集有趣的局部题面(多方块谜题的 Solver 写不出来,太难了,所以随机题目不一定可解,这导致花了不少时间去解一些其实无解的题目)。
下图是最终被抛弃的水面效果。
第四周(7 月 29 日至 8 月 4 日)
- 尝试制作多终点、多方块谜题。
- 尝试了新的美术风格,去掉了水面,整个背景完全采用随机高度的柱子,氛围感很强。
- 关卡切换采用了程序化动画,通过背景柱子形成题面(效果非常好)。
- 进一步优化了方块的翻滚动作,加入了很多不易察觉的细节。
- 整理音效需求,从素材库中寻找合适的音效(可惜最终音效的匹配度还是偏低)。
- 谜题数量达到 21 个,并根据最新的美术对所有谜题进行了优化。
下图接近游戏最终的美术效果了(关卡切换时有颜色闪烁问题)。
第五周(8 月 5 日至 8 月 8 日)
- 增加了多语言支持(简体中文、繁体中文、英语)。
- 游戏字体改用了阿里巴巴普惠体。
- 修复了手柄操作 UI 引起的各种 Bug(由于工作中没做过手柄相关的功能,所以这方面花了不少时间)。
- 制作了简单的选择关卡系统以及清空存档系统。
- 完成了操作引导的相关内容(将引导嵌入到谜题中,同时将谜题名字也嵌入到谜题中)。
- 完成了总共 31 道谜题(未达到预期的 40 题)。
- 制作了游戏通关场景(想看的自己通关去~)。
- 重构了关卡切换效果,确定了最终的美术表现。
- 在最后一天制作了 itch.io 和 indienova 的页面,包括游戏 Icon、Banner 等素材。
下图是大宝剑谜题。
回顾
虽然机制和谜题数量没达到预期,选关系统过于“简单”,选中系统也有些敷衍,但游戏的完成感很强:必要的内容都有了,而且谜题质量让我个人非常满意。喜欢挑战硬核谜题的玩家赶紧来试试吧,免费的!
大概估算发现,这次项目 80% 的时间都花在了谜题设计上。好的谜题需要灵感、迭代和沉淀,是非常偏向创意型的工作,不是增加工时就能增加产出的。想提高谜题设计效率,还是只能不断设计谜题,积累经验。
关于一个月做一款游戏的方法,我个人觉得非常好用,强烈推荐。不仅能顺利发布游戏,还顺带解决了我的分享焦虑。
更好的开发日志分享方法
我以前也定期写过开发日志,但日志内容大多是流水账,不仅别人看了没收获,对自己也没太多回顾价值。如果想写出好的日志,分享一些开发过程中的技巧和心得,需要投入不少时间,这会打断开发节奏,自己也会过分关注开发外的事情。
在之前的项目中,我其实有很多技巧和心得想分享,但总感觉这些内容还会随着项目进展持续改变,就没有及时动笔。另一方面,写好文章真的太耗心力了,总想着以后有时间再分享,结果最后都不了了之。
在上一个项目《mota24》发布后,我发现自己非常高效地写出了 2 篇分享文章,原因可能有两点:
1. 项目发布后有种完结感,即项目不会再变了,自己也有空闲时间可以跳脱出项目,从外部观察总结。
2. 由于开发时间只有 1 个月,即使过程中没有做任何记录,对每周的工作印象也还是很深刻,用到的技术、总结的心得都记得很清楚。
趁着分享欲爆棚,基本文章都是一口气写完,非常舒畅。
这次《谜途方块》(Bloxpath)项目结束后,我也有类似的感受,而且更强烈了。除了这篇回顾外,我还计划写一篇关于谜题设计技巧的总结文章。
后续计划
本来预计月底开始下一个独立游戏开发项目(也是一个月),但最近有些新想法,所以一切都不确定。不过,接下来的两周肯定是休息时间。一个月的高强度开发还是挺耗精力的,需要恢复一下。
开发效率好高,厉害!
玩了一下,很不错。
我比较喜欢最后一关的设计,增加了移动顺序这个思考维度,而不仅仅是倒推路径。