308 lines
11 KiB
Python
308 lines
11 KiB
Python
|
|
"""
|
|||
|
|
占位卡牌定义 - 用于测试卡牌系统
|
|||
|
|
"""
|
|||
|
|
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 []
|