kards-env/docs/architecture/SYSTEM_DESIGN.md

202 lines
5.9 KiB
Markdown
Raw Permalink Normal View History

2025-09-05 17:05:43 +08:00
# 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. **可扩展**:支持新功能无痛添加
这种设计确保了系统的可维护性、可测试性和可扩展性。