Feiyu's Technical Blog

Notes on software, systems, and things I am learning.

上古纪元(Heroes of Might and Magic: Olden Era)

一个读懂游戏画面、推断对手构筑并模拟战斗的长期项目。第一次来,从下面任一总览读起; 两个系列都按阅读顺序编号:S = 模拟器与 AI,P = 视觉理解与战斗记录。

  1. P00视觉理解总览:从录像到可核对的观察
  2. S00模拟器总览:从游戏规则到可用的战斗助手
  3. 目录视觉理解全书目录(按阅读顺序)

游戏设计、模拟器与 AI · 上古纪元

S 系列:战斗规则怎样实现、测试和回放,AI 怎样公平决策;其后是稳定模块接口与交互流程等设计文档。

这里记录现在有意义的设计。当前采用不等于整个系统已实现;每篇都写明范围和下一步。实验结果仍在下方的视觉理解系列中。

  1. s00:从游戏规则到可用的战斗助手

    Simulator、资料库、界面与 AI 各负责什么;一次规则修正怎样传到决策,以及 S 系列如何维护设计。

    阅读设计 →
  2. s20:一次攻击怎样正确结算并回放

    为什么双击不能把第一击乘二;按伤害包更新状态,记录处决与死亡归因,并用规则版本门控让旧存档按自己的规则逐字节回放。

    阅读设计 →
  3. s21:让生物和魔法共用机制,而不是共用一串特例

    从反伤触发天堂之刃,到把 157 个生物导出成一份可核验的定义:Simulator 怎样用强类型配置、注册表和共享机制减少重复修补,又怎样诚实地列出仍写死在代码里的特例。

    阅读设计 →
  4. s22:怎样测试一个规则会相互触发的战斗模拟器

    用受控场景、预览差分、带复现存档的崩溃模糊测试、机制组合与行覆盖统计及并行成对测试,寻找规则组合中的错误,并区分程序自洽与真实规则一致。

    阅读设计 →
  5. s40:AI 怎样公平比较普攻、猛攻和等待

    只用玩家可见信息比较行动:公开攻击情景查询、不确定性与4秒预算,以及怎样用足量配对排位和独立留出来源判断一个新策略是否真的更好。

    阅读设计 →
  6. s41:规则型 AI 的独立验证:从威胁圈到英雄无敌三式

    从 v59 错题诊断、题库与排位的背离、排位噪声底,到威胁圈 T 与“打得到就打”的 H3:用冻结协议、随机对照和新来源留出,判断一条简单规则是否真的让 AI 变强。

    阅读设计 →
  7. s50:学习型 AI:从行为克隆到结构化动作特征

    回顾此前 PPO、行为克隆与交叉熵搜索为什么都没有通过独立验收,再用生物配置导出和每动作 351 维的结构化特征重新检验:一个小模型能否学会规则 AI 的落点选择。

    阅读设计 →
  8. 游戏智能体的模块边界:稳定接口,独立实现

    Perception、Simulator、AI 如何各自改进;哪些变更必须共同讨论,以及设计文档怎样保持有效。

    阅读设计 →
  9. Perception 薄观察接口:只传看见的证据

    已实现的 v1 如何保存对象、数值、来源、坐标和时间,又如何防止未知值、旧帧和内部数据混进 AI。

    阅读设计 →
  10. 已经看见的属性,怎样真正进入战斗分析

    从漏掉英雄贡献、错误推断施法费用,到把整场减员接成时间线:一条贯穿图像读取、历史关联、公开规则与保存回看的修复链。

    阅读设计 →
  11. 让 AI 主动查看界面:查询也要一步一步执行

    完整流程仍在设计中;已有顺序探查、条件耗蓝分析和空闲窗口内的付费日志读取,保留成本与信息缺口。

    阅读设计 →
已弃用的设计 · 1 篇(保留原因与替代入口)

游戏视觉理解与战斗记录 · 上古纪元

P 系列,像读一本书一样:从视频选帧出发,逐步读懂文字、生物、界面和前后变化,再交给状态推断与战斗记录 App。

先读当前交付报告

最后核对:2026-10-14。p00 是总报告,其余组页逐项说明做到哪、缺什么;p900 单独保留未采用研究。下面的方法章节已按 P 任务归组,历史测量仍保留原来的范围与日期。

  1. p00 · 总设计与总进度先知道哪些画面能读、哪里仍缺,再决定下一项工作。
  2. p20 · 输入与选帧从录像留下清楚、少重复的画面,特别注意短暂悬浮。
  3. p40 · 场景与布局先找到页面和面板,再决定哪些区域可读。
  4. p60 · 文字与数值读出实际可见文字和数字,不用游戏规则替它补答案。
  5. p80 · 图标与视觉对象找出身体、卡片、小牌与图标;身份和位置分开评估。
  6. p100 · 对象与空间关系回答哪个数字属于哪个对象,不把同类生物当同一支部队。
  7. p120 · 组合与观察输出让各组输出有来源、未知项和时间边界,成为可检查的整帧记录。
  8. p140 · 数据、验收与交付工具保存可审核的数据,保证重跑、安装和清理都有依据。
  9. p900 · 未采用实验保留试过的方法与失败原因,不混入生产能力。

导读 · p00

先知道要看什么

一段录像最终应该留下哪些观察?先看目标,再沿处理流程往下读。

  1. 第 1 章从一段游戏录像开始p02

第一部 · p20

从视频挑出清楚的帧

减少重复工作,也保留短暂出现的文字与面板。

  1. 第 2 章挑出值得看的帧p22

第二部 · p40

判断页面,找到可读区域

先确定这是什么画面、面板在哪里;文字怎么读,在下一部展开。

  1. 第 3 章用文字判断当前页面p41
  2. 第 4 章没有明显文字时,看画面p41
  3. 第 5 章不先给框,自动找到面板p43

第三部 · p60

读出文字和数字

共用文字读取方法,再分别检查时钟、属性、日志、预览和状态回合。

  1. 第 6 章把文字和小数字读出来p61
  2. 第 7 章行动条、英雄数字与计时p63
  3. 第 8 章给面板里的数字一个含义p64
  4. 第 9 章从日志看已经发生的事p66
  5. 第 10 章区分伤害预览与实际结果p67
  6. 第 11 章从状态图标读到法术效果p68

第四部 · p80

找到并认出图像中的对象

文字之外,图标、部队身体和数量牌也需要自己的位置与身份判断。

  1. 第 12 章从裁图认出图标p81
  2. 第 13 章在战场上找到每支部队p82
  3. 第 14 章把脚下的数字连回身体p83
  4. 第 15 章读懂底部操作栏的外观与数字p87

第五部 · p100

把内容配回正确对象

名称属于哪张卡?面板对应谁?高亮位于哪些格子?这些关系单独检查。

  1. 第 16 章把名称连到旁边的图标p101
  2. 第 17 章这是哪一支部队的资料?p104
  3. 第 18 章给战场位置标上格子坐标p105
  4. 第 19 章读出高亮范围与障碍线索p106

第六部 · p120

组合前后画面的观察

多帧可以提供变化线索,但不能把后来才看见的信息提前使用。

  1. 第 20 章从计时变化得到线索p122
  2. 第 21 章读出结算画面,核对整场减员p122
  3. 第 22 章让录像自己找图,再逐场检查结果p123
  4. 第 23 章实时模式:读取排队与画面时间顺序p123
  5. 第 24 章回放时也不能偷看未来p124

研究附录 · p900

未采用的方法与对照

正文无需依赖这些研究。这里保留图标检索、检测器比较,以及身体—数量牌融合的有效与失败尝试。

  1. 附录 A枚举方框,寻找相似图标p901
  2. 附录 B用图鉴训练特征与裁图质量p902
  3. 附录 C让检测器自己学习找图标p903
  4. 附录 D比较几种找框的方法p904
  5. 附录 E试过哪些办法,为什么还会漏p912

游戏概率与数据 · 上古纪元

根据已核对的游戏数据计算竞技场概率,说明抽取事件、版本与证据范围。

  1. 上古纪元竞技场:哪些阵营更容易抽到这五项技能?

    比较法师与战士抽到奇术、秘术、抗性、原始魔法、战斗魔法的单次概率;保留 2026-09-03 发布表,并按 2026-09-06“英雄开局无技能”更正后的分母给出当前结果。

Interactive study guide

LeetCode Java: Problems 1–500

Read the problem, reveal interview hints, compare solutions, and step through visual explanations alongside runnable Java code.

Open the study guide

Agents & Automation

Local models, tool-using agents, and practical information-extraction workflows.

  1. Three Ways I Tried to Automate 1Point3Acres Daily Check-In and Quiz Answering

    Direct Codex browser control, a supervised WebContentAgent library, and a fully local LLM workflow—what failed, what I use now, and what I am still exploring.

  2. [2/2] How I Made a Codex-to-ChatGPT Bridge Verifiable

    A local bridge sends one authorized request and brings back a checked answer. Its failures explain what message identity, durable state and realistic tests must get right.

  3. [1/2] (Deprecated) How I Let Codex Talk to ChatGPT Through My Signed-In Chrome

    The first prototype made the round trip work. Its failures taught me why browser mechanics need a smaller, testable home.

  4. Local LLM + Agent for Web Information Extraction

    A local agent architecture for semantic web extraction, browser automation, bounded model context, and durable task state.