kards-env/kards_battle/game/nation_config.py

139 lines
3.8 KiB
Python
Raw Permalink Normal View History

2025-09-05 17:05:43 +08:00
"""
国家配置管理
"""
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