kards-env/demo/demo_new_features.py

142 lines
5.5 KiB
Python
Raw Permalink Normal View History

2025-09-05 17:05:43 +08:00
#!/usr/bin/env python3
"""
新功能演示指定位置部署 + 修正的回合系统
"""
import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
from kards_battle.core.battle_engine import BattleEngine
from kards_battle.examples.sample_units import *
from kards_battle.units.unit_loader import load_unit, list_all_units
def demo_position_deployment():
"""演示指定位置部署功能"""
print("🎯 指定位置部署功能演示")
print("=" * 40)
engine = BattleEngine("Germany", "USA", debug_mode=True)
# 创建单位 - 使用YAML加载器
panzer = load_unit("ger_tank_panzer_iv")
panzer.name = "Panzer IV (YAML)"
infantry1 = load_unit("ger_infantry_grenadier")
infantry1.name = "Infantry A (YAML)"
infantry2 = load_unit("ger_infantry_stormtrooper")
infantry2.name = "Infantry B (YAML)"
print("初始战场:")
print(engine.battlefield)
# 部署1: 默认位置(末尾)
result1 = engine.deploy_unit_to_support(infantry1, 0)
print(f"\n部署Infantry A到默认位置: {result1['success']}")
print(f" 实际位置: {result1['position']}")
print(engine.battlefield)
# 部署2: 指定位置1中间插入
result2 = engine.deploy_unit_to_support(panzer, 0, position=1)
print(f"\n部署Panzer IV到位置1: {result2['success']}")
print(f" 实际位置: {result2['position']}")
print(engine.battlefield)
# 部署3: 指定位置0最前面
result3 = engine.deploy_unit_to_support(infantry2, 0, position=0)
print(f"\n部署Infantry B到位置0: {result3['success']}")
print(f" 实际位置: {result3['position']}")
print(engine.battlefield)
print("\n✅ 演示结果:单位按指定位置正确插入,其他单位自动后移")
def demo_turn_system():
"""演示修正的回合系统"""
print("\n🔄 修正的回合系统演示")
print("=" * 40)
engine = BattleEngine("Germany", "USA", debug_mode=True)
print(f"初始状态: 回合{engine.current_turn}.{engine.turn_phase} - 玩家{engine.active_player}")
print(f"德军资源: Kredits={engine.get_kredits(0)}, Slot={engine.get_kredits_slot(0)}")
print(f"美军资源: Kredits={engine.get_kredits(1)}, Slot={engine.get_kredits_slot(1)}")
# 进行几个回合
for i in range(6):
result = engine.end_turn()
print(f"\nStep {i+1}: 回合{result['turn_number']}.{result['turn_phase']} - {result['new_active_player']}")
print(f" 新回合标记: {'🆕' if result['is_new_round'] else ' '}")
print(f" 当前玩家资源: Kredits={result['kredits']}, Slot={result['kredits_slot']}")
# 显示双方资源状态
if i % 2 == 0: # 每完成一轮显示双方状态
print(f" >>> 完成回合{result['turn_number']} <<<")
print(f" 德军: Kredits={engine.get_kredits(0)}, Slot={engine.get_kredits_slot(0)}")
print(f" 美军: Kredits={engine.get_kredits(1)}, Slot={engine.get_kredits_slot(1)}")
print(f"\n✅ 演示结果双方共同执行一轮为一个回合Kredits Slot每轮增长")
def demo_yaml_units():
"""演示YAML单位系统"""
print("\n📁 YAML单位系统演示")
print("=" * 40)
# 列出所有可用单位
all_units = list_all_units()
print(f"✅ 从YAML文件加载了 {len(all_units)} 个单位定义:")
# 按国家分组显示
germany_units = [unit_id for unit_id in all_units if unit_id.startswith('ger_')]
usa_units = [unit_id for unit_id in all_units if unit_id.startswith('usa_')]
print(f"\n🇩🇪 德军单位 ({len(germany_units)}个):")
for unit_id in sorted(germany_units):
unit = load_unit(unit_id)
print(f"{unit_id}: {unit.name} ({unit.unit_type.name}) {unit.stats.attack}/{unit.stats.defense}")
print(f"\n🇺🇸 美军单位 ({len(usa_units)}个):")
for unit_id in sorted(usa_units):
unit = load_unit(unit_id)
print(f"{unit_id}: {unit.name} ({unit.unit_type.name}) {unit.stats.attack}/{unit.stats.defense}")
# 演示YAML单位的详细属性
print(f"\n🔍 德军闪击步兵详细信息:")
blitz_unit = load_unit("ger_infantry_15th_cavalry")
print(f" 名称: {blitz_unit.name}")
print(f" 国家: {blitz_unit.nation}")
print(f" 类型: {blitz_unit.unit_type.name}")
print(f" 属性: 攻击{blitz_unit.stats.attack}/防御{blitz_unit.stats.defense}")
print(f" 费用: {blitz_unit.stats.operation_cost}")
print(f" 关键词: {list(blitz_unit.keywords)}")
print(f" 能力: {len(blitz_unit.abilities)}")
print(f" 定义ID: {blitz_unit.definition_id}")
print(f"\n✅ YAML系统优势:")
print(f" • 数据与代码分离,易于修改平衡性")
print(f" • 支持多国家单位系统")
print(f" • 标准化的单位定义格式")
print(f" • 自动类型验证和错误检测")
def main():
"""主演示函数"""
print("🚀 新功能综合演示")
print("=" * 50)
demo_yaml_units()
demo_position_deployment()
demo_turn_system()
print(f"\n🎉 演示完成!新功能包括:")
print(f" 1. YAML单位系统游戏数据与引擎代码分离")
print(f" 2. 指定位置部署:可以将单位部署到支援线的任意位置")
print(f" 3. 修正回合系统:双方共同行动才算一个完整回合")
print(f" 4. 正确的资源增长:每个玩家在轮到自己时获得资源")
if __name__ == "__main__":
main()