基于洛克王国实际战斗机制,参考 Pokemon Showdown 的分层架构重构的战斗引擎。
NRC_SIM/
├── sim/ # 核心引擎
│ ├── types.py # 枚举 + 属性克制表
│ ├── skill.py # 技能数据模型
│ ├── pokemon.py # 精灵数据模型
│ ├── battle_state.py # 战斗状态容器
│ ├── damage_calc.py # 伤害计算器(纯函数)
│ ├── counter_system.py # 应对系统(洛克王国特色)
│ ├── battle_engine.py # 战斗引擎主循环
│ ├── skill_db.py # 技能数据库
│ ├── pokemon_db.py # 精灵数据库
│ └── team_builder.py # 队伍构建器
├── tests/
│ └── test_all.py # 测试套件 (17 项)
├── data/
│ ├── pokemon_stats.xlsx # 精灵六维数据
│ └── skills_all.csv # 技能数据
├── cli.py # 交互式入口
└── requirements.txt
# 安装依赖
pip install -r requirements.txt
# 运行测试
python tests/test_all.py
# 交互式对战
python cli.py- 伤害计算器(damage_calc.py) 设计为纯函数,不修改任何状态
- 模块职责清晰:类型系统、数据模型、计算逻辑、引擎流程分离
- 战斗日志系统:记录每个动作和效果,方便调试和回放
- 状态容器(BattleState) 支持高效 deep_copy(用于 MCTS 搜索)
- 同时选择制:双方同时选择动作,按速度决定执行顺序
- 应对系统(counter_system.py):攻击vs防御(减伤+反弹)、攻击vs状态(威力倍率)、防御vs状态
- 层数制异常状态:中毒/灼烧按层数叠加伤害,冻结3层触发
- 能量系统:初始10,汇合聚能+5,技能消耗各异
- 吸血不再双重触发
- 脱离后正确 return
- 冻结层数回合结束递减
- 伤害计算器零副作用
- apply_skill 重复逻辑已消除