#!/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()