跳至内容
三国志Wiki
用户工具
登录
站点工具
搜索
工具
显示页面
修订记录
反向链接
最近更改
媒体管理器
网站地图
登录
>
最近更改
媒体管理器
网站地图
您的足迹:
方针
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
====== 方针 ====== 孔明传中,存在5种方针,分别为 - 前往目标/目的地 - 进攻 - 禁止移动 - 防御 - 逃向目标/目的地 其中,前往和逃向的区别在于前往可以进行主动攻击,而逃向不能主动攻击。 <code> 方针回合: ; 按我军->敌军的顺序 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 移动范围内可被攻击 搜索进攻目标 elif 场上有敌军 且 可达 设置移动权重(最近的敌军) 搜索进攻目标 else 不动 设置移动权重: 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 [x] 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) (factor: 5) w = 可以秒杀 ? 80 : 20 if 策略为物见/密侦/谍报 且 B.策略 != 0 且 A.智力 >= B.智力 * 0.5 (factor: 4) w = 17 if 策略为压迫/威压 且 B.攻击非↓↓ 且 A.智力 >= B.智力 * 2 / 3 (factor: 3) w = 18 if 策略为骂声/挑衅 且 B.防御非↓↓ 且 A.智力 >= B.智力 * 2 / 3 (factor: 3) w = 19 if 策略为伪情报/伪兵/牵制/足止/封策 且 B未处于相应状态 且 B.兵数 >= 40% if 策略为伪情报/伪兵 且 A.智力 >= B.智力 * 0.5 (factor: 4) w = 22 if 策略为牵制 且 B.攻击速度 > 7 w = 23 if 策略为封策 且 B为文官 w = 24 if 策略为足止 w = 25 if 策略为补给/大补给/全补给/援军/大援军/输送/大输送/助言/献策/施策 if 策略为补给/大补给/全补给/援军/大援军/输送/大输送 且 B.兵数 <= 40% w = 策略回复权重(类型=兵数) if 策略为助言/献策/施策 且 B.策略 <= 40% 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: 越过判断忽略了无视ZOC的情况. 移动范围内可被攻击: 在处理开始时, 先算出一张敌军攻击范围图, 每个敌军对应的攻击范围存储其战场id. 移动范围内可被攻击即遍历自身移动范围时, 此图中对应的位置不为无效id. 此行为应当近似实现了移动范围内可攻击到敌军的效果. </code>
方针.txt
· 最后更改: 2025/04/24 04:51 由
dangfer
页面工具
显示页面
修订记录
反向链接
回到顶部