摘要

在这款回合制战斗游戏里,对手的英雄带着什么技能、魔法和装备,玩家通常看不到。但战斗中会留下线索:对方施放了几阶什么学派的法术、扣了多少魔力、用了什么生物能力,这些会出现在战斗日志(Logs)和画面边缘的英雄状态栏(HUD)里。

本实验(内部编号 B131)搭建了一条从截图到推断的链路:截图 → 路由器(把一张截图分给各个读取器的程序)→ 保存每张读取结果 → 状态估计 SE(把读到的观察累积成对局状态和对手构筑的推断)按规则推出候选 → Battle Notes App 的只读“敌方推断”页签显示中文说明。

在 9 局测试中:对方英雄 9/9、对方法术 9/9、规则候选组 9/9、任何一步都没有误报;训练 15 局:法术 20/20、规则候选组 12/14。这些都是助手逐帧精标的已曝光开发局,不是冻结验收集上的盲测,也不是商业游戏的完整真值。

要回答的问题

  1. 只用画面上可见的字面,能推出对方构筑的哪些部分?
  2. 识别错误(读不出、读错)会让推断损失多少?
  3. 在 App 里每按一次截图键,推断什么时候第一次变对?会不会中途误报?

数据与来源

  • 24 局按局截图包,共 305 张原生截图,来自 22 段非冻结录像(每局 8–20 张战斗准备与战斗截图)。
  • 划分沿用既有冻结:训练来源 15 局;开发验证来源 9 局作测试,不用于调参。冻结的 10 月验收录像没有打开。
  • 每帧由助手看像素精审:场景、稳定性、字段、角色和日志。不是独立人工真值,同局多帧不是独立样本。
  • 每局真值汇总:我方英雄、我方屏幕侧、敌方英雄、敌方玩家名、敌方施法/能力/魔力事件(同页重复日志行只计一次)。
  • 方法冻结后,另取一局此前从未使用的开发验证录像做“新鲜测试局”(12 张)。

方法

推断规则(只用可见字面)

可见证据 推出的候选(至少其一)
敌方施放 5 阶 S 学派法术 S 学派魔法技能,或 S 学派魔典
敌方施放“精湛X” 特长为该法术的英雄,或恶魔之心
敌方施放魔法神箭 子技能“魔法神箭”
敌方魔耗 = 目录魔耗 −2,或 ×1.5 等 魔力弹性,或奇术的第二次施法
我方施法同秒敌方恢复 40%/60% 魔力 漩涡长袍
敌方生物用集能能力后敌方英雄恢复 4 魔力 施咒者战术
有部队灭队后恢复 3/选姿态后恢复 3 正义献祭/地下魔力池
敌方英雄使用“…姿态” 种族技能“三态之力”
敌方生物使用主动能力 拥有该能力的生物

“候选组”的意思是“组里至少一项能解释所见”,不是概率;未知不等于没有。规则 ID 加载时逐一核对存在于游戏资料目录。另外输出对方英雄(HUD 头像候选与日志点名)、对方可见部队(行动卡队色)和 HUD 数值。

我方侧来自玩家头像线索,我方英雄来自我方侧 HUD 头像;日志里我方英雄所在行确定我方玩家名,1v1 中另一个玩家名就是对方。

由训练诊断触发的修正(测试局只报告不调参)

位置 问题 修正
日志读取 玩家名乱码或时钟缺括号,同一事件三次读不一致 可选的宽松共识:事件主体三读一致,玩家名取多数(默认严格不变)
日志读取 三读都缺 ];或两读停在收尾引号前 在宽松路径内补时钟括号;较短读数只差收尾 ”。 时取完整读数
战场 有生物面板/魔法书/日志覆盖时跳过英雄头像 覆盖层也读头像
状态估计归属 我方英雄未知时把日志里所有英雄都当敌方 只有我方英雄已知时,另一英雄才归为敌方
状态估计魔耗 同一次魔耗异常被拆成两条“必需”候选;忽略我方“阻碍” 每次观察一组备选;我方阻碍 +20/40% 能解释时不要求敌方有任何物品

评分

预测只用路由器保存的输出;“应有”的规则候选组是同一套规则在精标标签上的输出,所以它衡量的是识别损失,不衡量规则本身是否完整。

设置

三个路由器版本:v2(旧头像、严格日志)、v3(新头像读取 + 宽松日志)、v5(再加覆盖层头像和两类日志修复),全部用最终的推断规则重评。

结果

运行 划分 我方侧 对方英雄 对方法术 找到/真值 多报 规则候选组 找到/应有 多报
v2 测试 9 局 9/9 9/9 9/9 0 9/9 0
v2 训练 15 局 15/15 14/15(1 未知) 11/20 0 4/14 0
v3 测试 9/9 9/9 9/9 0 9/9 0
v3 训练 15/15 15/15 18/20 0 9/14 0
v5 测试 9/9 9/9 9/9 0 9/9 0
v5 训练 15/15 15/15 20/20 0 12/14 0

逐字段(帧级,v2 → v3 → v5):

字段 测试 训练
日志事件行 170 → 183 → 183 / 203 203 → 253 → 254 / 269
对方 HUD 头像(含覆盖层帧) 11 → 14 → 53 / 78 31 → 46 → 136 / 138
我方 HUD 头像 13 → 21 → 72 / 78 23 → 45 → 134 / 138

头像全部 0 错。训练集数字偏乐观,因为头像样例库包含这些训练局本身;测试局从不进样例库,测试数才可比。测试头像的未知集中在训练局没见过的英雄。

逐张“按截图键”回放

模拟 App 的真实流程:每个测试局按截图顺序,第 k 次“按键”后用 App 实际的请求组装代码和保存的读图结果,在独立进程里跑状态估计。

测试局(9) 对方英雄 对方法术 误报
最终 9/9 9/9 局(10/10 个法术,3 局无施法) 任何一步都是 0
首次正确 第 5–13 张;6 局在第一张战斗画面(第 5 张) 拍到含施法行的日志截图时(第 9–13 张) —

这验证的是 App 请求组装和推断链,不是游戏运行中真实按键的验收。

新鲜测试局

方法冻结后,取一局此前没用过的开发验证录像,自动选 15 张、复核接收 12 张(3 张面板淡入/翻页被拒)。生物面板 11 项 × 2 个面板全对;对方头像 8/8;我方头像初始 0/8(接入新头像方法后 8/8);日志行默认 21/28、扩展语法 25/28(3 行“跳过了回合”两次读数玩家名不一致,而且这种句式两种语法都不支持——新发现的缺口)。回放中对方英雄在第 5 张就正确,对方法术“内在光辉”在日志截图出现时出现,0 误报。

失败与负结果

  • 训练剩余缺口:一局“生物用能力后对方恢复 4 魔力”那行没读到(施咒者战术);一局“姿态”能力行没读到(三态之力)。
  • 测试日志 20 行仍未知;39 张英雄面板(全部是我方的)被路由成战场,面板字段没有读。
  • 路由器 v4 只跑了 69 张后又改了日志共识,作废保留,不评分。
  • “跳过了回合”句式不支持。

局限

  • 测试 9 局来自开发验证来源,评分前没用来调参,但其他字段曾经曝光,不是全局盲测。
  • 装备只能通过少数规则间接出现(魔典、恶魔之心、漩涡长袍);样本里从没出现过对方的完整英雄面板;从 HUD 数值推断装备尚未实现。
  • 候选组是“至少其一能解释所见”,不是概率,也不是已鉴定的构筑。

结论与下一步

“截图 → 读取 → 状态估计规则 → App 显示”这条链已经接通,在开发局上对方英雄和法术的推断没有误报,主要的损失来自日志行读不到。后续重点是补齐漏读的日志句式(如“跳过了回合”)、英雄面板路由,以及从 HUD 数值推断装备。