""" 占位卡牌定义 - 用于测试卡牌系统 """ from typing import List, Set from ..core.enums import Nation, Rarity from .card import UnitCard from .card_loader import load_nation_cards def create_placeholder_unit_cards() -> List[UnitCard]: """ 创建10种占位单位卡牌用于测试 全部为召唤ger_infantry_grenadier的卡牌,稀有度为4级 """ placeholder_cards = [] # 卡牌定义:名称、费用、国家、描述 card_definitions = [ ("德军掷弹兵A", 1, Nation.GERMANY, "基础德军步兵单位"), ("德军掷弹兵B", 1, Nation.GERMANY, "基础德军步兵单位"), ("德军掷弹兵C", 2, Nation.GERMANY, "经验丰富的德军步兵"), ("德军掷弹兵D", 2, Nation.GERMANY, "经验丰富的德军步兵"), ("德军精英掷弹兵A", 3, Nation.GERMANY, "精英德军步兵单位"), ("德军精英掷弹兵B", 3, Nation.GERMANY, "精英德军步兵单位"), ("德军老兵掷弹兵A", 2, Nation.GERMANY, "老兵德军步兵单位"), ("德军老兵掷弹兵B", 2, Nation.GERMANY, "老兵德军步兵单位"), ("德军突击掷弹兵", 3, Nation.GERMANY, "突击型德军步兵"), ("德军防卫掷弹兵", 1, Nation.GERMANY, "防御型德军步兵"), ] for name, cost, nation, description in card_definitions: card = UnitCard( name=name, cost=cost, nation=nation, rarity=Rarity.COMMON, # 4级稀有度 unit_definition_id="ger_infantry_grenadier", description=description ) placeholder_cards.append(card) return placeholder_cards def create_placeholder_allied_cards() -> List[UnitCard]: """ 创建一些盟国占位卡牌用于测试多国卡组 """ allied_cards = [] # 美军卡牌 usa_cards = [ ("美军步兵A", 1, Nation.USA, "基础美军步兵单位"), ("美军步兵B", 2, Nation.USA, "经验丰富的美军步兵"), ("美军精英步兵", 3, Nation.USA, "精英美军步兵单位"), ] # 英军卡牌 uk_cards = [ ("英军步兵A", 1, Nation.UK, "基础英军步兵单位"), ("英军步兵B", 2, Nation.UK, "经验丰富的英军步兵"), ] # 苏军卡牌 soviet_cards = [ ("苏军步兵A", 1, Nation.SOVIET, "基础苏军步兵单位"), ("苏军步兵B", 2, Nation.SOVIET, "经验丰富的苏军步兵"), ] # 小国卡牌(带流亡效果的) minor_nation_cards = [ ("波兰流亡步兵", 2, Nation.POLAND, "波兰流亡军步兵", {Nation.UK, Nation.SOVIET}), ("法国抵抗军", 2, Nation.FRANCE, "法国抵抗组织步兵", {Nation.UK, Nation.USA}), ("芬兰猎兵", 2, Nation.FINLAND, "芬兰精锐猎兵", {Nation.GERMANY}), ] # 创建美军卡牌 for name, cost, nation, description in usa_cards: card = UnitCard( name=name, cost=cost, nation=nation, rarity=Rarity.COMMON, unit_definition_id="ger_infantry_grenadier", # 暂时都使用相同的单位定义 description=description ) allied_cards.append(card) # 创建英军卡牌 for name, cost, nation, description in uk_cards: card = UnitCard( name=name, cost=cost, nation=nation, rarity=Rarity.COMMON, unit_definition_id="ger_infantry_grenadier", description=description ) allied_cards.append(card) # 创建苏军卡牌 for name, cost, nation, description in soviet_cards: card = UnitCard( name=name, cost=cost, nation=nation, rarity=Rarity.COMMON, unit_definition_id="ger_infantry_grenadier", description=description ) allied_cards.append(card) # 创建小国卡牌(带流亡效果) for name, cost, nation, description, exile_nations in minor_nation_cards: card = UnitCard( name=name, cost=cost, nation=nation, rarity=Rarity.COMMON, unit_definition_id="ger_infantry_grenadier", exile_nations=exile_nations, description=description ) allied_cards.append(card) return allied_cards def create_test_deck_cards(major_nation: Nation, minor_nation: Nation) -> List[UnitCard]: """ 为指定的主国和盟国创建测试卡组 优先使用YAML卡牌,如果没有则使用占位卡牌 Args: major_nation: 主国 minor_nation: 盟国 Returns: 39张卡牌的列表 """ deck_cards = [] # 尝试从YAML加载卡牌 try: major_cards = load_nation_cards(major_nation) minor_cards = load_nation_cards(minor_nation) # 如果成功加载了YAML卡牌,使用YAML构建卡组 if major_cards and minor_cards: return _build_deck_from_yaml_cards(major_cards, minor_cards) except Exception as e: print(f"无法从YAML加载卡牌,使用占位卡牌: {e}") pass # 如果YAML加载失败,使用原来的占位卡牌逻辑 # 为德国创建特殊的卡组 if major_nation == Nation.GERMANY: # 创建德军卡牌模板 german_templates = [ ("德军掷弹兵A", 1, "基础德军步兵单位"), ("德军掷弹兵B", 1, "基础德军步兵单位"), ("德军掷弹兵C", 2, "经验丰富的德军步兵"), ("德军掷弹兵D", 2, "经验丰富的德军步兵"), ("德军精英掷弹兵A", 3, "精英德军步兵单位"), ("德军精英掷弹兵B", 3, "精英德军步兵单位"), ("德军老兵掷弹兵A", 2, "老兵德军步兵单位"), ("德军老兵掷弹兵B", 2, "老兵德军步兵单位"), ("德军突击掷弹兵", 3, "突击型德军步兵"), ] # 为每种卡牌添加3张(共27张主国卡) for name, cost, description in german_templates: for i in range(3): card = UnitCard( name=name, cost=cost, nation=Nation.GERMANY, rarity=Rarity.COMMON, unit_definition_id="ger_infantry_grenadier", description=description ) deck_cards.append(card) else: # 其他主国使用通用模板 major_templates = [ (f"{major_nation}步兵A", 1, "基础步兵单位"), (f"{major_nation}步兵B", 2, "经验丰富的步兵"), (f"{major_nation}精英步兵", 3, "精英步兵单位"), ] # 每种卡牌最多4张(稀有度限制),创建更多种类的卡牌 extended_major_templates = [ (f"{major_nation}步兵A", 1, "基础步兵单位"), (f"{major_nation}步兵B", 1, "基础步兵单位"), (f"{major_nation}步兵C", 1, "基础步兵单位"), (f"{major_nation}老兵A", 2, "经验丰富的步兵"), (f"{major_nation}老兵B", 2, "经验丰富的步兵"), (f"{major_nation}老兵C", 2, "经验丰富的步兵"), (f"{major_nation}精英A", 3, "精英步兵单位"), (f"{major_nation}精英B", 3, "精英步兵单位"), (f"{major_nation}精英C", 3, "精英步兵单位"), ] # 为每种卡牌创建3张,共27张主国卡 for name, cost, description in extended_major_templates: for i in range(3): card = UnitCard( name=name, cost=cost, nation=major_nation, rarity=Rarity.COMMON, unit_definition_id="ger_infantry_grenadier", description=description ) deck_cards.append(card) # 添加盟国卡牌(12张) minor_templates = [ (f"{minor_nation}支援步兵A", 1, "盟国支援步兵"), (f"{minor_nation}支援步兵B", 1, "盟国支援步兵"), (f"{minor_nation}支援步兵C", 2, "盟国支援步兵"), (f"{minor_nation}支援老兵", 2, "盟国支援老兵"), ] # 每种卡牌3张,共12张盟国卡 for name, cost, description in minor_templates: for i in range(3): card = UnitCard( name=name, cost=cost, nation=minor_nation, rarity=Rarity.COMMON, unit_definition_id="ger_infantry_grenadier", description=description ) deck_cards.append(card) return deck_cards[:39] # 确保只返回39张卡牌 def _build_deck_from_yaml_cards(major_cards: List[UnitCard], minor_cards: List[UnitCard]) -> List[UnitCard]: """ 从YAML加载的卡牌构建测试卡组 Args: major_cards: 主国卡牌列表 minor_cards: 盟国卡牌列表 Returns: 39张卡牌的测试卡组 """ deck_cards = [] # 主国卡牌(27张),根据稀有度限制添加 for card in major_cards: max_copies = min(card.stats.rarity.max_copies_in_deck(), 3) # 最多3张 for _ in range(max_copies): if len(deck_cards) < 27: deck_cards.append(card) # 如果主国卡不够27张,重复添加普通卡牌 common_major_cards = [c for c in major_cards if c.stats.rarity == Rarity.COMMON] while len(deck_cards) < 27 and common_major_cards: for card in common_major_cards: if len(deck_cards) < 27: deck_cards.append(card) else: break # 盟国卡牌(12张),根据稀有度限制添加 for card in minor_cards: max_copies = min(card.stats.rarity.max_copies_in_deck(), 3) # 最多3张 for _ in range(max_copies): if len(deck_cards) < 39: deck_cards.append(card) # 如果盟国卡不够12张,重复添加普通卡牌 common_minor_cards = [c for c in minor_cards if c.stats.rarity == Rarity.COMMON] while len(deck_cards) < 39 and common_minor_cards: for card in common_minor_cards: if len(deck_cards) < 39: deck_cards.append(card) else: break # 如果总数还不够39张,补充普通卡牌 all_common_cards = [c for c in major_cards + minor_cards if c.stats.rarity == Rarity.COMMON] while len(deck_cards) < 39 and all_common_cards: for card in all_common_cards: if len(deck_cards) < 39: deck_cards.append(card) else: break return deck_cards[:39] def create_sample_order_cards() -> List: """创建示例指令卡牌(暂时不实现,留作接口)""" # 后续实现指令卡牌时使用 return [] def create_sample_counter_cards() -> List: """创建示例反制卡牌(暂时不实现,留作接口)""" # 后续实现反制卡牌时使用 return []