""" 示例单位定义 展示如何创建具有不同能力的KARDS单位 现在支持从YAML文件加载单位定义,与传统创建方法共存 """ from ..units.unit import Unit from ..units.unit_loader import load_unit, get_unit_loader from ..core.enums import UnitType from ..abilities.abilities import DealDamageOnDeploy, BuffAlliesStatic, SacrificeForDamage, HealOnDeath, TargetType # ===== YAML-based Unit Creation Functions ===== # 这些函数使用YAML文件中的单位定义 def create_german_infantry() -> Unit: """德军步兵 - 从YAML加载""" return load_unit("ger_infantry_grenadier") def create_american_gi() -> Unit: """美军步兵 - 从YAML加载""" return load_unit("usa_infantry_gi") def create_german_panzer_iv() -> Unit: """德军四号坦克 - 从YAML加载""" return load_unit("ger_tank_panzer_iv") def create_american_sherman() -> Unit: """美军谢尔曼坦克 - 从YAML加载""" return load_unit("usa_tank_sherman") def create_german_88mm_flak() -> Unit: """德军88毫米高炮 - 从YAML加载""" return load_unit("ger_artillery_88mm") def create_american_howitzer() -> Unit: """美军榴弹炮 - 从YAML加载""" return load_unit("usa_artillery_howitzer") def create_german_bf109() -> Unit: """德军BF109战斗机 - 从YAML加载""" return load_unit("ger_fighter_bf109") def create_american_p51() -> Unit: """美军P51野马战斗机 - 从YAML加载""" return load_unit("usa_fighter_p51") def create_german_stuka() -> Unit: """德军斯图卡轰炸机 - 从YAML加载""" return load_unit("ger_bomber_stuka") def create_american_b17() -> Unit: """美军B17轰炸机 - 从YAML加载""" return load_unit("usa_bomber_b17") # ===== Legacy Unit Creation Functions ===== # 这些函数保持原有的硬编码创建方式,用于复杂的能力示例 def create_german_88mm_gun() -> Unit: """德国88毫米反坦克炮 - 火炮单位,部署时造成伤害""" unit = Unit( name="German 88mm Gun", unit_type=UnitType.ARTILLERY, attack=4, defense=2, operation_cost=4 ) # 部署时对敌方单位造成3点伤害 deploy_ability = DealDamageOnDeploy(3, TargetType.ENEMY_UNIT) unit.abilities.append(deploy_ability) return unit def create_legacy_panzer_iv() -> Unit: """德国四号坦克 - 具有闪击能力(旧版本示例)""" unit = Unit( name="Panzer IV (Legacy)", unit_type=UnitType.TANK, attack=3, defense=4, operation_cost=3, keywords={"BLITZ"} # 闪击:可以立即行动 ) return unit def create_legacy_bf109_fighter() -> Unit: """德国BF-109战斗机 - 战斗机,具有伏击能力""" unit = Unit( name="Bf 109 (Legacy)", unit_type=UnitType.FIGHTER, attack=3, defense=2, operation_cost=3, keywords={"AMBUSH"} # 伏击:首次被攻击时先造成伤害 ) return unit def create_legacy_stuka_bomber() -> Unit: """德国Ju-87俯冲轰炸机 - 轰炸机,攻击时不受反击""" unit = Unit( name="Ju 87 Stuka (Legacy)", unit_type=UnitType.BOMBER, attack=4, defense=1, operation_cost=4 ) return unit def create_legacy_german_infantry() -> Unit: """德军步兵 - 基础步兵单位(旧版本)""" unit = Unit( name="German Infantry (Legacy)", unit_type=UnitType.INFANTRY, attack=2, defense=3, operation_cost=2 ) return unit def create_panther_tank() -> Unit: """德国豹式坦克 - 重型坦克,具有重甲""" unit = Unit( name="Panther Tank", unit_type=UnitType.TANK, attack=5, defense=6, operation_cost=5, keywords={"HEAVY_ARMOR_1"} # 重甲1:受到伤害减1 ) return unit def create_legacy_american_sherman() -> Unit: """美军谢尔曼坦克 - 中型坦克(旧版本)""" unit = Unit( name="M4 Sherman (Legacy)", unit_type=UnitType.TANK, attack=3, defense=4, operation_cost=3, keywords={"BLITZ"} ) return unit def create_legacy_p51_mustang() -> Unit: """美军P-51野马战斗机 - 具有奋战能力""" unit = Unit( name="P-51 Mustang (Legacy)", unit_type=UnitType.FIGHTER, attack=4, defense=2, operation_cost=4, keywords={"FURY"} # 奋战:每回合可攻击两次 ) return unit def create_legacy_b17_bomber() -> Unit: """美军B-17轰炸机 - 重型轰炸机(旧版本)""" unit = Unit( name="B-17 Flying Fortress (Legacy)", unit_type=UnitType.BOMBER, attack=5, defense=3, operation_cost=5 ) return unit def create_legacy_american_gi() -> Unit: """美军步兵 - 基础步兵单位(旧版本)""" unit = Unit( name="American GI (Legacy)", unit_type=UnitType.INFANTRY, attack=2, defense=3, operation_cost=2 ) return unit def create_officer_unit() -> Unit: """军官单位 - 提供友军增益的静态能力""" unit = Unit( name="Field Officer", unit_type=UnitType.INFANTRY, attack=1, defense=3, operation_cost=3 ) # 静态能力:友军攻击力+1 buff_ability = BuffAlliesStatic(attack_bonus=1) unit.abilities.append(buff_ability) return unit def create_kamikaze_pilot() -> Unit: """神风特攻队 - 可以牺牲自己造成伤害""" unit = Unit( name="Kamikaze Pilot", unit_type=UnitType.FIGHTER, attack=2, defense=1, operation_cost=2 ) # 激活能力:牺牲自己对敌方单位造成4点伤害 sacrifice_ability = SacrificeForDamage(4) unit.abilities.append(sacrifice_ability) return unit def create_medic_unit() -> Unit: """医疗兵 - 死亡时治疗友军""" unit = Unit( name="Combat Medic", unit_type=UnitType.INFANTRY, attack=1, defense=2, operation_cost=2 ) # 死亡能力:治疗所有友军2点 heal_ability = HealOnDeath(2) unit.abilities.append(heal_ability) return unit def create_elite_sniper() -> Unit: """精英狙击手 - 具有烟幕和动员能力""" unit = Unit( name="Elite Sniper", unit_type=UnitType.INFANTRY, attack=3, defense=1, operation_cost=3, keywords={"SMOKESCREEN", "MOBILIZE"} # 烟幕:不能被攻击;动员:回合开始+1/+1 ) return unit def create_heavy_tank() -> Unit: """重型坦克 - 具有守护能力""" unit = Unit( name="Heavy Tank", unit_type=UnitType.TANK, attack=4, defense=8, operation_cost=6, keywords={"GUARD", "HEAVY_ARMOR_2"} # 守护:保护相邻单位;重甲2:受伤害减2 ) return unit # 单位工厂函数 def get_sample_units() -> dict: """获取所有示例单位的工厂函数字典(YAML版本优先)""" return { # YAML-based units (新版本) "german_infantry": create_german_infantry, "american_gi": create_american_gi, "german_panzer_iv": create_german_panzer_iv, "american_sherman": create_american_sherman, "german_88mm_flak": create_german_88mm_flak, "american_howitzer": create_american_howitzer, "german_bf109": create_german_bf109, "american_p51": create_american_p51, "german_stuka": create_german_stuka, "american_b17": create_american_b17, # Legacy units with abilities (保留用于能力示例) "german_88mm_gun": create_german_88mm_gun, "panther_tank": create_panther_tank, "officer_unit": create_officer_unit, "kamikaze_pilot": create_kamikaze_pilot, "combat_medic": create_medic_unit, "elite_sniper": create_elite_sniper, "heavy_tank": create_heavy_tank, } def create_german_deck() -> list: """创建德军卡组(使用YAML单位)""" return [ create_german_panzer_iv(), create_panther_tank(), create_german_bf109(), create_german_stuka(), create_german_88mm_flak(), create_german_infantry(), create_heavy_tank(), create_elite_sniper() ] def create_american_deck() -> list: """创建美军卡组(使用YAML单位)""" return [ create_american_sherman(), create_american_p51(), create_american_b17(), create_american_gi(), create_officer_unit(), create_medic_unit(), create_kamikaze_pilot() # 假设是投诚的日军飞行员 :) ] def get_yaml_unit_list() -> dict: """获取所有YAML单位的便捷函数,按国家分组""" loader = get_unit_loader() # 确保单位已加载 if not loader._unit_definitions: loader.load_all_units() result = { "germany": [], "usa": [], "all_ids": loader.list_available_units() } for unit_id, unit_data in loader._unit_definitions.items(): nation = unit_data.get('nation', 'UNKNOWN').lower() if nation == 'germany': result["germany"].append(unit_id) elif nation == 'usa': result["usa"].append(unit_id) return result