283 lines
9.8 KiB
Python
283 lines
9.8 KiB
Python
"""
|
|
参数化卡牌系统演示
|
|
展示新的参数化卡牌功能
|
|
"""
|
|
from kards_battle.cards.card_params import (
|
|
ParameterDefinition, ParameterType, TargetType, ZoneType, FilterType,
|
|
CardParameterValidator, CardParameterHelper
|
|
)
|
|
from kards_battle.cards.card import UnitCard
|
|
from kards_battle.core.enums import Nation, Rarity
|
|
|
|
|
|
def demo_parameter_definitions():
|
|
"""演示参数定义创建"""
|
|
print("=== 参数定义演示 ===")
|
|
|
|
# 1. 槽位参数
|
|
slot_param = ParameterDefinition(
|
|
name="position",
|
|
param_type=ParameterType.SLOT,
|
|
slot_range=[0, 4],
|
|
required=False,
|
|
description="Deploy position (0-4)"
|
|
)
|
|
print(f"1. 槽位参数: {slot_param.name} - {slot_param.description}")
|
|
|
|
# 2. HQ目标参数
|
|
hq_param = ParameterDefinition(
|
|
name="target_hq",
|
|
param_type=ParameterType.TARGET,
|
|
target_type=TargetType.HQ,
|
|
target_filter=FilterType.ANY,
|
|
required=True,
|
|
description="Select any HQ to target"
|
|
)
|
|
print(f"2. HQ目标参数: {hq_param.name} - {hq_param.description}")
|
|
|
|
# 3. 单位目标参数(带筛选)
|
|
unit_param = ParameterDefinition(
|
|
name="target_aircraft",
|
|
param_type=ParameterType.TARGET,
|
|
target_type=TargetType.UNIT,
|
|
valid_zones=[ZoneType.OWN, ZoneType.FRONT],
|
|
target_filter=FilterType.FRIENDLY,
|
|
unit_type_filter=["fighter", "bomber"],
|
|
nation_filter=["uk"],
|
|
required=True,
|
|
description="Select friendly British aircraft"
|
|
)
|
|
print(f"3. 单位目标参数: {unit_param.name} - {unit_param.description}")
|
|
print(f" 筛选条件: 友方 + 英国 + 空军单位")
|
|
|
|
# 4. 多目标参数
|
|
multi_param = ParameterDefinition(
|
|
name="targets",
|
|
param_type=ParameterType.MULTI_TARGET,
|
|
target_type=TargetType.UNIT,
|
|
valid_zones=[ZoneType.ENEMY, ZoneType.FRONT],
|
|
target_filter=FilterType.ENEMY,
|
|
min_count=1,
|
|
max_count=3,
|
|
required=True,
|
|
description="Select 1-3 enemy units"
|
|
)
|
|
print(f"4. 多目标参数: {multi_param.name} - {multi_param.description}")
|
|
print(f" 数量范围: {multi_param.min_count}-{multi_param.max_count}")
|
|
|
|
return [slot_param, hq_param, unit_param, multi_param]
|
|
|
|
|
|
def demo_parameter_validation():
|
|
"""演示参数验证"""
|
|
print("\n=== 参数验证演示 ===")
|
|
|
|
params = demo_parameter_definitions()
|
|
|
|
# 测试槽位参数验证
|
|
slot_param = params[0]
|
|
print(f"\n测试槽位参数: {slot_param.name}")
|
|
|
|
valid_slot = 2
|
|
invalid_slot = 5
|
|
|
|
print(f" 值 {valid_slot}: {'✓' if CardParameterValidator.validate_slot_parameter(slot_param, valid_slot) else '✗'}")
|
|
print(f" 值 {invalid_slot}: {'✓' if CardParameterValidator.validate_slot_parameter(slot_param, invalid_slot) else '✗'}")
|
|
|
|
# 测试HQ目标参数验证
|
|
hq_param = params[1]
|
|
print(f"\n测试HQ目标参数: {hq_param.name}")
|
|
|
|
valid_hq = {"player": 0}
|
|
invalid_hq = {"player": 2}
|
|
|
|
print(f" 值 {valid_hq}: {'✓' if CardParameterValidator.validate_target_parameter(hq_param, valid_hq) else '✗'}")
|
|
print(f" 值 {invalid_hq}: {'✓' if CardParameterValidator.validate_target_parameter(hq_param, invalid_hq) else '✗'}")
|
|
|
|
# 测试单位目标参数验证
|
|
unit_param = params[2]
|
|
print(f"\n测试单位目标参数: {unit_param.name}")
|
|
|
|
valid_unit = {"zone": "O", "slot": 1}
|
|
invalid_zone = {"zone": "E", "slot": 1} # 不在valid_zones中
|
|
invalid_slot = {"zone": "O", "slot": 5} # 槽位超范围
|
|
|
|
print(f" 值 {valid_unit}: {'✓' if CardParameterValidator.validate_target_parameter(unit_param, valid_unit) else '✗'}")
|
|
print(f" 值 {invalid_zone}: {'✓' if CardParameterValidator.validate_target_parameter(unit_param, invalid_zone) else '✗'}")
|
|
print(f" 值 {invalid_slot}: {'✓' if CardParameterValidator.validate_target_parameter(unit_param, invalid_slot) else '✗'}")
|
|
|
|
|
|
def demo_parameter_formatting():
|
|
"""演示参数值格式化"""
|
|
print("\n=== 参数格式化演示 ===")
|
|
|
|
params = demo_parameter_definitions()
|
|
|
|
# 格式化不同类型的参数值
|
|
print("参数值格式化:")
|
|
|
|
# 槽位参数
|
|
slot_value = 3
|
|
slot_formatted = CardParameterHelper.format_parameter_value(params[0], slot_value)
|
|
print(f" 槽位参数 {slot_value} → {slot_formatted}")
|
|
|
|
# HQ目标参数
|
|
hq_value = {"player": 1}
|
|
hq_formatted = CardParameterHelper.format_parameter_value(params[1], hq_value)
|
|
print(f" HQ目标 {hq_value} → {hq_formatted}")
|
|
|
|
# 单位目标参数
|
|
unit_value = {"zone": "F", "slot": 2}
|
|
unit_formatted = CardParameterHelper.format_parameter_value(params[2], unit_value)
|
|
print(f" 单位目标 {unit_value} → {unit_formatted}")
|
|
|
|
# 多目标参数
|
|
multi_value = [{"zone": "E", "slot": 0}, {"zone": "E", "slot": 3}]
|
|
multi_formatted = CardParameterHelper.format_parameter_value(params[3], multi_value)
|
|
print(f" 多目标 {multi_value} → {multi_formatted}")
|
|
|
|
|
|
def demo_parameterized_card_creation():
|
|
"""演示创建带参数的卡牌"""
|
|
print("\n=== 参数化卡牌创建演示 ===")
|
|
|
|
# 创建带参数的单位卡
|
|
parameters = [
|
|
ParameterDefinition(
|
|
name="position",
|
|
param_type=ParameterType.SLOT,
|
|
slot_range=[0, 4],
|
|
required=False,
|
|
description="Deploy position"
|
|
)
|
|
]
|
|
|
|
card = UnitCard(
|
|
name="Parameterized Grenadier",
|
|
cost=2,
|
|
nation=Nation.GERMANY,
|
|
rarity=Rarity.UNCOMMON,
|
|
unit_definition_id="ger_infantry_grenadier",
|
|
description="German infantry with customizable deployment",
|
|
parameters=parameters
|
|
)
|
|
|
|
print(f"创建卡牌: {card.name}")
|
|
print(f" 有参数: {'是' if card.has_parameters() else '否'}")
|
|
print(f" 参数数量: {len(card.parameters)}")
|
|
|
|
if card.has_parameters():
|
|
for param in card.parameters:
|
|
print(f" - {param.name}: {param.description}")
|
|
|
|
# 测试参数验证
|
|
print("\n测试卡牌参数验证:")
|
|
|
|
# 有效参数
|
|
valid_params = {"position": 2}
|
|
errors = card.validate_parameters(valid_params)
|
|
print(f" 有效参数 {valid_params}: {'✓' if not errors else '✗ ' + str(errors)}")
|
|
|
|
# 无效参数
|
|
invalid_params = {"position": 10}
|
|
errors = card.validate_parameters(invalid_params)
|
|
print(f" 无效参数 {invalid_params}: {'✓' if not errors else '✗ ' + str(errors)}")
|
|
|
|
# 缺少可选参数(应该通过)
|
|
empty_params = {}
|
|
errors = card.validate_parameters(empty_params)
|
|
print(f" 空参数 {empty_params}: {'✓' if not errors else '✗ ' + str(errors)}")
|
|
|
|
|
|
def demo_complex_parameterized_card():
|
|
"""演示复杂参数化卡牌"""
|
|
print("\n=== 复杂参数化卡牌演示 ===")
|
|
|
|
# 创建有多个复杂参数的指令卡(概念演示)
|
|
parameters = [
|
|
ParameterDefinition(
|
|
name="attacker",
|
|
param_type=ParameterType.TARGET,
|
|
target_type=TargetType.UNIT,
|
|
valid_zones=[ZoneType.OWN, ZoneType.FRONT],
|
|
target_filter=FilterType.FRIENDLY,
|
|
required=True,
|
|
description="Select attacking unit"
|
|
),
|
|
ParameterDefinition(
|
|
name="targets",
|
|
param_type=ParameterType.MULTI_TARGET,
|
|
target_type=TargetType.UNIT,
|
|
valid_zones=[ZoneType.ENEMY, ZoneType.FRONT],
|
|
target_filter=FilterType.ENEMY,
|
|
min_count=1,
|
|
max_count=2,
|
|
required=True,
|
|
description="Select 1-2 enemy targets"
|
|
),
|
|
ParameterDefinition(
|
|
name="bonus_damage",
|
|
param_type=ParameterType.VALUE,
|
|
min_value=1,
|
|
max_value=5,
|
|
default_value=2,
|
|
required=False,
|
|
description="Bonus damage (1-5)"
|
|
)
|
|
]
|
|
|
|
print("复杂指令卡: Coordinated Strike")
|
|
print("参数:")
|
|
for param in parameters:
|
|
req_str = "必需" if param.required else "可选"
|
|
print(f" - {param.name} ({param.param_type.value}, {req_str}): {param.description}")
|
|
|
|
# 测试复杂参数验证
|
|
print("\n复杂参数验证测试:")
|
|
|
|
valid_complex_params = {
|
|
"attacker": {"zone": "O", "slot": 1},
|
|
"targets": [{"zone": "E", "slot": 0}, {"zone": "E", "slot": 2}],
|
|
"bonus_damage": 3
|
|
}
|
|
|
|
errors = CardParameterValidator.validate_card_parameters(parameters, valid_complex_params)
|
|
print(f" 有效复杂参数: {'✓' if not errors else '✗ ' + str(errors)}")
|
|
|
|
# 格式化复杂参数显示
|
|
print("\n复杂参数格式化:")
|
|
for param_name, param_value in valid_complex_params.items():
|
|
param_def = next(p for p in parameters if p.name == param_name)
|
|
formatted = CardParameterHelper.format_parameter_value(param_def, param_value)
|
|
print(f" {param_name}: {formatted}")
|
|
|
|
|
|
def main():
|
|
"""主演示函数"""
|
|
print("🎮 KARDS 参数化卡牌系统演示")
|
|
print("="*50)
|
|
|
|
try:
|
|
demo_parameter_definitions()
|
|
demo_parameter_validation()
|
|
demo_parameter_formatting()
|
|
demo_parameterized_card_creation()
|
|
demo_complex_parameterized_card()
|
|
|
|
print("\n" + "="*50)
|
|
print("✅ 参数化卡牌系统演示完成!")
|
|
print("\n🎯 功能总结:")
|
|
print("• 支持多种参数类型:槽位、目标、多目标、数值、选择")
|
|
print("• 灵活的目标筛选:国家、单位类型、区域、敌友")
|
|
print("• 完整的参数验证系统")
|
|
print("• 友好的参数格式化显示")
|
|
print("• 与现有卡牌系统完全兼容")
|
|
|
|
except Exception as e:
|
|
print(f"\n❌ 演示过程中出现错误: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |