kards-env/docs/architecture/SYSTEM_DESIGN.md

5.9 KiB
Raw Permalink Blame History

KARDS Battle System - 系统设计文档

🏗️ 架构概述

KARDS战斗系统采用模块化设计专注于核心战斗机制为AI训练提供完整的游戏环境。

📁 项目结构

kards/
├── kards_battle/              # 核心战斗系统包
│   ├── core/                  # 核心引擎和逻辑
│   │   ├── battle_engine.py   # 主战斗引擎(当前使用)
│   │   ├── enums.py          # 枚举定义
│   │   └── unit_combat_rules.py  # 战斗规则
│   ├── battlefield/           # 战场管理
│   │   └── battlefield.py     # 3线战场系统
│   ├── units/                 # 单位系统
│   │   └── unit.py           # 单位基类
│   ├── abilities/             # 能力系统
│   │   ├── abilities.py      # 能力基类
│   │   └── keywords.py       # 关键词效果
│   ├── effects/               # 效果系统
│   │   ├── effects.py        # 游戏效果
│   │   └── target_selectors.py  # 目标选择
│   └── examples/              # 示例单位
│       └── sample_units.py    # 15个示例单位
├── tests/                     # 完整测试套件
│   ├── test_comprehensive_movement.py  # 移动系统测试
│   ├── test_turn_and_resources.py     # 回合资源测试
│   ├── unit/                  # 单元测试
│   ├── integration/           # 集成测试
│   └── examples/              # 示例测试
├── demo/                      # 演示文件
│   ├── demo_new_features.py   # 最新功能演示
│   ├── main.py               # 主程序入口
│   └── DEMOS.md              # 演示说明
├── archive/                   # 已封存的旧版本
└── docs/                      # 项目文档

🎯 核心模块设计

1. BattleEngine战斗引擎

主要职责:

  • 管理游戏状态和回合流程
  • 处理单位部署、移动、攻击
  • 管理Kredits资源系统
  • 提供DEBUG功能

关键API

# 单位操作
deploy_unit_to_support(unit: Unit, player_id: int, position: Optional[int]) -> Dict
move_unit(unit_id: UUID, target_position: tuple, player_id: int) -> Dict
attack_target(attacker_id: UUID, target_id: Union[UUID, str], player_id: int) -> Dict

# 回合管理
end_turn() -> Dict

# 资源管理
get_kredits(player_id: int) -> int
spend_kredits(player_id: int, amount: int) -> bool

2. Battlefield战场系统

3线布局设计

Player1_Support  [HQ] [Unit1] [Unit2] ...
Front_Line       [Unit3] [Unit4] ...        (共享前线)
Player2_Support  [HQ] [Unit5] [Unit6] ...

特性:

  • 自动紧凑排列(无空隙)
  • 前线控制权动态更新
  • HQ作为支援线上的目标
  • 每线最多5个目标

3. Unit单位系统

组件化设计:

class Unit:
    stats: UnitStats           # 攻防血量
    keywords: Set[str]         # 关键词集合
    abilities: List[Ability]   # 能力列表
    activation_cost: int       # 激活费用

单位类型:

  • INFANTRY基础作战单位
  • TANK可同回合移动+攻击
  • ARTILLERY无视距离和守护不受反击
  • FIGHTER无视距离保护免受轰炸
  • BOMBER无视距离和守护不受反击战斗机除外

4. 资源系统

双层Kredits设计

# Kredits Slot指挥点容量
kredits_slot: int  # 每回合+1上限12

# Kredits当前可用指挥点  
kredits: int       # 每回合重置为slot值上限24

🔄 游戏流程

回合系统

Turn 1: Phase 0 (Player0) → Phase 1 (Player1)
Turn 2: Phase 0 (Player0) → Phase 1 (Player1)
...

操作流程

1. 部署单位到支援线 → deploy_unit_to_support()
2. 移动单位到前线   → move_unit()
3. 攻击敌方目标     → attack_target()
4. 结束回合        → end_turn()

🎮 玩家系统

玩家标识:

  • 内部使用整数ID0 (Player1), 1 (Player2)
  • 显示使用名称:"Germany", "USA"
  • API统一使用整数ID避免字符串浪费

优势:

  • 性能更好(整数比较)
  • 代码更简洁
  • 减少字符串错误

📊 战斗规则系统

UnitCombatRules

集中管理所有战斗规则:

@staticmethod
def can_attack_target(attacker: Unit, target: Union[Unit, HQ], battlefield: Battlefield) -> bool
def can_counter_attack(defender: Unit, attacker: Unit) -> bool

攻击距离规则

  • 步兵/坦克:只能攻击相邻战线
  • 火炮/战斗机/轰炸机:无视攻击距离

特殊规则

  • 火炮:无视守护,不受反击
  • 轰炸机:无视守护,不受反击(战斗机除外)
  • 战斗机:可保护同战线免受轰炸机攻击

🧪 测试架构

测试分层

pytest测试套件 (19个测试)
├── 移动系统测试 (10个)
│   ├── 成功场景测试
│   └── 失败场景测试  
└── 回合资源测试 (9个)
    ├── 资源增长测试
    └── 限制验证测试

测试原则

  • 每个核心功能都有对应测试
  • 覆盖成功和失败场景
  • 验证边界条件和错误处理
  • 使用setup_method确保测试独立

🔧 可扩展性设计

插件化架构

  • 关键词系统:新关键词可独立实现
  • 能力系统:支持部署、触发、静态等多种能力
  • 效果系统:可组合的游戏效果
  • 目标选择:灵活的目标选择逻辑

未来扩展方向

  • AI对手实现
  • 完整的卡牌系统
  • 图形用户界面
  • 网络对战功能
  • 战斗回放系统

💡 设计原则

  1. 单一职责:每个模块职责明确
  2. 低耦合:模块间依赖最小化
  3. 高内聚:相关功能集中管理
  4. 可测试:所有核心逻辑都可测试
  5. 可扩展:支持新功能无痛添加

这种设计确保了系统的可维护性、可测试性和可扩展性。