Board logo

标题: DOS版三国志英杰传的研究心得——柒 [打印本页]

作者: 漫漫苦短    时间: 2026-9-9 19:19     标题: DOS版三国志英杰传的研究心得——柒

本来是不打算先开始讲这个章节的(本来这章也是打算系统介绍英杰传中的行动结算系统(道具和策略)),但是上个月看到孝直前辈在他的英杰传移动型AI算法对我的一句回复:

QUOTE:
原帖由 阿尔法孝直 于 2026-8-19 21:23 发表
已经基本上分析完了,近期(估计是这个月底或下个月)会发布比较完整的版本。

于是这段时间就十分期待他出一个全面的分析,这样既可以从他的研究中学到了不少理论方法,也能加固自己的研究,同时如果有疏漏也可以补遗,但是等了不少天还是没等到,于是我想先开个头,就当成是个抛砖引玉。
本章的主要内容“战场地图和路径搜索”,自然是首先讲战场地图,再讲另一部分的路径搜索,但是目前论坛中突然很活跃,那么各位爱好者是否对DOS版英杰传的路径搜索有一定的研究?对英杰传研究水平不同的各色人等都在讨论着极限练级相关话题,通过路径搜索和AI行动有较高的了解,才能做到更好地利用敌军的走位实现更高效率地获得经验,而不是只能实现简单的仿打,对其中不一样的情况进行简单的变通,如果要达成更高的目标,就算是纸上谈兵也得懂得兵法之道吧。

目录
关于(坐标)行动价值图实际上是这些表格中最特殊的,也是其中最难讲诉清楚的,但是游戏中计算行动价值的过程与很多人理解的不一样,正常的想法是部队每搜索到一个路径节点,就计算该坐标的行动价值,最终取其中最大的行动价值的坐标和行动目标,然而实际上行动价值是先将整个表初始化为0,然后再将这个表的某些特殊坐标的[x][y]设为一个行动价值,然后再进行路径搜索,将该坐标的行动价值,加上(坐标)行动价值图中对应节点坐标的数值。

真正的行动价值的公式是

总行动价值 = 坐标价值 + 地形价值 + 行动价值

坐标价值重要吗?不重要,因为大部分情况下都不会对敌军行动产生影响,只需要会计算行动价值,就能理解AI行动的逻辑,而有的情况下又很重要,很多敌军的诡异现象实际上就是因为其中的坐标价值导致出现了难以理解的行动,而且很多看似正常的行动,实际上都是因为坐标价值导致的,又或者说有些敌军明明能有多种行动的可能,但由于坐标价值导致没有出现多种行动的情况。

这节先把这些图与英杰传移动型AI算法中的对应关系简单介绍一下,这样应该有助于理解其中的内容,下节开始在详细分析其中的算法逻辑。

以下内容全部地形图部队战场代码图有关:

路径搜索图有关:

QUOTE:
定义:        (A)部队当前的横纵坐标;
        (B)部队的目标坐标;
        (C)部队本回合的目标坐标。

若AI=0(移动)或4(无攻击移动):

1、如果存在仇人,则取仇人的坐标为目标坐标(B)。
2、在移动范围内,查找最近敌的战场代码。查找方法为:
        2.1、以(A)为中心,将所有的坐标都标上其消耗的总移动力,移动范围之外的标记-1
        2.2、令x=0~移动力的循环,每次循环,都按逐行扫描的方式检查该坐标的移动力总消耗是否等于x,如果是,就按上右下左的顺序检查该格的周围四格是否有敌人,若有,则结束查找,返回该敌人的战场代码。
        2.3、如果查找不到敌人,则返回-1。

(坐标)行动价值图有关:

QUOTE:
3、如果最近敌恰好为仇人,那么
        3.1、若(B)没人则(B)的行动价值+30;
        3.2、以(B)为中心,周围4格中属于(A)为中心的移动范围内的格子,行动价值+30(若(B)没人则只+10);
        3.3、以(B)为中心,上2右2下2左2以及斜四格中属于(A)为中心的移动范围的格子,行动价值+10(若(B)没人则不加);

反向路径搜索图有关:

QUOTE:
4、如果最近敌不是仇人或没有仇人或之前返回-1,则
        4.1、以(B)作为中心坐标,移动力无限,计算战场上所有坐标的总消耗移动力;
        4.2、如果发现(B)到(A)的路线被封堵(注意是(B)到(A)不是(A)到(B),即以无限的移动力经过一个回合的移动无法到达(A),或者(B)是不可移动地形),则本回合采用AI=1(攻击最近敌)的方式操作,否则转下一步。
        4.3、取(C)=(A);
        4.4、以(C)作为中心坐标,按上右下左的顺序查找周围四格中总消耗移动力最小的格子,并用那个格子取代(C)作为新的(C);
        4.5、重复4.4,直到移动力消耗完毕或者(C)=(B)为止。

(坐标)行动价值图有关:

QUOTE:
        4.6、若(C)没人则(C)的行动价值+30;
        4.7、以(C)为中心,周围4格中属于(A)为中心的移动范围内的格子,行动价值+30(若(C)没人则只+10);
        4.8、以(C)为中心,上2右2下2左2以及斜四格中属于(A)为中心的移动范围的格子,行动价值+10(若(C)没人则不加);

路径搜索图有关:

QUOTE:
若AI=1(攻击最近敌)

1、以(A)为中心,如果移动范围+攻击范围内有敌人,则按照AI=3(休息)的方式操作;
2、以(A)为中心,无限移动力,如果移动范围+攻击范围内没有敌人,则本回合不动,也不用策略,否则转第3步;
3、查找最近敌坐标
        3.1、以(A)为中心,将所有的坐标都标上其消耗的总移动力,移动范围之外的标记-1
        3.2、令x=0~移动力的循环,每次循环,都按逐行扫描的方式检查该坐标的移动力总消耗是否等于x,如果是,就按上右下左的顺序检查该格的周围四格是否有敌人,若有,则结束查找,返回该敌人的战场代码。

反向路径搜索图有关:

QUOTE:
        3.3、(C)取为该敌人的坐标
        3.4、以(B)作为中心坐标,移动力无限,计算战场上所有坐标的总消耗移动力;
        3.5、如果发现(B)到(A)的路线被封堵(即以无限的移动力经过一个回合的移动无法到达(A),或者(B)是不可移动地形),则本回合不动也不使用策略,否则转下一步。
        3.6、取(C)=(A);
        3.7、以(C)作为中心坐标,按上右下左的顺序查找周围四格中总消耗移动力最小的格子,并用那个格子取代(C)作为新的(C);
        3.8、重复3.7,直到移动力消耗完毕或者(C)=(B)为止。

(坐标)行动价值图有关:

QUOTE:
        3.9、若(C)没人则(C)的行动价值+30;
        3.10、以(C)为中心,周围4格中属于(A)为中心的移动范围内的格子,行动价值+30(若(C)没人则只+10);
        3.11、以(C)为中心,上2右2下2左2以及斜四格中属于(A)为中心的移动范围的格子,行动价值+10(若(C)没人则不加);

不过我不打算按照这篇文章的以同样的方式介绍AI行动,通过这几张图的交互,希望能更加有效理解路径搜索和AI行动的关系。

[ 本帖最后由 漫漫苦短 于 2026-9-9 21:09 编辑 ]
作者: 阿尔法孝直    时间: 2026-9-10 01:06

本来这几天打算出的,无奈这几天突然冒出一大堆事情导致天天加班,没办法,这两天我先写一个大致的框架吧……




欢迎光临 轩辕春秋文化论坛 (http://www.xycq.org.cn/forum/) Powered by Discuz! 5.0.0