我的世界这个游戏的代码能排在游戏代码中排第几?

很烂,烂到加上小作坊的独立游戏(包括RPG Maker和橙光游戏),应该都能排进倒数。

这游戏的火完全不是靠技术。

我自己不写Java,也没看过Minecraft的源码,但看过许多mod作者的吐槽,列举如下:

  1. 完全没有API的概念。所有mod都是解包后强行hack进源码,甚至要用到一堆private方法。forge/buckit是把这个hack工作进行封装抽象,模拟了一组API。
  2. 几乎没有事件概念,连它自己用的Java网络框架(netty)的事件架构都没用上,mod要自己做个游戏内的交互界面,得自己从头到尾造轮子,包括处理鼠标事件。
  3. 完全没有多线程。有人作了全文搜索,代码里仅有的几个thread和synchronized只出现在I/O相关的地方。直到最新的几个版本更新后,才开始为区块生成做了多线程,区块/单位更新这种最急需的不知道最新版本是不是多线程了。
  4. 因为没有多线程,Minecraft的服务器是市面上极其稀有的,用酷睿比用至强性能好的,因为酷睿单核主频比志强高……然而哪怕是顶配服务器,让150人同时在线就能给你卡飞……心疼所有腐竹的钱包,有这钱租服务器,搭个魔兽私服都舒服得多。
  5. 对OpenGL的应用,连入门级别都算不上,貌似是OpenGL中的一个传递数据给显卡的缓冲功能根本没使用上,导致图形性能奇差无比,于是出现了装上OptiFine这个光影mod后反而帧数更高的诡异结果……另外几乎所有安卓系统的厂商,都在GPU驱动里,专门为手机Minecraft开了个绿色通道,在Minecraft调用OpenGL接口时,系统帮忙擦屁股,把这个buffer功能补上……
  6. 同上,方块渲染绘制时,根本没管方块是否可见,只要是所有暴露出来的面都会被绘制……比如区块加载未完成时能看到的地底方块……比如某些明明一马平川却能把人卡飞的地方,地底肯定有一个大型矿洞。
  7. 再同上,单线程+无优化,导致了Minecraft里万恶的区块更新策略的诞生(只有玩家角色附近的区块会更新,其他区块都是时间静止的),严重影响了机械化/工业化/红石化玩家的经营规模。
  8. 方块列表是一个数组,静态长度数组。没有方块注册接口,程序初始化时直接array[0] = new xxx(1, 3, “Dirt”, …); array[1] = new xxx(xx, xx, …)这样把所有属性硬编码进去,如此写了几百行初始化上所有方块类型。方块的唯一标识就是数组下标,导致不同mod添加的自定义方块极容易因为下标重复而撞车。(比如某两个大型工业mod(看其他回答,这个feature终于被当作bug修复掉了?
  9. 因为根本没有API设计,所以方块的实现非常困难。实现一个新方块,需要继承自方块的基类并填充接口方法,那个基类貌似有200+的接口方法……
  10. 因为上面的各个问题,导致Minecraft貌似至今都无法让一个格子里放下任意两种不同半砖的组合,因为每种组合都必须硬编码一个新方块来实现,而无法通过一个“半砖组合机制”来自动完成——建筑玩家体验极差。
  11. 药水同样是一个静态数组,同样的硬编码初始化,更惨的是,药水数组长度只有32,一开始就写死了。听说有的主打药水的mod,是自己从零开始硬造了另一套药水系统,来绕过这个限制的。(这个操作似曾相识……前面说的写GUI/HUD的mod也是这么搞的)
  12. 因为没有API,不同版本之间的代码变化非常大。并且作者还头铁(或者技术不够),不肯(或者不会)二进制发布,发布的是Java包,极容易解包源码。所以作者还做了代码混淆,然而不同版本之间的代码混淆方式也不同,导致代码变动更大了——因此,Minecraft的mod更新极难无比,大多数大中型mod都是直接绑定在少数几个常用版本里的,而没法全版本适配或者迅速跟进新版本——因为每次更新后,forge/bukkit作者都得重新解包原码,重新反混淆,然后重新适配API,更新mod框架。
  13. 上一条的直接后果是,Minecraft的所有mod作者(包括不写mod的高清贴图作者,因为高清贴图依赖于mod),都是hack了游戏本身,违反了游戏软件的用户许可协议EULA。然而Mojang默许了这些行为的存在,并不去管——因为自己没本事做出稳定的API和mod框架,管了的话mod社区就不存在了,游戏就火不起来了。
  14. 微软收购Mojang后,用C++基于移动版将其重写了,放到了win10应用商城里。有Java正版key的用户可以到Minecraft官网上激活win10应用商店版。有兴趣的可以对比一下,在win10版和Java版上都开一个默认存档,进入世界,简单移动鼠标转换下视角,你就会感受到天壤之别。(话说网易和微软做了PY交易,把MC盒子包装了下美其名曰国服版,然后win10应用商店版在中文区下架了……之前购买/激活了的老用户还可以用,没购买/激活的新用户,只能改系统语言跨区购买了)
  15. 再来个很残忍的对比——Minecraft之后,市面上兴起的类似设计的沙盘类游戏,除了泰拉瑞亚还是像素风,其他全特么是真·3D,而不是马赛克世界。
  16. 听说巨硬接手后1.8开始,许多问题大有改观,微软爸爸赛高!

综上所述,每一个mod作者上辈子都是折翼的天使,这辈子都是走向烈士之路的壮士!

还缺人的互联网公司,赶紧联系他们,这是最好的996员工!

说起来,这种厂家写一个开放性/自由度极高的框架扔那儿,让社区帮忙推上神坛的操作,有点莫名眼熟呢……我绝不是在暗示某b开头的大厂(逃

——————————————

联动一个看过源码的专业回答:

从编程的角度来看,Minecraft 是怎么样设计的?

来源:知乎 www.zhihu.com

作者:诸葛不亮

【知乎日报】千万用户的选择,做朋友圈里的新鲜事分享大牛。
点击下载

此问题还有 41 个回答,查看全部。
延伸阅读:
Minecraft开发圈内应不应该开发出降低门槛的程序?

写一个游戏需要多少行代码?