| | |
|
组别 | 百姓 |
级别 | 在野武将 |
功绩 | 0 |
帖子 | 11 |
编号 | 544597 |
注册 | 2021-5-11 |
| |
| | |
|
|
|
原帖由 漫漫苦短 于 2025-2-6 19:19 发表
我也看着孝直的AI算法进行这方面研究的,我想你应该大致对常见的几种AI类型和行动有所了解,所以就简单地对你的推论进行分析。
你是分析大部分没有问题,但“堵住了桥头”需要重新斟酌一下,应该要换一种说法,也就是“堵住了 ... 感谢漫漫苦短兄的提示! 其实, 我也正是近期看到了您关于英杰传代码的研究, 才又提到了相关问题. 我对汇编代码一窍不通, 所有相关机制和走位, 参考的都是龙吟、孝直、周瑜、月亮等几位前辈的研究成果. 正是看到您近期开始研究汇编代码, 才希望能有机会解答当前以及几年前心中的疑惑.
孝直的移动型 AI 算法帖子 (https://www.xycq.org.cn/forum/viewthread.php?tid=220902), 已经把机制描述得较为详尽, 并给出了伪代码. 但可能是考虑到源码的复杂和晦涩, 孝直兄已经将其翻译成了可读语言. 在这过程中, 难免有一些边缘情况是中文描述/伪代码没法覆盖的. 仅就本帖的例子而言, 它和原帖中 “以(A)为中心,如果移动范围+攻击范围内有敌人,则按照AI=3(休息)的方式操作” 的描述相关, 对应着伪代码 “最近敌代码=search(当前(x,y),8,移动力,(-1,-1))” 的部分.
我的第一感觉是, 在搜索移动+攻击范围内最近敌时, 确实没考虑当前位置. 并且, 在搜索不限范围的最近敌时, 也没有考虑当前位置. 目前在信都之战能够复现这一现象的位置有 3 个 (这里就不贴图了), 是桥上的两个位置, 和桥右边的位置. 这些位置的共同点是, 当敌人紧挨我方时, 无法以任何移动>=1的方式找到任一个可以攻击到我方的位置 (无所谓这一新位置是否已被其他敌方占位).
但这样的解释也诚如仁兄所说, 无法令人感到满意. 类似的“一夫当关, 万夫莫开”地形并不难找. 我会再找机会验证类似的猜想. 但需注意, 可能需要同时验证拓扑结构为环形的地图, 和一格可以卡住另半张地图的地形. 因为后一种情况下, 别的我方人员不可能是最近敌, 但显然 (?) 敌人不会原地不动任我方卡住 (需要找例子证实).
这个现象让我联想到 2 个问题 (和本问题可能无关). 一个是敌人被围时, 只能停在原地, 但不会用策略, 并且按固定的攻击顺序攻击我方. 另一个是移动时的亮格和暗格 (https://www.xycq.org.cn/forum/thread-305686-1-2.html) (另注, 这游戏还真的有城墙地形, 不过不是武将, 就是地形 ) 他们的共同点是, 明明貌似可以沿用简单的机制 (被围了就直接计算行动价值; 使用相邻格子是否有敌军来设置 ZOC ), 但结果却是必须通过打补丁的形式来描述行动机制. 这些机制的形成, 可能是游戏创作者的刻意为之; 但我相信应该有较为简明的实现 (尤其是暗格和亮格的机制: 有容易的地形, 有难的地形, 容易的地形是停止格或者只有一本道的出路时, 难的地形就不能多走; 有必要搞这么复杂吗...?). 一个另外和原地机制相关的例子是, 任何情况下, 停留在原地的行动价值+1. 亦即, 若原地的原始行动价值为 x, 移动后的行动价值为 x+1, 则敌方总是会停在原地.
因此回到本问题, 我相信关于移动型 AI 的算法, 还有些细节可以完善. 例如, 在孝直的贴子中, search 函数既用来寻找最近敌, 又用来判断目标坐标是否可达. 关于可达性, 使用上右下左确实没问题. 但关于 (叠加攻击范围后的) 最近敌判断, 其实是依赖兵种的攻击范围 (或者, 也包括策略范围?). 我在原帖的 15 楼也给了一个使用了攻击范围判断最近敌后, 因为下邳桥头的特殊地形导致攻击最近敌类型的敌军原地休息的例子.
[ 本帖最后由 clubjack 于 2025-2-7 00:38 编辑 ]
|
|
|