142 lines
5.5 KiB
Python
142 lines
5.5 KiB
Python
|
|
#!/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()
|