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

地图生成器

From Official Factorio Wiki
Revision as of 15:06, 3 October 2024 by Bilka (talk | contribs) (Add archive: to archived link)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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

如何工作

基本上你需要知道,游戏世界的很大一部分,都是地图生成引擎使用一个被称为“柏林噪声(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格(或更少)的高度的地图。

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

参见