设为首页收藏本站

塞爱维(CIV)文明联盟

 找回密码
 注册
查看: 14214|回复: 12

[原创] 关于自然奇观放置的代码以及新自然奇观概率低的解释

[复制链接]
发表于 2011-1-10 16:04:10 | 显示全部楼层 |阅读模式
每种地图大小的奇观数量
  1.         local worldsizes = {
  2.                 [GameInfo.Worlds.WORLDSIZE_DUEL.ID] = 2,
  3.                 [GameInfo.Worlds.WORLDSIZE_TINY.ID] = 3,
  4.                 [GameInfo.Worlds.WORLDSIZE_SMALL.ID] = 4,
  5.                 [GameInfo.Worlds.WORLDSIZE_STANDARD.ID] = 5,
  6.                 [GameInfo.Worlds.WORLDSIZE_LARGE.ID] = 6,
  7.                 [GameInfo.Worlds.WORLDSIZE_HUGE.ID] = 7
  8.                 }
复制代码


  1.                 if thisFeature.Type == "FEATURE_GEYSER" then
  2.                         wonder_list[1] = thisFeature.ID;
  3.                 elseif thisFeature.Type == "FEATURE_CRATER" then
  4.                         wonder_list[2] = thisFeature.ID;
  5.                 elseif thisFeature.Type == "FEATURE_GIBRALTAR" then
  6.                         wonder_list[3] = thisFeature.ID;
  7.                 elseif thisFeature.Type == "FEATURE_FUJI" then
  8.                         wonder_list[4] = thisFeature.ID;
  9.                 elseif thisFeature.Type == "FEATURE_MESA" then
  10.                         wonder_list[5] = thisFeature.ID;
  11.                 elseif thisFeature.Type == "FEATURE_REEF" then
  12.                         wonder_list[6] = thisFeature.ID;
  13.                 elseif thisFeature.Type == "FEATURE_VOLCANO" then
  14.                         wonder_list[7] = thisFeature.ID;
  15.                 elseif thisFeature.Type == "FEATURE_FOUNTAIN_YOUTH" then
  16.                         wonder_list[8] = thisFeature.ID;
  17.                 elseif thisFeature.Type == "FEATURE_POTOSI" then
  18.                         wonder_list[9] = thisFeature.ID;
  19.                 elseif thisFeature.Type == "FEATURE_EL_DORADO" then
  20.                         wonder_list[10] = thisFeature.ID;
  21.                 end
复制代码

按照这个顺序
从上到下遍历整个计算各种奇观的符合放置条件的Plot数
然后关键来了
  1. local iNumPlaced = 0;
  2.         for loop, NW in ipairs(selected_NWs) do
  3.                 local bSuccess = self:AttemptToPlaceNaturalWonder(NW)
  4.                 if bSuccess then
  5.                         iNumPlaced = iNumPlaced + 1;
  6.                 end
  7.         end
  8.         if iNumPlaced < iNumNWtoPlace then
  9.                 for loop, NW in ipairs(fallback_NWs) do
  10.                         if iNumPlaced >= iNumNWtoPlace then
  11.                                 break
  12.                         end
  13.                         local bSuccess = self:AttemptToPlaceNaturalWonder(NW)
  14.                         if bSuccess then
  15.                                 iNumPlaced = iNumPlaced + 1;
  16.                         end
  17.                 end
  18.         end
复制代码

简单的解释一下
就是仍然按之前的列表顺序
检查所有可以放置这个奇观的Plot
检查函数AttemptToPlaceNaturalWonder只有2个条件
1 没有被其他先放置的物体占据(比如玩家起点)
2 距离其他奇观和出生点的距离长度满足条件
只要这2个条件满足 奇观就放置
每放置一个奇观 检查一次数量是否足够 不够则下一个
换句话说 整个过程没有用到随机数
而最后的三个奇观的出现条件其实是
之前的奇观中能满足之前2个条件被放下的数量 不够地图大小所需数量
并且自身还有符合条件的Plot
发表于 2011-1-10 16:18:53 | 显示全部楼层
那把最后几个奇观的位置放在首位不就能保证每次都有不老泉啥的了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-1-10 16:48:06 | 显示全部楼层
自身条件代码太长不贴

各个奇观的条件
Geyser
1 自身以及周围六个格子(以下简称周围)不是水或者海岸(请注意海岸和湖岸的区别)
2 周围包括一座山峰或者4座丘陵
3 周围山峰不多于5 沙漠和冻土分别不多于3

Crater
1 自身以及周围不是水或者海岸
2 不是草原
3 周围山少于2座
4 周围山和丘陵的综合少于4座
5 自身是沙漠或者冻土

Rock of Gibraltar
1 自身以及周围是水或者海岸
2 周围有至少3块海且无浮冰
2 周围有且只有1块深海且无浮冰

Fuji
1 自身是陆地
2 不在最大的大陆
3 周围没有沼泽高山冻土和沙漠
4 周围丘陵不多于2个

Mesa
1 自身以及周围不是水或者海岸
2 自身和周围不是草原
3 山峰不超过2
4 丘陵不少于2

Great Barrier Reef
1 自身以及自身东南以及以上2格周围必须是海水且无浮冰
2 以上的总共浅海小于4

Krakatoa
1 自身不是水
2 周围都是水

RareMystical(包括新奇观三个)
1  自身以及周围不是水或者海岸
回复 支持 反对

使用道具 举报

发表于 2011-1-10 16:51:59 | 显示全部楼层
太深奥了,没看懂,再看一遍

不过研究这个没用啊,随机开图不能控制,编辑图又无所谓
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-1-10 16:55:38 | 显示全部楼层

回复 #4 xzy 的帖子

想控制你可以去改这个文件AssignStartingPlots.lua

另外至少说明一点 XML里的设置都是在坑爹的 没有任何用
回复 支持 反对

使用道具 举报

发表于 2011-1-10 21:25:07 | 显示全部楼层
奇迹用英文写,看不懂啊
回复 支持 反对

使用道具 举报

发表于 2011-1-10 22:20:07 | 显示全部楼层
我不得不说fraxis这帮人写的Lua代码真丑陋
回复 支持 反对

使用道具 举报

发表于 2011-1-10 22:36:18 | 显示全部楼层
这代码很2
回复 支持 反对

使用道具 举报

发表于 2011-1-10 23:27:16 | 显示全部楼层
越来越有一种玩的是CIV5 Beta版的感觉
回复 支持 反对

使用道具 举报

发表于 2011-1-11 00:07:46 | 显示全部楼层
看来与地图有关的全是在lua里了。。
回复 支持 反对

使用道具 举报

发表于 2011-1-11 00:16:26 | 显示全部楼层
可以修改的吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-1-31 16:57:24 | 显示全部楼层
原帖由 phoenixgck 于 2011-1-11 00:16 发表
可以修改的吗?

可以的
MOD还可以重载这个文件
回复 支持 反对

使用道具 举报

发表于 2013-6-18 14:12:57 | 显示全部楼层
多了很多新自然奇觀,有更新版嗎?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|塞爱维(CIV)文明联盟    

GMT+8, 2024-4-23 17:47

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表