看了一下代码,关于地图关联,大致是这样的:
首先
xml中设定了部分文明的地图关联,在地图生成时,会优先满足该文明的地图倾向。
地图关联有这些:
英国沿海,
奥斯曼沿海,
西班牙沿海,
玻璃沿海,
丹麦沿海,
阿拉伯荒漠,
阿兹特克丛林,
印度草原,
易洛魁森林,
俄罗斯苔原,
蒙古平原(没错,是平原),
印加丘陵。
应该注意到:沿海之外的其他地貌关联且只关联唯一文明。
地图逆关联有:埃及无丛林和森林,暹罗无森林,桑海无苔原。可以注意到有逆关联的都没有地图关联。
其次
每种地图,都有自己的生成规则,生成规则中会有一个专属该地图的“默认”地貌倾向,比如沙尘暴的倾向就是沙漠,盘古地图应该是无类型,岛图是沿海。
然后,程序会把地图分割成很多区块,计算每个区块的地貌比例,然后根据规则归类为“草原类”“苔原类”“混杂类”等等(比如苔原+雪原占区块面积30%以上就定义为苔原区块)。
之后计算区块产出,并按照一定规则进行修正。比如荒漠地块粮食过少,而且地块内没有河流,那么就吧荒漠换成丛林,苔原地块粮食少就加鹿等等。从而保证每一个区块的产出都不会过少或者过多。
与文明的优先倾向对比。如果满足,就把相应文明放在那,然后计算下一个文明的位置。
其中,地图关联判定优先级为:沿海>沿河(目前无文明关联)>其他关联>逆关联>地图默认
如果没有区块满足地图关联,比如砍2爷遇到整块地图都没有“丛林区块”的情况,那么就把他放到有相应地貌的区块,也就是说放到有那么一两个丛林的区块中。
如果有相应地貌的地方无法设定初始位置,比如说离其他文明过近或者压根没有区块满足以上条件,或者文明本身就没有特定倾向,那么就把该文明强制归类为地图的“默认”类型进行分配。比如高海平面的岛图,全部都是小岛,不满足任何一种沿海之外的地貌标准(其他类型都要求陆地面积要达到一定数量),所以所有文明在高海平面的岛图中都是“沿海”属性。
如果默认类型都没地方放了,那么就在主大陆临近的海里,生成一个1格大小的草原地貌,把该文明放上去。(前阵子那个I大打的孤岛衰图估计就这么形成的。。。)
大致看过地图生成算法之后,大家可以猜测一下为什么沿海之外的每种地貌,只关联了一种文明。
总而言之,地图关联就xml里列的那么几个,不用猜测了。但是要说两点,一个是在个别地图上,地图关联常常不满足条件,因而失效。另外一个是由于地图生成算法问题,不同的地形关联几率是不同的,有的地貌容易出现,就容易关联,有的地貌不容易出现,无关联的情况就比较多。