先一种,再五种:这个游戏是怎么长大的 🪨
看看我们的版本列表,你会发现五个多星期里有 29 次发布,从 6 月 20 日的 0.1.0 到昨天的 0.9.0。这是怎么做到的?肯定不是坐下来一口气做出一个完整的功能。我们是分阶段建造的:先做出真正能用的最小版本,等它稳定、好玩之后,再进入下一个阶段。眼下,小行星就是最好的例子。
第一阶段:它们总算存在了。小行星刚进入游戏时,只有一个问题重要:在一个几分钟就能绕一圈的小天体上,降落、行走和挖掘行得通吗?小行星不是缩小的星球,它有自己的尺寸等级、不同的重力、不同的地平线。这就是第一阶段,其他的一切都被故意放在了一边。所以当时只有一种:类型是写死的,又因为没有可选地表的列表,每一列都被盖上了水晶。整个银河系里的每颗小行星看起来都一样。唯一的变化只是周长,以及陨石坑碰巧在哪里。
第二阶段:现在允许不一样了。第二阶段从昨天起已经完成,它会随下一次更新进入游戏。到时会有五个小行星家族,每块岩石按加权概率抽取自己的家族。石质是主力,含有铁、硅酸盐、铜和锡。金属质几乎是实心金属,到处是钛,更深处有钴、钨和铂。冰质处在 −95 °C,含的是挥发物而不是金属:碳、锂、硫。富碳的烟灰般漆黑,洞穴密布,在很深的地方藏着铀和钻石。而结晶质,也就是以前每颗小行星的样子,现在成了稀有的发现。除此之外,每个天体还有自己的陨石坑地貌:密度、盆地宽度、深度、边缘高度,以及它们之间的尘土有多起伏。以前这些是全宇宙通用的五个固定数字,所以每个没有空气的天体看起来都一样。顺便说一下,卫星也受益,因为它们在代码里走的是同一条路。
真正的回报在之后。干净地做好第二阶段,美妙之处在于第三阶段:第六个家族不再是一项编程工作,而是数据文件里的一个条目:名称、地表、矿石、出现频率,搞定。“应该有人把那个加进去”变成了“我们可以哪天晚上试一试”。这就是重构的价值所在。
为什么我们总这样做。有三个原因,都是吃过苦头才学到的。第一:你事先并不知道一个点子好不好玩。一个小小的初版,一个晚上就能和 Justus 一起试玩,之后你就知道扩展值不值得,或者这个点子其实很无聊。第二:小步前进可以审查、可以测试,必要时还能撤回。一个同时伸进五十个地方的巨大功能,只能靠祈祷。第三,也是我们最看重的:这个游戏是孩子们在玩。对他们来说,做了一半的巨大功能,比一个小而可靠的功能更糟。
到处都是同一个模式。方块一开始是立方体,斜坡、楼梯和球体是后来才有的,然后是着色,再然后是精细的边缘倒角,这样就没有什么东西看起来像纸箱了。星球一开始是一块灰色岩石,真正的海洋、洞穴系统、随海拔变化的气候和火山是后来才有的,然后是寒冷世界上结冰的海,现在是小行星。在儿童安全方面,一开始只有聊天里的举报命令,然后是带理由和冷静期的封禁,最近是隐形的观察者模式。还有我们刚发布的强盗,它们本身还处在第一阶段:它们是通过近距离效果打到你,而不是用真正飞行的弹丸。这不是疏忽,而是写进了计划:等第一阶段证明了自己,再做第二阶段。
这种工作方式的代价。老实说有两点。第一,现有的世界会变:因为天体的类型每次加载都会重新计算,从不存储,所以你旧世界里的小行星会在下次更新后得到不同的家族和不同的地貌。你建造的方块会保留,但它们可能会突然悬在半空,或者嵌在岩石里。所以这类事情总会写进更新说明。第二,即使是第一阶段,也必须以第二阶段能够成立为前提来建造。对小行星来说,这意味着:代码里现在恰好只有一个地方回答“这是小行星吗?”,还有一个测试,对每个生成的家族检查它确实被归为小行星。漏掉任何一个调用方,一个讨厌的老漏洞就会回来:一块你一个方块都挖不了的岩石。
而且测试又一次救了我们。在做新家族的时候,一个存在已久的检查报警了:它保证在每个有矿藏的世界里,你都能做出电缆的配方。五个新家族里有三个根本没有铜,玩家会在那里卡住进度。没有人注意到这一点,几周前有人写的一个测试注意到了。现在所有家族都含有铜和硅酸盐。
接下来是又一个这样的阶段,大概在植物、动物和强盗之间。具体是哪一个,通常由 Justus 说了算。🌟
留言