方针
这是本文档旧的修订版!
方针
孔明传中,存在5种方针,分别为
- 前往目标/目的地
- 进攻
- 禁止移动
- 防御
- 逃向目标/目的地
其中,前往和逃向的区别在于前往可以进行主动攻击,而逃向不能主动攻击。
方针回合: ; 按我军->敌军的顺序 if 敌军回合 处理武将恢复 ; 敌军先减少兵数再恢复 计算行动顺序 ; 优先级: 位于可回复地形 (及时空出来给友军回复) > 兵数过低 (杂兵<=20%, 武将<=40%) > 其他 处理武将方针 处理武将方针: if 方针目标已撤退 方针设为进攻 if 未混乱 初始化权重表 记录可攻击对象 if 兵数过低 且 方针非禁止移动 W[可回复地形] += 50 ; 倾向于去回血 if 可达自家主将 设置移动权重(主将位置) 搜索进攻目标 else 设置默认进攻目标 match 方针 case 前往目标/目的地 if 无目标 前往目的地 elif 目标方针有目的地 逃向目的地 = 目标目的地 ; 不会占住目标的目的地, 防止目标卡死 if 目标是当次可达的优先对象 设置范围权重(目标位置, 20) 搜索进攻目标 else 设置范围权重(目标位置, 10) if 可达目标 设置移动权重(目标位置) 搜索进攻目标 else 设置默认进攻目标 case 进攻 设置默认进攻目标 case 禁止移动 搜索进攻目标 case 防御 if 移动范围内存在优先对象 搜索进攻目标 else 停在原地 移动 if 方针为前往/逃向目的地 且 到达目的地 方针设为防御 if 可进攻 if 未使用策略 攻击 else 策略 if 策略为施策 ; BUGGY: 应为回归 给当前军队一次重新遍历机会 检查并行事件 ; 优先级: 位置 > 区域 > 单挑 > 条件 > 自由模式随机单挑 检查敌军全部撤退 设置默认进攻目标: 设置移动权重(当次可达的优先对象) 搜索进攻目标 设置移动权重: if 能到达目标位置 设置范围权重(目标位置, 20) else 设置范围权重(目标位置, 10) 设置范围权重(目标位置, w): if w > 8 且 目标位置无权重 且 目标位置无其他人 W[目标位置] += w if 非砲车 设置范围权重(目标位置四周, w > 10 ? w - 10 : w - 1) 设置进攻目标: w = W[目标位置] if 目标位置无其他人 且 可进攻 w_a = 设置攻击目标 if 可用策略 w_s = 设置策略目标 w += max(w_a, w_s) w += 地形权重 ; 村5, 寨6, 兵营4, 城8, 关7, BUGGY: 当前位于城门, 权重+6 if 原地 且 w_a = 0 ; 防止不打人时乱跑 w += 1 if 困难模式 且 当前四周有友军 w -= 1 if 目标位置是逃向目的地 w = 0 W[目标位置] = w if w_max < w 更新w_max, 设置进攻目标 设置攻击/策略目标: each 可攻击对象B if w < 计算目标攻击/策略权重(B) 更新w, 设置攻击/策略目标 return w 计算目标攻击权重: if 可以秒杀 w = B为象使/毒蛇使 ? 80 : 75 elif 伤害 > B.最大兵数 * 0.1 w = B为象使/毒蛇使 ? 20 : 16 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) w = 可以秒杀 ? 80 : 20 if 策略为物见/密侦/谍报 且 B.策略 != 0 且 A.智力 >= B.智力 * 0.5 w = 17 if 策略为压迫/威压 且 B.攻击非↓↓ 且 A.智力 >= B.智力 * 2 / 3 w = 18 if 策略为骂声/挑衅 且 B.防御非↓↓ 且 A.智力 >= B.智力 * 2 / 3 w = 19 if 策略为伪情报/伪兵/牵制/足止/封策 且 B未处于相应状态 且 B.兵数 >= 40% if 策略为伪情报/伪兵 且 A.智力 >= B.智力 * 0.5 w = 22 if 策略为牵制 且 B.攻击速度 > 7 w = 23 if 策略为封策 且 B为文官 w = 24 if 策略为足止 w = 25 if 策略为补给/大补给/全补给/援军/大援军/输送/大输送/助言/献策/施策 if 策略为补给/大补给/全补给/援军/大援军/输送/大输送 且 B.兵数 <= 40% w = 策略回复权重(类型=兵数) if 策略为助言/献策/施策 且 B.策略 <= 40% ; BUGGY: 此处的MP和MMP均只取最低字节 w = 策略回复权重(类型=策略) if B为物资队 或 对自身使用 return 0 if 策略为奋起/鼓舞/坚固/强阵 且 移动范围内存在优先对象 且 B.攻击/防御非↑↑ if B.攻击/防御未弱化 if 非困难模式 或 (策略为奋起/鼓舞 且 B为文官) 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: 源位置 = 目标位置时, 搜索操作失败
方针.1745025091.txt.gz · 最后更改: 2025/04/19 02:11 由 dangfer