摘要

在《英雄无敌:上古纪元》竞技场里,对手英雄在开战前经过了九次技能选择、九次宝物选择等一系列“选秀”。这些选择大多看不见,但会体现在屏幕上的数字里:英雄的攻击、防御、法强,兵堆的攻防,法术的魔力消耗,以及战斗日志(Logs)里的伤害数字。

本实验(E102)想做一个只看过去的敌方英雄分析:在录像的每一个时刻,只用该时刻之前已经出现在屏幕上的证据,交给项目的规则模拟器(Simulator,按游戏规则计算的程序;这里的规则是项目实现的版本,不是商业游戏经过验证的规则)去检验一批“如果对手是这样选的”假设,然后把结果做成审阅网页和带顶部分析条的整局视频。

技术上,这条链路一路做通了:证据前缀不读未来、剪辑时钟逐帧核对、多个截止点的独立重跑一致、整片视频和音轨时钟检查通过、几千项软件测试通过。但核心问题没有被解决:从第一次读到敌方 攻 4 / 防 6 / 法强 14 开始,10,824 份完整选秀声明中有 17 份 同样相符;之后加密到每秒一次的 2,312 次 HUD 读数全是同一组数字,没有带来新的约束;单位攻防、法术伤害、普通攻击、英雄攻击、移动攻击等局部对照分别有区分力,却都没有把真实构筑收窄到可用的结论。

最终,用户判断这个视频没有实用价值,视频交付撤回;原来写的“已验收”更正为“技术检查通过,未获用户验收”。生成数据一度累计 73.27 GiB,最后只把 32 张有用的界面图回收为训练候选。

要回答的问题

  1. 只用“截至当前时刻”的屏幕证据,能否驱动非空的、可解释的敌方构筑条件比较?
  2. 随着对局推进,新证据能否逐步缩小候选,最终给出对玩家有用的技能 / 宝物判断?
  3. 这种分析能否以“原画面 + 顶部分析条”的视频形式交付,让人边看边理解?

数据与来源

  • 一段用户自己的竞技场录像(9 月 20 日录制),只分析其中约 3596–6305 秒的一局;另有一个去掉等待时间的 22 分钟剪辑版。整局都是开发数据,没有独立测试集。
  • 屏幕读取复用之前实验的原帧、OCR(文字识别)和身份读取;敌方英雄候选为“修女凯莉”。
  • 规则与目录来自项目的游戏资料库和规则模拟器的公开接口;当前安装版本可查,但录像对应的游戏版本没有独立核实。
  • 部分可见数字由助手事后目视核对,作为开发参考,不进入运行器,也不是隐藏配置的真值。

方法

证据前缀。 每个时刻只把截止时间之前的记录物化成一个文件;估计入口拒绝任何含未来记录的文件。同一源帧的重复读取不算独立票数;最新读数冲突或敌我未知时返回“未知”,不悄悄退回更早的清晰读数。

条件声明。 一份“声明”是一套完整的假设:技能路径、升级顺序、最终属性奖励、装备。程序通过模拟器的公开接口实际执行合法的选择动作,再预测这份声明下英雄的战前属性,与屏幕读数比较。每份声明都明确假设“没有其他战斗修正”;不相符只排除“没有其他修正的这一份声明”,不能排除真实技能或宝物。“未知宝物效果”和“其他 / 未建模”两种解释始终保留,不显示概率。

两代声明生成器:

  • 首轮:8 条合法技能路径 × 110 种升级组合 × 3 种职业最终奖励 × 109 种装备(无装备或单件),共 287,760 份。
  • 九次选装:固定种子 0–99,999,得到 3,608 条实际走完九次技能选择(含子技能)和九次宝物选择的路径,每条再配三种最终奖励,共 10,824 份。保留装备槽位、背包和套装效果。

逐步加入更多证据。 十秒网格扫描整局 → 一秒网格扫描(2,710 个检查点)→ 日志语义一致的补读 → 英雄面板图标 → 单位攻防 → 法术伤害 → 普通攻击伤害 → 完整来源的攻击控制 → 真实动作窗口(深渊一瞥、英勇攻击、复仇后传送攻击)。

展示。 一个只读的本地审阅网页(原片 / 剪辑、时间滑条、原图和条件声明),以及与网页同一布局的顶部分析条视频;分析与展示分离,展示不重新推断。

设置

所有比较都只在已物化的证据前缀上进行;离线计算耗时(例如首轮约 33 秒、九次选装约 73 秒)不等于信息在视频里可用的时刻。

结果

首轮(3971 秒,第一次读全敌方三项属性): 287,760 份声明中 54 份得到相同的攻 4 / 防 6 / 法强 14,涉及 14 种单件宝物示例。它们是特定假设下的解释,不是 14 件已识别的宝物。

九次选装(3980 秒): 10,824 份声明中 17 份相符,来自 17 条不同路径。匹配声明预测的知识在 3–19 之间;日光、奇术、奥术等技能在不同声明中可以是无、中级或高级。成对诊断显示:这 17 份都依赖装备投影,移除装备后都不相符。

后续读数没有减少歧义:

证据 结果
十秒网格 273 个检查点 230 个可比较,全是同一组 4 / 6 / 14;静态核对后仍 17 份
一秒网格 2,710 个检查点 敌方 HUD 2,312 次可用读数,仍只有 4 / 6 / 14;42 次英雄面板全是我方候选,没拿到敌方知识;仍 17 份
日志语义补读 补回“修女凯莉失去 8 / 24 魔力”及相邻施法行,作为关联候选,不是已证明的价格
单位攻防(三种生物面板) 17 份中 7 份条件相容、10 份条件失配
220 点法术伤害 在英雄自带法术条件下 4 份相容、8 份矛盾、5 份未决
普通攻击 288 伤害 170 次简化控制都解释不了 288
完整来源攻击控制(52 组 × 4 控制 = 208 次) 24 次同时符合较早面板条件且伤害区间包含 288;之后的语义审计改为 172 条属性条件不符、36 条未决
英雄攻击(5 条合法动作链) 主伤害 84 / 71 / 63 / 63 / 55;没有一条同时匹配录像的 55 伤害、死亡 1、剩 30
复仇后传送攻击(8 条对照) 都能到达候选落点,但没有一条共同解释魔耗、法强与伤害

这些局部对照说明数字确实有区分力,但每一步都只在明确假设下有效;真实历史认证始终为 0,主候选 17 份从未被替换。

展示交付: 审阅网页可以按原片时间查看证据和条件声明;22 分钟、2560×2272 的顶部分析视频导出,39,210 帧与原片逐帧对应(最大差 0.5 毫秒),整片视频和音频时钟检查通过;多个截止点的独立物理重跑(截断 / 改写未来后重新取帧和 OCR)与原结果一致。各阶段的 Perception / 集成测试数千项通过(例如 4,183 项通过、6 项可选依赖跳过)。

失败与负结果

核心失败:视频没有用。 用户否定了视频的实用性,旧路线停止。视频里 20 项技能始终显示“未知”,只有若干条件宝物例子;观众无法从中得到清晰、可用的技能判断。报告事后总结的根本问题是:反复增加条件配置和媒体一致性检查,却没有先证明观众能从一条清晰线索得到有用的判断。技术检查通过,不等于视频有用。

数据失控。 生成目录积累到 13,214 个文件、73.27 GiB:

生成内容 数量 大小
无损 MKV 对照输入 45 34.032 GiB
MP4 测试片与多版成片 57 16.176 GiB
全图、HUD 裁图、测试截图 11,217 19.691 GiB
JSON 中间输出 1,493 2.094 GiB
文本(含逐帧解码日志) 229 1.280 GiB

原因是按秒保存全图和两侧 HUD,每个验证窗口又保留完整 / 截短 / 改写未来三套媒体、OCR 和编码输出;每增加一种诊断就生成新成片,却没有临时文件生命周期和保留上限。用户授权删除后,删除命令被执行环境策略拦截,本轮实际删除 0 个文件,留给用户手动处理。

过程中的其他失败(均保留):

  • 额外选取的 3608 秒点仍是选技能界面,“非空分析”验收失败。
  • 过短的 2000 毫秒前缀因尚未显示非空分析而失败。
  • 九次选装的子技能汇总一度因接口使用错误而为空,修正后 70 个链接恢复,17 份匹配不变。
  • 联合审计最初把 12 条“区间外”也记为矛盾(184/24),提供方指出伤害预览的完整适用范围尚未认证,改为 172/36。
  • 英雄攻击对照暴露模拟器主伤害包遗漏通用减伤,修复后仍没有一组能同时解释伤害和数量。
  • 审阅网页暂停后前进曾出现停滞,后修复。

局限

  • 只有一局开发录像,没有独立测试集;所有数字核对都是非盲开发参考。
  • 录像版本与规则版本的对应关系没有独立确认。
  • 声明生成是固定种子抽样,不是全部合法配置的穷举;17 / 10,824 不是概率。
  • “不相符”只否定无其他修正的那一份声明。

结论与下一步

这个实验证明了“只看过去的证据能驱动非空的条件比较”,也证明了整套前缀、时钟和渲染检查可以做到很严格;但它没有回答用户真正关心的问题——对手到底选了什么。对局里最常见的读数(重复的英雄 HUD)几乎不提供新信息,真正有区分力的证据(悬停说明、日志伤害、魔耗)稀少且难以和具体单位、时刻可靠关联。

收尾时:32 张原尺寸可见界面图(含 17 次状态悬浮、6 张法术书、2 张英雄面板)被回收为训练候选,全部是自动候选、人工审核为 0;旧审阅服务停止。后续方向改为先分析具体数值案例、不猜技能:从一个明确的法术书 / 施法窗口出发,只做一个可追溯的短报告,先由用户判断是否有用;默认不再写全图和裁图,调试图必须显式开启、限量并有临时目录生命周期。