大家好,这里是DeepLogic,今天给大家带来文明6的蘑菇(部落村庄)规律的详细解析,其规律的成因在于f社的生成蘑菇的代码存在缺陷,随机性不够。

【极大图】红线:蘑菇理想位置线,绿点:蘑菇实际位置示例
A. 蘑菇生成方法
1. 按从西至东的顺序扫描所有列(即横坐标x从0至width-1)
2. 按从南至北的顺序扫描所有列中所有单元格(即纵坐标y从0至height-1)
3. 若该单元格满足蘑菇放置条件则以50%的概率放置蘑菇
B. 蘑菇需满足条件
1.(还未放置任何蘑菇)或(已放蘑菇数量 * 128 < 已扫过的单元格数量),其中128为其预设的蘑菇的稀疏程度,即每128格生成一个蘑菇。
2. 该地块不能为:水域、山脉、绿洲、资源、自然奇观地块
3. 该位置需与已放置蘑菇、文明和城邦的出生点有一定的距离,为简化结论可以当做三环范围冲突。
【注】与蘑菇的距离因为代码有bug,实际上会出现西北-东南走向的距离为3格的情况。而与文明和城邦的距离因为其实现也有bug,实际上不是严格的3环,而是3环加上西南-东北方向的6块4环地块不允许。另外代码中注释了只考虑与文明的距离,然而实际上的实现也考虑了城邦的。(这么点代码能写出这么多bug我也是服气…不愧是…)
C. 坐标系统说明
1. 纵坐标y为从南至北(从下到上),南极为0,俗称纬度。
2. 横坐标x为从西至东(从左到右),在可环球的图上存在x坐标为0的线,俗称经度。
3. 由于其地图为六边形布局,横坐标x的增减方向没有争议,而纵坐标y的增减方向需要由其当前的纵坐标的奇偶情况决定,即当y坐标由偶数变为奇数时,其往北的实际表现为东北方向,反之为西北方向(如下图所示)。

坐标系统示例,格式为x, y坐标
D. 推论
首先说明为何上述生成方法会造成蘑菇生成的规律,原因在于其扫单元格为按坐标顺序扫描,在理想情况下(即只考虑B.1的限制条件),基本上为每固定格数放一个蘑菇,每个蘑菇生成的坐标将存在统一的一个式子来描述,即规律。而其他限制条件的加入,只是给这组坐标上增加了一个不足以完全改变其内部规律的一个随机变量,虽然呈现了一定的随机性,但是依旧在总体上有迹可循。
下面按规律最明显的极大图高地或千湖(海域较少)地图进行分析,其他地图可参考类似的分析方法。
1. 极大图的尺寸为106*66(标图为80*54),即横向106格,纵向66格。那么每128格一个蘑菇,等于是横向2列,少掉纵向的4格(2 * 66 - 4 = 128)。那么用坐标系统代回,相差128格的两个位置就是相距地图上西北-东南方向的4格。
2. 若假设所有蘑菇放置无限制,且将50%放置概率提高至100%,则其在极大图上为严格的3条线+一小段(见第一张图)。从横坐标为1的接近北极的点开始,大约跨度为纵向66格,横向66/2=33格。3条线跨度为99格,每条线的蘑菇数量为17个左右。
3. 首先考虑50%的放置概率,则其会以一定概率将蘑菇点往北移动,且(由于这个概率)每多往北移动一次,其概率减半。因此50%的放置概率导致的实际蘑菇位置不会偏移太多。而在考虑蘑菇的限制条件后,即假定位置会非法,则该位置会往北移动到下一个合法的点(可能会再穿越到南极)再交由随机数来决定。如下图,可以看到理想蘑菇点与实际蘑菇点会有一定的差距,大部分位移是由于位置不满足蘑菇放置条件导致。下面将这种蘑菇点向北偏移的现象简称为“北移”,北移现象可带来一些额外的推论。

【极大图】蘑菇理想位置与实际位置差异示例(北移现象)
4. 那么结合上述三点,一个最直接的结论是:在极大图上,一个蘑菇的西北或东南方向4格,有一个不小的概率也有一个蘑菇。同时,在发现若干蘑菇后,即可对全局的理想蘑菇线进行估计和定位,同时依赖北移机制来根据理想定位来搜寻蘑菇实际位置。但是注意搜寻到的蘑菇可能是北移后的结果,这会给蘑菇线定位造成一定的困难。此外,相同的横坐标下,基本上最多只会出一个蘑菇(除非西侧有大片横贯南北的水域),且蘑菇基本上会隔列出。注意其蘑菇三环排斥的性质,隔列的蘑菇如果预定点位因为各种原因没生成,则很可能形成局部的西南-东北走向4格排布。

典型的西北-东南走向4格和西南-东北走向4格间距
5. 文明的出生点因为与蘑菇线的距离不同,其踩蘑菇的体验也会很不相同。以往在不了解规律的情况下,生在蘑菇线上的文明会比生在蘑菇线之间的文明显著多出不少踩蘑菇的机会。而这也是为何有时蘑菇能一连串踩很多,而有时却是万里无菇。而在掌握了该文章介绍的规律后,则对两种情况找蘑菇的效率都能有所提升,但是也请切忌捡了芝麻丢了西瓜的情况。
6. 北极的蘑菇数量会与其他区域有显著的数量差异,而带来这个数量差异的有几个原因。
a. 按前面的推论,最后会剩下宽度为7的区域,这部分可放下4个蘑菇,均会在北极附近(少数穿到南极),这是实打实的数量差距。
b. 北移现象。因为蘑菇被城邦和文明出生点三环排斥,而在北极冻土带的出生点数量明显少于其他区域,导致一些在北半球沙漠区的蘑菇点仍有可能回到北极区域,而北极区域的蘑菇点却较少跳到南极去。同样,排斥蘑菇的资源在南北极数量也少很多。
因此,北极会出现大致3块蘑菇区,其区域中心的间距在33格左右,且靠近横坐标x=0处的北极蘑菇区会更大一些。北极的蘑菇区也可以算是对北极开局劣势的一个补充(而南极则是有大片森林和沼泽作为补充)。

北极大蘑菇区和南极小蘑菇区,一般是北极的会稍多一些
7. 同样是依据北移现象,若是蘑菇线穿越了大片的海域,其海域北面会有一定数量的蘑菇聚集,原因是海面上没法生成蘑菇,便只能北移到其北面。同理,在一大片横贯南北的大水域后,其东侧陆地上会有大量蘑菇集中生成。

海面北侧有一定概率出现蘑菇群

【附录】如何判断x坐标为0的位置的小技巧:
方法1:通过贴图判断,在该线上的沙丘处有明显的贴图问题,其余部位不明显,在若干地方若仔细观察也可看出(如下方丘陵树)。

0经度线处贴图问题
方法2:在首个单位首次经过该线时会有一个视角转动。
方法3:在环球或接近环球后,可通过小地图判断,其最左侧即为0经度线(注意小地图上显示的两端有大约1格半到2格的冗余)

左下角小地图展示,在环球或接近环球时,其左右两端即为0坐标处
【致谢】感谢 流浪de蒲公英 共同参与读码,该代码也与南极森林区沼泽区等成因有较大相似之处,参考 地图是怎样生成的(二)——地貌篇。

创作不易,如果大家觉得有帮助的话,还请三连支持~