知乎热榜 ( ) • 2024-05-06 11:41
Yanbing Zhao的回答

这个问题突然出现在了我的时间线上。在粗略翻看了一下已有回答后,我发现很多回答似乎都在混淆一件事:一个游戏的代码质量烂不烂,和提供的 API 好不好看,是没有必然联系的。举个最简单的例子:微软重写的版本,足足四年时间都没有一套像样的官方 API,有人说过微软那个版本代码烂吗?

我们讨论一个项目的代码好不好看,一方面我们希望代码的可维护性强,满足高内聚低耦合,另一方面我们希望代码效率高,运行速度快,而这两者和 API 都没有直接关系。

举个例子:我们说说大部分回答都提到的硬编码问题。很多回答都在指责诸如在较早的版本里,方块列表是由静态数组维护的,每个方块都要对应一个固定的数字 ID 这样的事情。但是,这样的硬编码设计,对可维护性产生了什么影响吗?所有和初始化注册方块的代码,都在同一个类的同一个角落里,这难道不够高内聚吗?如果想要添加新的方块,只需要在一个方法里追加一行注册方块的代码,并让 ID 自增,还需要修改其他的地方吗?这难道不够低耦合吗?当然,对于 modder 来说,由于他们不能直接修改游戏本体代码,所以说多加一个方块要困难些,但是这和游戏的代码质量又有什么关系呢?

抛开所有和硬编码有关的观点,这个游戏的代码当然也有很烂很烂的地方,比方说广为人诟病的渲染系统(对 GPU 利用程度几乎为零),以及难以利用多核心优化的单线程模型(当然了,对于 MC 这种游戏元素联系紧密,部分地方还有时序要求的游戏来说,设计多线程模型本身,对于一般开发者来说都是很难 hold 住的),但绝没有那么多人说的不堪。

对于 MC 的指责很多集中在 modder 上,是因为 MC 本身是一个极度畅销的沙盒游戏,而历史上从未有过一个商业游戏,有如此之多的人想要修改它,为它添加特性。这样的特点,才使得 modder 的矛盾如此突出。

最后我想指出一点:希望所有相关的人认真看看 MC 这款游戏的 EULA,其中是明确许可甚至一定程度上鼓励 modder 修改游戏的相关行为的。可不是所有的畅销游戏都有这样的包容性:比如说如果你想成为 PUBG 的 modder,那么等待你的,大概率只会是游戏帐号被官方封禁吧(笑)