kards-env/demo/demo_new_features.py

142 lines
5.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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