kmd:方针
差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版 | |||
kmd:方针 [2025/05/09 16:44] – 移除 - 外部编辑 (未知日期) 127.0.0.1 | kmd:方针 [2025/05/09 16:44] (当前版本) – ↷ 页面方针被移动至kmd:方针 dangfer | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== 方针 ====== | ||
+ | |||
+ | 孔明传中,存在5种方针,分别为 | ||
+ | - 前往目标/ | ||
+ | - 进攻 | ||
+ | - 禁止移动 | ||
+ | - 防御 | ||
+ | - 逃向目标/ | ||
+ | |||
+ | 其中,前往和逃向的区别在于前往可以进行主动攻击,而逃向不能主动攻击。 | ||
+ | |||
+ | < | ||
+ | 方针回合: | ||
+ | if 敌军回合 | ||
+ | 处理武将恢复 ; 敌军先减少兵数再恢复 | ||
+ | 计算行动顺序 ; 优先级: 位于可回复地形 (及时空出来给友军回复) > 兵数过低 (杂兵< | ||
+ | 处理武将方针 | ||
+ | |||
+ | 处理武将方针: | ||
+ | if 方针目标已撤退 | ||
+ | 方针设为进攻 | ||
+ | if 未混乱 | ||
+ | 初始化权重表 | ||
+ | if 兵数过低 且 方针非禁止移动 | ||
+ | W[可回复地形] += 50 ; 倾向于去回血 | ||
+ | if 可达自家主将 | ||
+ | 设置移动权重(主将位置) | ||
+ | 搜索进攻目标 | ||
+ | else | ||
+ | 搜索缺省进攻目标 | ||
+ | match 方针 | ||
+ | case 前往目标/ | ||
+ | if 无目标 | ||
+ | 前往目的地 | ||
+ | elif 目标方针有目的地 | ||
+ | 逃向目的地 = 目标目的地 ; 不会占住目标的目的地, | ||
+ | if 存在目标 且 移动范围内可被攻击 | ||
+ | 设置范围权重(目标位置, | ||
+ | 搜索进攻目标 | ||
+ | else | ||
+ | 设置范围权重(目标位置, | ||
+ | if 可达目标 | ||
+ | 设置移动权重(目标位置) | ||
+ | 搜索进攻目标 | ||
+ | else | ||
+ | 搜索缺省进攻目标 | ||
+ | case 进攻 | ||
+ | 搜索缺省进攻目标 | ||
+ | case 禁止移动 | ||
+ | 搜索进攻目标 | ||
+ | case 防御 | ||
+ | if 移动范围内可被攻击 | ||
+ | 搜索进攻目标 | ||
+ | else | ||
+ | 停在原地 | ||
+ | 移动 | ||
+ | if 方针为前往/ | ||
+ | 方针设为防御 | ||
+ | if 可进攻 | ||
+ | if 未使用策略 | ||
+ | 攻击 | ||
+ | else | ||
+ | 策略 | ||
+ | if 策略为施策 ; BUGGY: 应为回归 | ||
+ | 给当前军队一次重新遍历机会 | ||
+ | 检查并行事件 ; 优先级: 位置 > 区域 > 单挑 > 条件 > 自由模式随机单挑 | ||
+ | 检查敌军全部撤退 | ||
+ | |||
+ | 搜索缺省进攻目标: | ||
+ | if 移动范围内可被攻击 | ||
+ | 搜索进攻目标 | ||
+ | elif 场上有敌军 且 可达 | ||
+ | 设置移动权重(最近的敌军) | ||
+ | 搜索进攻目标 | ||
+ | else | ||
+ | 不动 | ||
+ | |||
+ | 设置移动权重: | ||
+ | if 能到达目标位置 | ||
+ | 设置范围权重(目标位置, | ||
+ | else | ||
+ | 设置范围权重(最接近目标位置, | ||
+ | |||
+ | 设置范围权重(目标位置, | ||
+ | if w > 8 且 目标位置未设置权重 且 目标位置无其他人 | ||
+ | W[目标位置] += w | ||
+ | if 非砲车 | ||
+ | 设置范围权重(目标位置四周, | ||
+ | |||
+ | 搜索进攻目标: | ||
+ | w = W[目标位置] | ||
+ | if 目标位置无其他人 且 可进攻 | ||
+ | w_a = 搜索攻击目标 | ||
+ | if 可用策略 | ||
+ | w_s = 搜索策略目标 | ||
+ | w += max(w_a, w_s) | ||
+ | w += 地形权重 ; 村5, 寨6, 兵营4, 城8, 关7, BUGGY: 当前位于城门, | ||
+ | if 原地 且 w_a = 0 ; 防止不打人时乱跑 | ||
+ | w += 1 | ||
+ | if 困难模式 且 当前四周有友军 | ||
+ | w -= 1 | ||
+ | if 目标位置是逃向目的地 | ||
+ | w = 0 | ||
+ | W[目标位置] = w | ||
+ | if w_max < w | ||
+ | 更新w_max, | ||
+ | |||
+ | 搜索攻击/ | ||
+ | each 可攻击对象B | ||
+ | if w < 计算目标攻击/ | ||
+ | 更新w, 设置攻击/ | ||
+ | return w | ||
+ | |||
+ | 计算目标攻击权重: | ||
+ | if 可以秒杀 | ||
+ | w = B为象使/ | ||
+ | elif 伤害 > B.最大兵数 * 0.1 | ||
+ | w = B为象使/ | ||
+ | elif B.HP <= 40% | ||
+ | w = 16 | ||
+ | elif 方针不为进攻 或 为粮草队/ | ||
+ | w = 0 | ||
+ | if 困难模式 且 B混乱 | ||
+ | w += 8 | ||
+ | if w != 0 且 B非杂兵 | ||
+ | w += B为主将 ? 10 : 6 | ||
+ | if w < 75 且 为文官 | ||
+ | return 0 ; 等价于仅在能秒杀时攻击 | ||
+ | if 为象使/ | ||
+ | w += 策略影响权重(周围目标, | ||
+ | if 困难模式 且 能被攻击到 | ||
+ | w -= 1 | ||
+ | return w | ||
+ | |||
+ | 文官: 军师, 名军师, 大军师, 粮草队, 物资队, 军乐队, 幻术师 | ||
+ | |||
+ | 策略影响权重: | ||
+ | if 无目标 | ||
+ | return -4 | ||
+ | each 目标B | ||
+ | if (类型=回复 且 B.兵数不满) 或 (类型=攻击) 或 (类型=攻击强化 且 B.攻击非↑↑) | ||
+ | w += 10 | ||
+ | if 类型=防御强化 且 B.防御为↑↑ ; BUGGY: 逻辑写反了 | ||
+ | w += 10 | ||
+ | return w | ||
+ | |||
+ | 计算目标策略权重: | ||
+ | if 简单模式 | ||
+ | if 策略为物见/ | ||
+ | return 0 | ||
+ | if 策略为火计 且 兵种为步兵/ | ||
+ | return 0 | ||
+ | if 普通模式 且 策略为对策/ | ||
+ | return 0 | ||
+ | if 策略为火/ | ||
+ | if (策略不为火计 或 不下雨) 且 (A.智力 >= B.智力 * 0.4) (factor: 5) | ||
+ | w = 可以秒杀 ? 80 : 20 | ||
+ | if 策略为物见/ | ||
+ | w = 17 | ||
+ | if 策略为压迫/ | ||
+ | w = 18 | ||
+ | if 策略为骂声/ | ||
+ | w = 19 | ||
+ | if 策略为伪情报/ | ||
+ | if 策略为伪情报/ | ||
+ | w = 22 | ||
+ | if 策略为牵制 且 B.攻击速度 > 7 | ||
+ | w = 23 | ||
+ | if 策略为封策 且 B为文官 | ||
+ | w = 24 | ||
+ | if 策略为足止 | ||
+ | w = 25 | ||
+ | if 策略为补给/ | ||
+ | if 策略为补给/ | ||
+ | w = 策略回复权重(类型=兵数) | ||
+ | if 策略为助言/ | ||
+ | w = 策略回复权重(类型=策略) | ||
+ | if B为物资队 或 对自身使用 | ||
+ | return 0 | ||
+ | if 策略为奋起/ | ||
+ | if B.攻击/ | ||
+ | if 非困难模式 或 (策略为奋起/ | ||
+ | return 0 | ||
+ | if 策略为奋起/ | ||
+ | w = 12 | ||
+ | if 策略为坚固/ | ||
+ | w = 11 | ||
+ | else | ||
+ | if 策略为奋起/ | ||
+ | w = 29 | ||
+ | if 策略为坚固/ | ||
+ | w = 27 | ||
+ | if B.攻击/ | ||
+ | w += 2 | ||
+ | if 对自己使用 | ||
+ | w -= 1 | ||
+ | if 策略为施疗 | ||
+ | if B混乱 | ||
+ | w = 32 | ||
+ | if B兵数减少 | ||
+ | w = 31 | ||
+ | if B攻速↓ | ||
+ | w = 27 | ||
+ | if B移动↓ | ||
+ | w = 26 | ||
+ | if 策略为对策 且 B未处于对策状态 且 可攻击到敌军 | ||
+ | w = 13 | ||
+ | if 策略为回归 且 B已行动完毕 | ||
+ | w = 0 ; 永不使用 | ||
+ | if 复数策略 | ||
+ | w += 策略影响权重(周围目标) | ||
+ | if w != 0 且 B非杂兵 | ||
+ | w += B为主将 ? 10 : 6 | ||
+ | return w | ||
+ | |||
+ | 策略回复权重: | ||
+ | if 类型=兵数 | ||
+ | if 能回满 | ||
+ | w = 32 | ||
+ | if 回复值 >= B.兵数 * 5 / 3 ; BUGGY: 计算回复值时设置上限为$\Delta$, | ||
+ | w -= 4 | ||
+ | if B.兵数 <= 20% | ||
+ | w += 4 | ||
+ | if 类型=策略 | ||
+ | w = 28 | ||
+ | BUGGY: 此处直接进行了策略回复 (意图为获取回复的策略值, | ||
+ | if 能回满 | ||
+ | w = 30 | ||
+ | if 回复值 >= B.策略 * 5 / 3 | ||
+ | w -= 4 | ||
+ | if B.策略 <= 20% | ||
+ | w += 4 | ||
+ | if 对自己使用 | ||
+ | w += 1 | ||
+ | return w | ||
+ | |||
+ | 搜索操作存在BUG: | ||
+ | 移动范围内可被攻击: | ||
+ | 移动范围内可被攻击即遍历自身移动范围时, | ||
+ | </ | ||