139 lines
3.8 KiB
Python
139 lines
3.8 KiB
Python
"""
|
|
国家配置管理
|
|
"""
|
|
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 |