切换语言: Deutsch English Português, Brasil Русский Українська

地图生成器

From Official Factorio Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

许多玩家对于如何理解地图生成引擎有一些疑问。本页试着解释一些基础的功能。但必须说的是,完全修订/重写或其他一些在开发待办事项表上的项目,都会需要时间来完成。所以玩家只好先凑合用着吧。如果你了解关于地图生成引擎的工作的原理,你会觉得这也不是太糟糕嘛。

如何工作

基本上你需要知道,游戏世界的很大一部分,都是地图生成引擎使用一个被称为“柏林噪声(Perlin Noise)”的算法生成的。参见下边的细节部分。你只需要知道,这工作起来有点儿像海浪。


在一个定义好的水平面上的所有东西,决定了一些种类的地形存在(或不存在)。


你也需要知道的是,地图并不是在游戏开始时就全生成好了。只有你见到的一部分被生成了,其他的部分都没有生成。当你探索到更多地区时候,才会生成相应的地图。参见下方更多的技术细节。


第一列

生成率

不是矿石,煤炭,石油等东西的频繁程度。

这决定了 —— 这张图中 —— 波浪发生器的波长。

生成率并没有修改一格中资源的数量。如果你增加了生成率,则每一个资源点会有更少的资源总量(因为它覆盖了更小的面积),但是资源点的每格都会有相同数量的资源。同时,改变生成率并不能影响地图上资源的平均数量,只能影响它们的分布。

高生成率:对于地形类型,这意味着:许多不同种类的地形,森林、沙漠以及沼泽的面积可能只有10格或更少。对于资源来说:更多的资源,但是都是补丁大的地方。

低生成率:对于地形类型,这意味着:更大的地形,只有森林的广袤地区。对于资源来说:并不是很多,但是如果你找到了,但是都是非常大的地方。

简而言之:低地形类型意味着同样的地形覆盖更广袤的面积。高地形类型正好相反,地形变换的更频繁。通常就是巨大的森林 vs. 小树丛。

尺寸

这决定了“水平面”(参见下文!):在一个定义好的水平面上的所有东西,决定了一些种类的地形存在(或不存在)。

它的意思是,对于同样的波形,可能看上去完全不一样,如果你向上或向下移动这个水平面,最后你增加或减少了矿区或湖泊的平均半径。

使用小尺寸,你就得到了很多小矿区。用大尺寸你就有了一个大矿区。当然,这也跟生成率多少有点儿相关。

资源含量

这决定了波高的平均值。一个高资源含量意味着:每有更多的资源。

如果你把虫巢的资源含量设为高,结果就是当你干掉一个“富有的”虫巢会得到更多的虫巢核心

左栏

  • 地形类型:地形变换的频繁程度。游戏中有几种不同类型的地形。这也取决于水域。
  • 水:湖面的大小。湖面可以相当大,大到你开车需要花费一小时或更长时间才能环绕一圈。看运气玩家也有可能完全被湖面所包围。
  • 铜矿,石头,煤,原油:必须的资源。参见上述生成率,尺寸和资源含量。
  • 虫巢:开局虫巢的数量以及大小。注意,在游戏过程中敌人会发展和建造新的村庄的。

起始区域

这是一个特殊值。这决定了在围绕中心坐标的一个特殊的起始区域。这个区域有着和地图其他区域不同生成率的矿石等。这个区域的设定通常是保证有一个更好的起始条件。尽管这有可能随着你的地图生成种子不同而变化。

注意:如果你设置这个“尺寸”为非常低或无,则地图生成引擎可能会生成一个根本无法生存的地图。你可能开始于一个非常小的岛屿,或一个非常大,但是没有任何资源的岛屿,甚至可能在虫巢中间等许多的问题。

通常一个好的主意就是在你开始建造以后再开始探索外边的世界。如果地图生成引擎生成的地图是几乎没用的,这也不一定是一个bug。

和平模式

敌人在你攻击它们之前是不会主动攻击的。这在游戏过程中随时可以开启或关闭的,参见控制台命令

地图宽度和高度

如果你限制了宽度并且/或限制了高度,则生成的地图是有限宽和有限高的。参见下文“探索中生成”。

地图生成种子/地图共享代码

地图生成种子
随机数发生器的种子
地图共享代码
所有的地图生成设定(地图生成种子,资源设定,尺寸设定等)。

地图生成种子

这是一个用于随机数发生器的起始值,异星工厂在游戏中任何事上都会用到随机数。(异星工厂中的随机数和计算机中的通常都不是真随机,它们是通过复杂的算法计算出来的伪随机,这需要一个起始值来当作种子,参见http://en.wikipedia.org/wiki/Random_seed)。

所以即使使用同一个地图共享代码,但是使用不同的地图生成种子,地图看上去也会完全不同。但是也有可能完全相似。

地图共享代码

一串字符串,看上去就像下边的这样:

>>>AAALABAABgADAwYAAAAEAAAAY29hbAMDAgoAAABjb3BwZXItb3Jl
AwMCCQAAAGNydWRlLW9pbAMDAgoAAABlbmVteS1iYXNlAwMCCAAAAGl
yb24tb3JlAwMCBQAAAHN0b25lAwMCORcrDUQ7AACMCwAAAAAAAAAAAA
ADAFR8w0Q=<<<

这是一个交换共享代码的帖子:http://www.factorioforums.com/forum/viewtopic.php?f=36&t=5807

我可以在哪里用这串代码?

在地图生成引擎里使用:这里有一个额外的区域你可以粘贴这串代码。(Windows操作系统下使用Ctrl+V)

我可以在哪里得到这串代码?

在加载游戏对话框,选择你想要生成代码的游戏,然后点击左下角的地图共享代码按钮。然后这串字符串就会弹出来,用鼠标选中,然后按Ctrl+C来复制。(Mac.系统下是Command-C)你现在就可以粘贴这串代码到地图生成引擎或发送给你的朋友。

生成

地图生成引擎(世界生成器)是基于改进过的柏林噪音算法。在API文档中有 更多细节描述。

本文描述了生成算法

Factorio-Perlin-Noise.png

上图:正常设定。 中图:同样的设定,但是使用更高的生成率(注意它们有相同的但是形状却更简洁的曲线)。 下图:与上图类似,但是更高的水平面等于增加了尺寸

蓝色的波浪线是内部噪音函数,黑线是一个“水平面”是用来决定资源布置区域的,红线是实际布置资源的区域。更高的生成率主要关系到噪音函数。增加生成率是增加资源区的数量,同时减少了资源区的尺寸和它们之间的距离。

这个原理通过一些调整,在异星工厂中用来生成所有的地图。地图生成引擎是一格接一格的工作的,所以资源被放置在 f(x) > 0 的格x上。每格资源的数量是使用f(x) * 资源含量 得到的。

探索中生成

一个地图正常是无穷大的(在没有其他限制条件下,参见上文“地图宽度和地图高度”!)。

正因为这样,所以整张地图是不可能在一开始就全部生成好的。地图上一个新只有被探索到的时候才被生成。这意味着当你到达当前可见的区域边界时,需要的块才被生成。这并没有什么不同,如果你发现这块区域,或如果雷达发现这块区域,或游戏(静默的)为一些虫子村庄发现一些(隐藏)的块。

因为地图是无穷大的,所以尺寸的限制来自于你电脑的内存大小。当然了,这是非常大的。如果一块是一平方米,同时你有8 GiB的剩余内存空间,你可以探索的面积大小相当于列支敦士登公国的国土面积。:) (相当粗糙的估计!)

但是你也能使用限制宽度和高度来生成地图。注意,你也可以只限制宽度或只限制高度,所以你可以生成“条状”的世界。这里有一些玩家,喜欢使用只有20格(或更少)的高度的地图。

也要注意的是,地图边界(世界尽头)环绕的只有水。你可以在地图边界上放置一个供水泵, 它将会从虚空中抽水。

参见