设为首页收藏本站

塞爱维(CIV)文明联盟

 找回密码
 注册
楼主: zahlen

[原创] 神级马拉松埃及, dulailion的同图, 非战报

[复制链接]
发表于 2011-12-2 00:48:11 | 显示全部楼层

回复 #180 zahlen 的帖子

原帖由 zahlen 于 2011-12-2 00:39 发表
我测试时当然已经知道首都左上有马, 忘了种田.

采矿->畜牧->青铜:
第52回合能吃到黄金, 如果人口上3时出移民, 先开发猪, 那么第87回合完成移民, 此时青铜进度还差2回合.
如果先开发马的话, 那么第87回合完成青铜, 第88回合完成移民.

比你的青铜开局多完成一个地块开发, 少砍一颗树, 几乎同时完成移民和畜牧青铜这两个科技.

如果不优先黄金的话, 畜牧开局会落后青铜开局不过9马拉松回合, 但其它方面的优势会让仍倾向于畜牧开局.
如果你非常在意那点科技差距, 我的评价是"采矿->畜牧->青铜"更优.



我早就说过了,这个采矿-青铜-畜牧 策略是在首都没马,或不知道首都有没有马的情况下的最优解。

如果知道首都铁定有马,甚至50%有马,最优解是 畜牧-采矿-青铜。(其实比 采矿-青铜-畜牧 优势也很有限)

你每次计算非要把那批马算上,只是在重复了我的另一个观点。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-2 00:48:31 | 显示全部楼层

回复 #179 nanoprince 的帖子

前面我向你提了个问题, 你一直没有回答, 可我还是希望得到答案, 所以这次我再问一次.

如果战略资源和你设想的1分不在一起, 你怎么处理?
比如在首都的左下方有马, 你快速造好的移民是在理想的地点开一分呢, 还是圈战略资源呢?
回复 支持 反对

使用道具 举报

发表于 2011-12-2 00:50:08 | 显示全部楼层
原帖由 zahlen 于 2011-12-2 00:48 发表
前面我向你提了个问题, 你一直没有回答, 可我还是希望得到答案, 所以这次我再问一次.

如果战略资源和你设想的1分不在一起, 你怎么处理?
比如在首都的左下方有马, 你快速造好的移民是在理想的地点开一分呢, 还是圈战略资源呢?


圈战略资源。(本图)
回复 支持 反对

使用道具 举报

发表于 2011-12-2 00:52:01 | 显示全部楼层

回复 #183 nanoprince 的帖子

因为普通资源是经济问题,战略资源是生存问题。
这图的形势比较凶险。

有些图上,周边压力不打,或2分出的快,那么1分可以先圈经济资源
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-2 00:56:23 | 显示全部楼层

回复 #181 nanoprince 的帖子

我前面也测试了工作在猪的结果.
87回合完成移民, 89完成青铜, 科技慢的微乎其微, 但多了一个猪, 节约了一棵树. 我认为更优.

当然你的评价体系中有可能1分出的速度大于天, 科技的差距是决定性的.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-2 01:02:10 | 显示全部楼层
原帖由 nanoprince 于 2011-12-2 00:50 发表


圈战略资源。(本图)



所以我倾向于稳健发展, 移民出的慢, 我可慢慢修路. 对于埃及来说, 马的作用太重要了.
回复 支持 反对

使用道具 举报

发表于 2011-12-2 01:06:34 | 显示全部楼层

回复 #186 zahlen 的帖子

不要忘记,首都周围5-6格内无马的概率还是很高的。不单单是首都有没有马的问题。

所以用了埃及也可能出不了马车。而且这个概率还很大,40-50%左右是有的。

从这个意义上说,马对埃及也没有那么关键。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-2 01:08:11 | 显示全部楼层
原帖由 nanoprince 于 2011-12-2 00:21 发表
哎,你难道用计算错误来证明你得严谨性?

你先检查自己算错在哪里,再来讨论严谨好了...


正是人会犯错, 我才出言谨慎. 我从来不假设我不会犯错.
人有时不但会犯错, 还会犯愚蠢的错误. 比如前面那个马的位置我忘了种田.

但如果这幅埃及图首都中心格右上方有棵树, 你的结论是什么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-2 01:12:41 | 显示全部楼层

回复 #187 nanoprince 的帖子

我仔细的读过CvGame::createBarbarianCities(), 每一行都研究过.
所以这幅埃及图首都的右下如果不在那里点亮的话, 几乎必然刷出野蛮人城市. 你知道这个潜在收益吗?
回复 支持 反对

使用道具 举报

发表于 2011-12-2 02:11:08 | 显示全部楼层
讨论问题是为了进步,不是为了争胜负。我看civ这个毛病有点难改,上次sos来发战报,结果战报才开了个头,已经吵翻天了
civ聪明人多,是个好事,导致自负的人也多,这就不见得多好了。
其实我看nano大和zahlen兄都是高手,都客气一点也无妨,谁也吃不了亏。
另外,我倒是觉得新思路很重要,在这一点上,sos大和nano大是我特别钦佩的地方。
创新总是最难的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-2 02:18:36 | 显示全部楼层
原帖由 nanoprince 于 2011-12-2 00:08 发表
在涨到3人口的同时,非常稳妥的出了4个棒子。
全方位点灯,保证前期100%安全。

而且最后一个棒子的完成,只在到3人口的下一回合,相当合拍。几乎没有一点浪费。

关于畜牧和移民的节拍,看来我第一眼的感 ...


而且你这个87回合完成畜牧, 也不是必然的.
工人城市人口同样的操作, 但棒子不同的移动轨迹, 有时就得第88回合才能完成畜牧.
这是随机数导致的AI科技路线的变化, 从而让TECH_COST_TOTAL_KNOWN_TEAM_MODIFIER的影响发生了变化.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-2 02:38:04 | 显示全部楼层

回复 #190 ila100 的帖子

学术讨论是有益的, 只要不出现人身攻击, 激烈些反而更能促进进步.
兼容并包不是和稀泥.

另外说明我不是高手, 从前面的截图你就能看出我是个奇迹控, 典型的低水平玩家. 操作还很差, 能在高难度下混也就是凭借着我对游戏的机制还有些了解.
回复 支持 反对

使用道具 举报

发表于 2011-12-2 03:22:40 | 显示全部楼层
CIV4作为一款可以联机的游戏,这种争执不下的讨论简直弱爆了,直接互爆10次不就好了?
回复 支持 反对

使用道具 举报

发表于 2011-12-2 04:24:14 | 显示全部楼层
原帖由 zahlen 于 2011-12-2 01:12 发表
我仔细的读过CvGame::createBarbarianCities(), 每一行都研究过.
所以这幅埃及图首都的右下如果不在那里点亮的话, 几乎必然刷出野蛮人城市. 你知道这个潜在收益吗?


潜在收益?啥意思?
吃小野城?
回复 支持 反对

使用道具 举报

发表于 2011-12-2 04:26:57 | 显示全部楼层
原帖由 nanoprince 于 2011-12-1 23:33 发表
为什么这么多回帖对这句话有异议呢,难道是因为语气问题?


本来就是游戏。这么说不是很有士气,也很有娱乐性么?

球迷常说“XX球队必胜”
你见过有人费神去评论“XX球队必胜”这句话说的不合适??



当然,你要这么说,纯属为了士气及娱乐性,自然无妨。
不过当别人提出异议时,你还会坚持这么说与否,也很重要。
回复 支持 反对

使用道具 举报

发表于 2011-12-2 04:30:23 | 显示全部楼层
原帖由 nanoprince 于 2011-12-1 23:29 发表
对的。最优解和随机数没有关系。


譬如买骰子。单个骰子为例。

买对大小1赔1,买对数字1赔5.

那么买大,或买小的策略是最优解。


虽然随机数可能让最优解的结果不最优,但不影响买大,或买小的策略是最优解这一点定论


概率的分布情况也很重要。
你这里默认了骰子出现各个数字的概率相等。但如果不相等呢,比如骰子灌铅了。

概率分布会影响策略。而在现在文明4的情况中,随机的游戏,很多概率的分布你不知道。比如你不知道有多少概率某一个点有马这个资源。
那么你就很难下结论。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-2 04:36:28 | 显示全部楼层
原帖由 nanoprince 于 2011-12-2 00:50 发表


圈战略资源。(本图)


首先告诉你一个结论:
不先研究揭示资源的科技, 我也能提前知道: 和首都重叠的格子不算, 你的1分能有未知资源的也就是首都的玉米的右1格下2格处. 而那个格子恰好在首都2次文化扩张圈内.
所以依靠你的理想1分是不能带来战略资源的.

既然你也选择优先圈战略资源, 那么速出1分的收益就变小了. 青铜开局的优点被削弱了.

[ 本帖最后由 zahlen 于 2011-12-2 04:44 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-2 04:36:43 | 显示全部楼层
现在我来证明为何我能预判资源.

这幅埃及图是盘古, 那么它用的是Pangaea.py来生成地图, 查阅此脚本的addBonusType函数


  1. def addBonusType(argsList):
  2.         [iBonusType] = argsList
  3.         gc = CyGlobalContext()
  4.         type_string = gc.getBonusInfo(iBonusType).getType()

  5.         if (CyMap().getCustomMapOption(2) == 1):
  6.                 if (type_string in balancer.resourcesToBalance) or (type_string in balancer.resourcesToEliminate):
  7.                         return None # don't place any of this bonus randomly
  8.                
  9.         CyPythonMgr().allowDefaultImpl() # pretend we didn't implement this method, and let C handle this bonus in the default way
复制代码


这说明它用的是默认的资源添加方式, 即使用的是
void CvMapGenerator::addBonuses()的后半段


  1. void CvMapGenerator::addBonuses()
  2. {
  3.         PROFILE("CvMapGenerator::addBonuses");
  4.         gDLL->NiTextOut("Adding Bonuses...");

  5.         if (gDLL->getPythonIFace()->callFunction(gDLL->getPythonIFace()->getMapScriptModule(), "addBonuses", NULL))
  6.         {
  7.                 if (!gDLL->getPythonIFace()->pythonUsingDefaultImpl())
  8.                 {
  9.                         return; // Python override
  10.                 }
  11.         }

  12.         for (int iOrder = 0; iOrder < GC.getNumBonusInfos(); iOrder++)
  13.         {
  14.                 for (int iI = 0; iI < GC.getNumBonusInfos(); iI++)
  15.                 {
  16.                         gDLL->callUpdater();
  17.                         if (GC.getBonusInfo((BonusTypes)iI).getPlacementOrder() == iOrder)
  18.                         {
  19.                                 CyArgsList argsList;
  20.                                 argsList.add(iI);
  21.                                 if (!gDLL->getPythonIFace()->callFunction(gDLL->getPythonIFace()->getMapScriptModule(), "addBonusType", argsList.makeFunctionArgs()) || gDLL->getPythonIFace()->pythonUsingDefaultImpl())
  22.                                 {
  23.                                         if (GC.getBonusInfo((BonusTypes)iI).isOneArea())
  24.                                         {
  25.                                                 addUniqueBonusType((BonusTypes)iI);
  26.                                         }
  27.                                         else
  28.                                         {
  29.                                                 addNonUniqueBonusType((BonusTypes)iI);
  30.                                         }
  31.                                 }
  32.                         }
  33.                 }
  34.         }
  35. }
复制代码


你会发现其核心是addUniqueBonusType, addNonUniqueBonusType这两个函数
先看void CvMapGenerator::addUniqueBonusType(BonusTypes eBonusType), addNonUniqueBonusType的情形类似.
这个函数很长, 我只引用关键部分:
if (pBestArea == pPlot->area())
{
    if (canPlaceBonusAt(eBonusType, pPlot->getX_INLINE(), pPlot->getY_INLINE(), bIgnoreLatitude))
    {
        pPlot->setBonusType(eBonusType);

        for (int iDX = -(pBonusInfo.getGroupRange()); iDX <= pBonusInfo.getGroupRange(); iDX++)
        {
            for (int iDY = -(pBonusInfo.getGroupRange()); iDY <= pBonusInfo.getGroupRange(); iDY++)
            {
                if (GC.getMapINLINE().getNumBonuses(eBonusType) < iBonusCount)
                {
                    CvPlot* pLoopPlot        = plotXY(pPlot->getX_INLINE(), pPlot->getY_INLINE(), iDX, iDY);

                    if (pLoopPlot != NULL && (pLoopPlot->area() == pBestArea))
                    {
                        if (canPlaceBonusAt(eBonusType, pLoopPlot->getX_INLINE(), pLoopPlot->getY_INLINE(), bIgnoreLatitude))
                        {
                            if (GC.getGameINLINE().getMapRandNum(100, "addUniqueBonusType") < pBonusInfo.getGroupRand())
                            {
                                pLoopPlot->setBonusType(eBonusType);
                            }
                        }
                    }
                }
            }
        }
    }
}


引人注目的是canPlaceBonusAt, 这个函数如果返回false的话, 显然是无法放置资源的.
那让我们转向
bool CvMapGenerator::canPlaceBonusAt(BonusTypes eBonus, int iX, int iY, bool bIgnoreLatitude)
这个函数也很长, 我再次只引用关键部分:
for (iI = 0; iI < NUM_DIRECTION_TYPES; iI++)
{
    pLoopPlot = plotDirection(iX, iY, ((DirectionTypes)iI));

    if (pLoopPlot != NULL)
    {
        if ((pLoopPlot->getBonusType() != NO_BONUS) && (pLoopPlot->getBonusType() != eBonus))
        {
            return false;
        }
    }
}

这说明当一个资源的周围8格不可能有其它种类的资源.
有人或许说我印象中不是这样啊.
答案很简单, 要么用的是其它地图脚本, 那里面用了特殊的资源添加方式. 要么是异常出现在首都范围内.
首都21格有特殊的资源添加方法, 对于盘古地图来说, 就是normalizeAddFoodBonuses()和normalizeAddExtras(), 这是其它话题了, 不展开了.

如果你观察nanoprince兄的1分, 根据上述结论, 只有首都的玉米的右1格下2格处有可能放置资源. 而那个格子恰好在首都2次文化扩张圈内.
所以是他的1分是不能带来战略资源的.

[ 本帖最后由 zahlen 于 2011-12-2 16:38 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2011-12-2 04:44:14 | 显示全部楼层
讨厌长篇大论的讨论。

不讨论两点:
1. 不肯定首都那一格空地是铜铁马铝铀煤还是什么都没有,个人经验认为马的概率不超过30%。很久不打,经验不可靠。
2. 一分城址非常明显。速移民优。开局三人口出移民最快。

之后考虑几点:
1. 坐黄山工人早于畜牧。
2. 首都早期食物盈余,可以损失一些食物先开黄金追求瓶子。

移民出来后畜牧应该要好,但是不需要太介怀。一来一分城址很好,二来首都产能够,二分出得也快。

综上,采矿=>青铜=>畜牧。
回复 支持 反对

使用道具 举报

发表于 2011-12-2 04:57:41 | 显示全部楼层

回复 #198 zahlen 的帖子

怎么说捏

战略资源能完完全全改变一局,尤其是早期的打法。
但片面追求这个是不靠谱滴。
一是不一定有。
二是有也不一定在适合开城的地方。

所以,一分这么好的地方,抢了再说。
除非邻居特别近,一分要开在要害圈地。
但是有创新,怕什么呢?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 22:41

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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