战车
SS
冲锋装甲坦克
活物冲锋装甲
速度225
HP150
ATK35
DEF25
INT5
范围1
总胜 45%外战 22%
一款把「确定性战斗内核」放在第一位的回合制战棋。同一个战斗规则同时跑在 Unity 客户端和独立的 .NET 模拟器里,用批量对局喂出强化学习 AI, 再用联赛 Elo 量化每个单位的强度。
我在做什么,以及为什么这么做
1/60 秒,逻辑层禁止读取 Time.deltaTime。全部以代码为准,Unity 与模拟器双端共用同一套常量
| 机制 | 公式 / 规则 |
|---|---|
| 普通伤害 | max(ATK - DEF, 1),护甲单位先按减伤率折算,再扣护甲、最后扣血 |
| 移动力 | 1 + max(⌊log(速度/100)/log(1.5)⌋, 0),阈值 150→2 格、225→3 格 |
| ATB 频率 | 行动条 += 速度 × dt × 60,与速度成正比 |
| 冲锋增伤 | 伤害 × (1 + 0.5 × 本回合移动步数) |
| 能量上限 | 智力 × 10 |
| 回合结束回复 | 生命 剩余移动力 × 1% 最大生命;能量 剩余移动力 × 0.5 × 智力 |
| 护甲 | 建筑 最大生命 × 1(减伤 50%);装甲 最大生命 × 4(减伤 60%) |
| 反震 | 近战且目标 DEF 更高时:原始伤害 × min((目标DEF - 自身DEF)/自身DEF, 1) |
| 远程偏折 | 50% 概率伤害 × 0.5 |
| 锋锐流血 | 破甲活物:20 帧 DOT,每帧 实际伤害 × 5%,合计约 100% |
| 钝击 | 目标 DEF 减半、无视护甲减伤;对无甲活物触发骨折(速度 ×0.3) |
| 汲取 | 伤害 = 智力 × 0.75,无视 DEF 与魂体减伤,对活物回血,固定耗能 15 |
| 瘟疫 | 每层 3% 最大生命 DOT / 20 帧,四正向传播全层、四斜向传播半层;亡灵免疫伤害但仍可传播 |
| 魂体 | 90% 普通减伤、免疫骨折、无反震、穿透移动与攻击 |
| 唤灵 | 领域影响力 512 / 2^(距离-1),从坟墓复活亡灵 |
16 个可用单位 + 1 个建筑。数值取自工程内的原型资源,胜率来自 1000 局启发式对局实测
冲锋装甲坦克
远程据点堡垒
冲锋骑兵
横扫锋锐主力
拦截锋锐
仁心治疗师
横扫钝击战士
鼓舞坦克
远程锋锐
基础步兵
唤灵汲取核心
瘟疫汲取领主
汲取恐吓突击手
魂体骚扰者
瘟疫肉盾
亡灵炮灰
建筑尸体(唤灵载体)
HeuristicModel 1000 局自动对战统计 —— 包括对自己不利的结论
| 模型 | 局数 | 总胜率 | vs 人类专精 | vs 死灵专精 | vs 综合 |
|---|---|---|---|---|---|
| 人类专精 | 500 | 24.4% | — | 21.6% | 27.2% |
| 死灵专精 | 500 | 73.0% | 78.0% | — | 68.0% |
| 综合模型 | 750 | 49.1% | 72.4% | 28.4% | 46.4% |
| 人类系单位 | 选取率 | 总胜 | 内战 | 外战 |
|---|---|---|---|---|
| 战车 | 63% | 45% | 100% | 22% |
| 机枪 | 58% | 26% | 65% | 8% |
| 骑兵 | 56% | 32% | 71% | 14% |
| 剑士 | 59% | 25% | 62% | 9% |
| 枪客 | 62% | 24% | 65% | 9% |
| 医者 | 62% | 26% | 63% | 14% |
| 棍棒 | 58% | 30% | 81% | 10% |
| 旗帜 | 70% | 26% | 76% | 9% |
| 弓手 | 69% | 25% | 72% | 8% |
| 白卒 | 68% | 26% | 78% | 8% |
| 死灵系单位 | 选取率 | 总胜 | 内战 | 外战 |
|---|---|---|---|---|
| 祭司 | 69% | 80% | 77% | 81% |
| 巫妖 | 71% | 88% | 83% | 90% |
| 血魔 | 83% | 91% | 93% | 90% |
| 幽魂 | 81% | 84% | 78% | 87% |
| 僵尸 | 83% | 89% | 82% | 91% |
| 骷髅 | 85% | 84% | 82% | 85% |
这个项目里我认为最有价值的部分
Unity 客户端与 .NET 9 模拟器各自实现一遍战斗逻辑,但共用同一套公式常量。逻辑层只有唯一的固定步长入口,帧率、垂直同步、卡顿都不会改变任何数值判定。这是模拟结果能反哺游戏平衡的前提。
脱离 Unity 的纯 C# 工程,复现了 13 项战斗机制,用于批量自动对战与联赛评估。实测 500 局连续运行零崩溃——它比在编辑器里跑对局快几个数量级,是训练数据的主要来源。
CNN + MLP + Attention 的混合网络,约 190 万参数。先做行为克隆(BC)达到 63% 决策准确率,导出 ONNX 后由 C# 端直接推理,PPO 流程也已跑通验证。
早期用「对教师模型的胜率」衡量强弱,口径混乱且不可比。现在统一改用联赛 Elo,所有模型放进同一个池子里对局排名,跨版本的数据才真正可比。
从能打到能被量化