kards-env/docs/architecture/SYSTEM_DESIGN.md

202 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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**
```python
# 单位操作
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单位系统
**组件化设计:**
```python
class Unit:
stats: UnitStats # 攻防血量
keywords: Set[str] # 关键词集合
abilities: List[Ability] # 能力列表
activation_cost: int # 激活费用
```
**单位类型:**
- INFANTRY基础作战单位
- TANK可同回合移动+攻击
- ARTILLERY无视距离和守护不受反击
- FIGHTER无视距离保护免受轰炸
- BOMBER无视距离和守护不受反击战斗机除外
### 4. 资源系统
**双层Kredits设计**
```python
# 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()
```
## 🎮 玩家系统
**玩家标识:**
- 内部使用整数ID`0` (Player1), `1` (Player2)
- 显示使用名称:`"Germany"`, `"USA"`
- API统一使用整数ID避免字符串浪费
**优势:**
- 性能更好(整数比较)
- 代码更简洁
- 减少字符串错误
## 📊 战斗规则系统
### UnitCombatRules
集中管理所有战斗规则:
```python
@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. **可扩展**:支持新功能无痛添加
这种设计确保了系统的可维护性、可测试性和可扩展性。