看了一下代碼,關(guān)于地圖關(guān)聯(lián),大致是這樣的:
首先
xml中設(shè)定了部分文明的地圖關(guān)聯(lián),在地圖生成時(shí),會(huì)優(yōu)先滿足該文明的地圖傾向。
地圖關(guān)聯(lián)有這些:
英國沿海,
奧斯曼沿海,
西班牙沿海,
玻璃沿海,
丹麥沿海,
阿拉伯荒漠,
阿茲特克叢林,
印度草原,
易洛魁森林,
俄羅斯苔原,
蒙古平原(沒錯(cuò),是平原),
印加丘陵。
應(yīng)該注意到:沿海之外的其他地貌關(guān)聯(lián)且只關(guān)聯(lián)唯一文明。
地圖逆關(guān)聯(lián)有:埃及無叢林和森林,暹羅無森林,桑海無苔原??梢宰⒁獾接心骊P(guān)聯(lián)的都沒有地圖關(guān)聯(lián)。
其次
每種地圖,都有自己的生成規(guī)則,生成規(guī)則中會(huì)有一個(gè)專屬該地圖的“默認(rèn)”地貌傾向,比如沙塵暴的傾向就是沙漠,盤古地圖應(yīng)該是無類型,島圖是沿海。
然后,程序會(huì)把地圖分割成很多區(qū)塊,計(jì)算每個(gè)區(qū)塊的地貌比例,然后根據(jù)規(guī)則歸類為“草原類”“苔原類”“混雜類”等等(比如苔原+雪原占區(qū)塊面積30%以上就定義為苔原區(qū)塊)。
之后計(jì)算區(qū)塊產(chǎn)出,并按照一定規(guī)則進(jìn)行修正。比如荒漠地塊糧食過少,而且地塊內(nèi)沒有河流,那么就吧荒漠換成叢林,苔原地塊糧食少就加鹿等等。從而保證每一個(gè)區(qū)塊的產(chǎn)出都不會(huì)過少或者過多。
與文明的優(yōu)先傾向?qū)Ρ?。如果滿足,就把相應(yīng)文明放在那,然后計(jì)算下一個(gè)文明的位置。
其中,地圖關(guān)聯(lián)判定優(yōu)先級(jí)為:沿海>沿河(目前無文明關(guān)聯(lián))>其他關(guān)聯(lián)>逆關(guān)聯(lián)>地圖默認(rèn)
如果沒有區(qū)塊滿足地圖關(guān)聯(lián),比如砍2爺遇到整塊地圖都沒有“叢林區(qū)塊”的情況,那么就把他放到有相應(yīng)地貌的區(qū)塊,也就是說放到有那么一兩個(gè)叢林的區(qū)塊中。
如果有相應(yīng)地貌的地方無法設(shè)定初始位置,比如說離其他文明過近或者壓根沒有區(qū)塊滿足以上條件,或者文明本身就沒有特定傾向,那么就把該文明強(qiáng)制歸類為地圖的“默認(rèn)”類型進(jìn)行分配。比如高海平面的島圖,全部都是小島,不滿足任何一種沿海之外的地貌標(biāo)準(zhǔn)(其他類型都要求陸地面積要達(dá)到一定數(shù)量),所以所有文明在高海平面的島圖中都是“沿海”屬性。
如果默認(rèn)類型都沒地方放了,那么就在主大陸臨近的海里,生成一個(gè)1格大小的草原地貌,把該文明放上去。(前陣子那個(gè)I大打的孤島衰圖估計(jì)就這么形成的。。。)
大致看過地圖生成算法之后,大家可以猜測一下為什么沿海之外的每種地貌,只關(guān)聯(lián)了一種文明。
總而言之,地圖關(guān)聯(lián)就xml里列的那么幾個(gè),不用猜測了。但是要說兩點(diǎn),一個(gè)是在個(gè)別地圖上,地圖關(guān)聯(lián)常常不滿足條件,因而失效。另外一個(gè)是由于地圖生成算法問題,不同的地形關(guān)聯(lián)幾率是不同的,有的地貌容易出現(xiàn),就容易關(guān)聯(lián),有的地貌不容易出現(xiàn),無關(guān)聯(lián)的情況就比較多。
全部評(píng)論