8.7 KiB
8.7 KiB
KARDS 游戏规则统一文档
1. 单位类型特性
1.1 步兵 (INFANTRY) 🚶
- 移动规则: 只能攻击相邻阵线(前线攻击敌方支援线,支援线攻击敌方前线)
- 攻击规则: 不能跨阵线攻击,必须遵循距离限制
- 反击规则: 正常反击
- 特殊规则: 无
1.2 坦克 (TANK) 🚗
- 移动规则: 与步兵相同的距离限制
- 攻击规则: 与步兵相同
- 反击规则: 正常反击
- 特殊规则:
- 可以一回合内移动+攻击(
can_move_and_attack = True) - 默认具有TANK关键词能力
- 可以一回合内移动+攻击(
1.3 火炮 (ARTILLERY) 🎯
- 移动规则: 需要消耗激活成本移动
- 攻击规则:
- 无视攻击距离,可以攻击任意敌方目标
- 无视守护保护
- 反击规则: 火炮攻击不受反击
- 特殊规则: 可以跨阵线攻击任意敌方目标
1.4 战斗机 (FIGHTER) ✈️
- 移动规则: 需要消耗激活成本移动
- 攻击规则: 无视攻击距离,可以攻击任意敌方目标
- 反击规则: 正常反击,轰炸机被攻击时只对战斗机反击
- 特殊规则: 可以保护同阵线其他单位免受轰炸机攻击
1.5 轰炸机 (BOMBER) 💣
- 移动规则: 需要消耗激活成本移动
- 攻击规则:
- 无视攻击距离和守护保护
- 不能攻击与战斗机同阵线的非战斗机目标
- 反击规则: 轰炸机攻击不受反击,被攻击时不会反击(除非攻击者是战斗机)
- 特殊规则: 受战斗机保护限制
2. 关键词特性
2.1 BLITZ(闪击)
- 效果: 单位部署当回合就能立即行动
- 实现:
can_operate_immediately = True - 影响: 跳过
deployed_this_turn限制
2.2 TANK(坦克)
- 效果: 可以在同一回合内移动和攻击
- 实现:
can_move_and_attack = True - 影响: 移动后仍可攻击,攻击后仍可移动
2.3 FURY(奋战)
- 效果: 每回合可以攻击两次
- 实现:
can_attack_multiple_times = True,max_attacks_per_turn = 2 - 影响: 增加每回合攻击次数上限
2.4 GUARD(守护)
- 效果: 保护相邻的友方单位和HQ
- 实现: 阻止敌方攻击相邻目标(除非敌方可以无视守护)
- 影响: 必须先攻击守护单位才能攻击被保护目标
2.5 HEAVY_ARMOR_X(重甲X)
- 效果: 受到的伤害减少X点
- 实现: 伤害计算时减去护甲值
- 格式:
HEAVY_ARMOR_1,HEAVY_ARMOR_2等 - 影响:
final_damage = max(0, damage - armor_value)
2.6 AMBUSH(伏击)
- 效果: 首次被攻击时先对攻击者造成伤害
- 实现: 在受到伤害前先进行反击
- 影响: 改变战斗顺序
2.7 SMOKESCREEN(烟幕)
- 效果: 不能被敌方单位攻击
- 实现:
can_be_attacked_by()返回False - 移除条件:
- 单位移动后自动失去烟幕
- 单位攻击后自动失去烟幕
- 单位移动到前线时自动失去烟幕
- 单位获得GUARD关键词时自动失去烟幕
- 单位离开己方支援线时自动失去烟幕
- 约束: 烟幕与守护不能共存,任何情况下单位离开己方支援线或获得守护都会失去烟幕
2.8 PINNED(压制)
- 效果: 被压制的单位不能主动攻击,但可以反击
- 实现:
can_attack()检查压制状态,但不影响反击 - 持续时间: 持续到下个己方回合结束
- 影响: 阻止主动攻击,但保留反击能力
3. 移动规则
3.1 基本移动规则
- 费用: 每次移动消耗单位的操作费用(
operation_cost) - 限制: 每回合最多移动一次(除非有特殊能力)
- 目标: 只能移动到有效的空位或友方控制的位置
3.2 移动限制检查
def can_move(self) -> bool:
# 刚部署的单位不能移动(除非有BLITZ)
if self.deployed_this_turn and not self.can_operate_immediately:
return False
# 已经移动过的单位不能再移动
if self.has_moved_this_turn:
return False
# 已经攻击过的单位不能移动(除非有TANK能力)
if self.has_attacked_this_turn and not self.can_move_and_attack:
return False
return True
3.3 移动方向规则
- 支援线到前线: 从己方支援线移动到前线空位
- 前线单位不能移动: 已在前线的单位无法再移动
- 不能移动: 不能移动到敌方支援线
4. 战斗规则
4.1 攻击距离规则
步兵/坦克攻击规则
- 前线单位 → 敌方支援线单位
- 支援线单位 → 敌方前线单位
- 不能攻击同阵线目标
火炮攻击规则
- 可以攻击任意敌方目标
- 无视距离和守护限制
空中单位攻击规则
- 战斗机:可以攻击任意敌方目标
- 轰炸机:可以攻击任意敌方目标,但受战斗机保护限制
4.2 攻击限制检查
def can_attack(self) -> bool:
# 刚部署的单位不能攻击(除非有BLITZ)
if self.deployed_this_turn and not self.can_operate_immediately:
return False
# 已经达到最大攻击次数
if self.attacks_this_turn >= self.max_attacks_per_turn:
return False
# 已经移动过的单位不能攻击(除非有TANK能力)
if self.has_moved_this_turn and not self.can_move_and_attack:
return False
return True
4.3 守护保护规则
- 守护检查: 攻击前检查目标是否被相邻GUARD单位保护
- 无视守护: 火炮(ARTILLERY)和轰炸机(BOMBER)可以无视守护
- 守护范围: 保护相邻位置的友方单位和HQ
4.4 反击规则
def can_counter_attack(defender: Unit, attacker: Unit) -> bool:
# 被压制的单位不能反击
if defender.has_keyword("PINNED"):
return False
# 轰炸机和火炮攻击不受反击
if attacker.unit_type in [UnitType.BOMBER, UnitType.ARTILLERY]:
return False
# 轰炸机被攻击时不会反击(除非攻击者是战斗机)
if defender.unit_type == UnitType.BOMBER:
return attacker.unit_type == UnitType.FIGHTER
return True
4.5 伤害计算规则
- 基础攻击力:
attacker.get_effective_attack() - 伏击处理: 如果目标有AMBUSH,先进行伏击伤害
- 重甲减伤: 应用
HEAVY_ARMOR_X减伤 - 最终伤害:
target.stats.take_damage(final_damage)
5. 部署规则
5.1 部署位置
- 支援线部署: 单位只能部署到己方支援线
- 位置选择: 可以指定位置或自动添加到末尾
- HQ位置: HQ总是位于支援线末端
5.2 部署限制
- 容量限制: 每条支援线有最大容量限制
- 费用检查: 部署不消耗操作费用,但激活需要费用
- 所有权: 部署时自动设置单位所有者
5.3 部署状态
- 新部署状态:
deployed_this_turn = True - 行动限制: 除非有BLITZ,否则当回合不能移动/攻击
- 下回合重置: 回合开始时
deployed_this_turn = False
6. 回合制规则
6.1 回合结构
- 玩家回合: 每个玩家轮流进行完整回合
- 行动阶段: 玩家可以自由进行移动、攻击等行动
- 回合结束: 重置所有单位的行动状态
6.2 行动状态管理
# 单位状态属性
self.deployed_this_turn: bool = True
self.has_moved_this_turn: bool = False
self.has_attacked_this_turn: bool = False
self.attacks_this_turn: int = 0
self.max_attacks_per_turn: int = 1
# 回合开始时重置
def start_new_turn(self):
self.deployed_this_turn = False
self.has_moved_this_turn = False
self.has_attacked_this_turn = False
self.attacks_this_turn = 0
6.3 资源系统(Kredits)
- Kredits Slot: 指挥点槽位,每回合自然增长(上限12)
- Kredits: 当前可用指挥点,每回合重置为槽位数
- 激活费用: 移动和攻击都需要消耗单位的操作费用
7. 特殊规则汇总
7.1 立即行动规则
- BLITZ单位: 部署当回合可立即行动
- 实现方式:
can_operate_immediately = True
7.2 多次行动规则
- TANK单位: 可以移动后攻击或攻击后移动
- FURY单位: 可以每回合攻击两次
- 组合效果: TANK+FURY可以移动后攻击两次
7.3 保护机制
- GUARD保护: 相邻友方单位和HQ
- 战斗机保护: 同阵线单位免受轰炸机攻击
- SMOKESCREEN保护: 完全免疫攻击(攻击后消失)
7.4 特殊攻击规则
- 无视距离: 火炮、战斗机、轰炸机
- 无视守护: 火炮、轰炸机
- 无反击攻击: 火炮、轰炸机的攻击
- 战斗机限制: 轰炸机不能攻击有战斗机保护的目标
此文档基于当前代码实现整理,涵盖了KARDS战斗引擎的所有核心规则和机制。