《戴森球计划》中所谓的生产线设计,其理论根源应当是工厂的厂内物流规划设计,那么现在为大家带来“巨龙之息”分享的《戴森球计划》物流塔及生产线设计指南,希望对大家有所帮助。
厂内物流规划设计
所谓厂内物流如果去掉工作人员,那么我认为就有以下几点:
生产线平衡。
工作地布置规划。
物料存储区规划。
那么在游戏里,有体现的就比如:小小大工厂(Little Big Workshop),这个游戏如果你要真以用最快的速度完成的话,你就必须要考虑到上述三点。否则,你的员工就会滑水摸鱼。
再比如异星工厂(Factorio),这个游戏的火车,本质上就可以理解成“物料存储区规划”。在物流规划里,这部分有几个要素:
对于大价值的零件,要有最小临时库存。对于小价值零件,要根据包装的收容数确定。
具体到游戏里,对于大价值零件。比如蓝板,卫星等。都是现场制作,现场使用。对于小价值零件,比如铜铁矿,直接集中摆上若干个厂就完事。
包装形式根据具体情况制定。
具体到游戏里,根据生产区的实际流量大小和生产要求。选用正确的包装形式,要么选传送带上货品,要么选无人机一次多个。
再者,需要考虑到工位(也就是每一个工厂)需要从包装中取胜货物的方法(比如人运,分拣器和机械爪)。那么这样,一个工厂的基本结构就出来了
考虑物流成本,物流成本在要综合考虑厂区自身资金和供应商运输压力
具体到游戏里,所谓工厂本身的资金就是你的肝。玩这游戏,你的生产成本有两个:一就是你的肝,二就是游戏里的地皮。而供应商的运输压力其实是不存在的。游戏里不存在供应商压货的需求。
在了解以上理论以后,再去掉游戏中根据不需要考虑的合理性要求。那么,设计一个工厂最简单,最好想的形式就出来了:总线。
从这个角度考虑,物流塔的存在,使得物流成本大幅度降低。在物流成本极大降低增加的情况下,“物料存储区规划”就不存在问题。那么,玩家所说的游戏体验降低就是一个客观存在。
厂内物流规划设计-方法论
根据上述观点,限制物流塔是必须的。那么,假定持有这种观点,物流塔应当如何限制,才能保证游戏乐趣呢?同样,也要从上述理论考虑:
1. 限制物流塔的数目是不足够的,物流塔的存在就是一种技术突破。而对于任何一种理论,只要技术突破了就一定不能只从旧的理论的出发。比如,当相对论出现以后,虽然经典物理体系一样能用,但是用的时候就一定要注意使用范围。
那么,对于这里也是一样的。比如限制为:一星一塔三本地(即一个星球一个星际物流塔,三个本地物流塔),这个不能完全解决问题。一塔三本地就是5个物料输入。那么我只要有两个星球,就是二塔六本地。经过简单的设计,就可以避开限制。
具体到游戏里:最麻烦的绿糖,其实可以分成两部分,引力透镜和量子芯片。你给他溯源一下,就发现,这两种材料都可以在有三个星球的星系里,使用一星一塔三本地的限制,完成大规模生产。
2. 在不限制物流塔的情况下,可以考虑增加物流塔的成本压力。对于现有的物流塔来说,他降低了运输成本。那么,可以给他加回去,让你用的时候要更加小心。虽然说,这游戏的主要成本是肝。但是实际上,在游戏里,运输成本其实是电,飞船和曲鞘。因为运输船每次外派都要消耗电,飞船和曲鞘。不过,这里飞船是可回收的。
那么,在这种情况下,增加运输成本就有两种思路:
* 增加消耗器的消耗,这个不可取。消耗器用肝就能补齐,而用肝补的东西都是恶心玩家。
* 增加飞船的消耗,这个可取,游戏里现在的飞船非常简单无脑。那么,如果将星际飞船变为《X4:基石》的那种呢?即:星际飞船是一种需要玩家自行制作的,可以搭乘的,可以配置的中型产品。玩家生产每一架飞船都需要消耗巨量的物资,以此限制飞船数目。
同时,每一架飞船不再只服务于一个物流塔,而是可以服务于多个物流塔。那么这时,就需要设计星际间物流。这样的修改是增加游戏内容。
综上,有如下建议:
1. 将星际物流塔的工作范围限制在本星系
2. 在星系间,增加一个比如名为“货栈”的巨构。玩家需要首先建设“货栈”才能开启跨星际运输,物流塔把所有的星球资源送入“货栈”
3. 在“货栈”里,玩家可以消耗大量资源建设星际运输船。星际运输船在建设以后,拥有超大量的空间,可以在货栈之间运输货物。
那么这样,看上去就比原来更加费肝。但是,这一些就不再建立在恶心玩家的基础上了。好用的东西一样好用,要你设计的东西还是要设计。而且,理论高度更上一层楼。异星工厂,你只是在一个星球上搞三搞四。
而这个方法,则是考虑在整个宇宙里遨游四方。
面向过程程序设计
我玩游戏有几个层次和目的,一来是享受游戏本身的乐趣。二来是理解游戏的实现方式。三来是思考游戏对现实世界的启发。那么具体到本游戏里,就是这样的:
在没有物流塔之前,生产线的设计是“自顶向下,逐步细化”这是一种面向过程的程序设计思路。在这种思想的指导下,就会有一个必然的产物:函数。人们总是期望复用已经写好的内容和模块。所以,在面向过程阶段,使用了函数做为复用单元。什么是函数?函数就是根据指定输入,输出指定内容。具体到游戏里,就是一个大家耳熟能详的词:黑盒。
所谓“黑盒”,在异星工厂那里,就是有设计过的生产线,用最低的成本设计一个生产效率最高的模块。这个要求与函数何其的相像?在每一个程序里,程序员对于函数的设计都是无止境的,任何一个函数都需要进行优化。这是我认为黑盒的理论来源。那么,如何优化“黑盒”?如何优化“函数”?优化函数不过就是两个指标“时间复杂度”,“空间复杂度”,那么优化黑盒也是一样。
具体到游戏里,你需要对黑盒的生产时间进行调整,选用合适的配方,可以让黑盒在同样的时间生产更多的内容。选用合适的传送带布局,就可以让你的黑盒更加紧凑。这对于每一个程序员而言,都是老本行。
我在公司培训的时候,对于完全无基础的员工,有要求他们去玩一下 异星工厂。我的作业很简单,设计一个蓝板的黑盒,不许抄别人的作业,要从 “时间”和“空间” 两个维度分析我为什么要这么设计。
面向对象程序设计
但是,物流塔的出现让设计思想有了进一步的升华。物流塔出现以后,玩家可以使用模块为单位对工厂进行设计。那么,这时指导理论就变成了面向对象程序设计。在面向对象程序设计中,需要考虑的问题就不再是某个函数的效率,而是整个系统的复用性。
那么,这时就会发现,最优解变成了面水党。如果不知道怎么弄的可以参考我之前的帖子。这也是为什么我疯狂的吹物流塔。我同样给我的学生留了一个作业:
在戴森球计划里,如何体现“高内聚,低耦合”的程序设计思想
那么,答案就很显而易见,并且非常简单了。面水党通过把每种产物都分解开来,每个产物增加了不同的物流塔进行生产,生产线之间没有互相影响的情况。更换一个生产线,只要生产速度相同对整体没有影响。这个就是“低耦合”。而生产线之间的生产过程使用工厂进行,修改时也只针对本工厂和本物流塔,这个就是“高内聚”
那么,试问对于一个已经进入面向对象阶段的程序员。你要给他多少好处,才能让他重回面向过程呢?我认为,现实里很简单,你加点钱,不要说面向过程,面向二进制我也做。但是,游戏里我认为是给不起的。
领域驱动设计
在面向对象的程序设计里,有一个重要的概念就是“最小知识原则”对于一个类而言,他要认识最少的内容。所以,才会有设计模式。比如工厂模式,就是通过“封装性”隐藏掉了“具体的产品”,只向外界暴露出工厂类,产品抽象类 两个知识。
那么,所谓“最小知识”就可以理解为一个概念的边界。这就引出了现在最热门的程序设计思想,领域驱动设计(DDD)。
具体到游戏里,每一个物流塔都可以感知到整个宇宙里所有其它的物流塔,那么就相当于他认识了全宇宙所有的知识,这显然不符合一部分玩家的理解。那么,诟病他也是应该的,同样,修改他的方法也不应该是限制他的数目。因为,一个类被实例化以后,你限制他在函数里的实例个数,就相当逼迫程序多开几个函数。这是完全搞人肝的做法,完全没有意义。同样,还是我刚才的建议:
1. 将星际物流塔的工作范围限制在本星系
2. 在星系间,增加一个比如名为“货栈”的巨构。玩家需要首先建设“货栈”才能开启跨星际运输,物流塔把所有的星球资源送入“货栈”
3. 在“货栈”里,玩家可以消耗大量资源建设星际运输船。星际运输船在建设以后,拥有超大量的空间,可以在货栈之间运输货物。
从程序设计思想的角度来看他,所谓“货栈”就是一个模块的边界(接口)。只有“货栈”才能开启星际运输,意味着只有“边界”才能与其它模块进行数据交换。
所谓星际物流塔只能在本星系工作,就是将领域的边界明确化。本星系就是一个领域,他只负责生产一种/一些产品,而通过“边界”与外界进行数据交互
所谓的“复杂星际运输船”指的是领域间数据交换的成本。在DDD使用的场合里,数据的交换成本有些是很高的。所以用这个进行模拟。
同样在的,在DDD里,“微服务”是一个很火热的概念。那么,我的建议就可以理解为每一个星系都是微服务中一个模块。星系运输船相当于在微服务之间有带宽限制的网络环境。那么,如何设计就是一个可以研究和讨论的问题。
全部评论