""" 国家配置管理 """ from typing import Dict, Optional from ..core.enums import Nation class NationConfig: """国家配置类""" # 国家首都映射 CAPITAL_CITIES = { Nation.GERMANY: "Berlin", Nation.USA: "Washington", Nation.UK: "London", Nation.JAPAN: "Tokyo", Nation.SOVIET: "Moscow", Nation.FINLAND: "Helsinki", Nation.POLAND: "Warsaw", Nation.FRANCE: "Paris", Nation.ITALY: "Rome" } # 国家中文名映射 NATION_CHINESE_NAMES = { Nation.GERMANY: "德国", Nation.USA: "美国", Nation.UK: "英国", Nation.JAPAN: "日本", Nation.SOVIET: "苏联", Nation.FINLAND: "芬兰", Nation.POLAND: "波兰", Nation.FRANCE: "法国", Nation.ITALY: "意大利" } @classmethod def get_capital(cls, nation: Nation) -> str: """获取国家首都""" return cls.CAPITAL_CITIES.get(nation, "Unknown") @classmethod def get_chinese_name(cls, nation: Nation) -> str: """获取国家中文名""" return cls.NATION_CHINESE_NAMES.get(nation, str(nation)) @classmethod def is_valid_major_minor_combo(cls, major: Nation, minor: Nation) -> bool: """ 检查主国和盟国组合是否有效 Args: major: 主国 minor: 盟国 Returns: 是否为有效组合 """ # 主国必须是Major国家 if major not in Nation.get_majors(): return False # 盟国必须在所有国家中 if minor not in Nation.get_all(): return False # 主国和盟国不能相同 if major == minor: return False return True @classmethod def get_hq_name(cls, nation: Nation) -> str: """ 获取国家的HQ名称 Args: nation: 国家 Returns: HQ名称 """ capital = cls.get_capital(nation) chinese_name = cls.get_chinese_name(nation) return f"{capital} HQ ({chinese_name})" @classmethod def validate_deck_composition(cls, major: Nation, minor: Nation) -> Dict[str, any]: """ 验证卡组构成的国家配置 Args: major: 主国 minor: 盟国 Returns: 验证结果字典 """ result = { 'valid': True, 'errors': [], 'warnings': [], 'info': {} } # 检查主国 if major not in Nation.get_majors(): result['valid'] = False result['errors'].append(f"主国 {major} 不在允许的主要国家列表中") # 检查盟国 if minor not in Nation.get_all(): result['valid'] = False result['errors'].append(f"盟国 {minor} 不是有效的国家") # 检查是否相同 if major == minor: result['valid'] = False result['errors'].append("主国和盟国不能相同") # 添加信息 if result['valid']: result['info'] = { 'major_nation': { 'name': major, 'chinese_name': cls.get_chinese_name(major), 'capital': cls.get_capital(major), 'hq_name': cls.get_hq_name(major) }, 'minor_nation': { 'name': minor, 'chinese_name': cls.get_chinese_name(minor), 'capital': cls.get_capital(minor), 'hq_name': cls.get_hq_name(minor) } } return result