kards-env/demo/demo_card_system.py

212 lines
7.1 KiB
Python
Raw Permalink Normal View History

2025-09-05 17:05:43 +08:00
"""
卡牌系统演示
"""
import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
from kards_battle.core.enums import Nation
from kards_battle.game.game_engine import GameEngine
from kards_battle.cards.placeholder_cards import create_placeholder_unit_cards
def demo_basic_card_system():
"""演示基础卡牌系统功能"""
print("=== 卡牌系统演示 ===")
# 1. 创建占位卡牌
print("\n1. 创建占位卡牌")
cards = create_placeholder_unit_cards()
print(f"创建了 {len(cards)} 张占位卡牌:")
for i, card in enumerate(cards[:3]): # 只显示前3张
print(f" {i+1}. {card}")
print(f" ... 还有 {len(cards)-3} 张卡牌")
# 2. 创建游戏引擎和测试游戏
print("\n2. 创建游戏引擎")
engine = GameEngine(debug_mode=True)
game_state = engine.create_test_game(
"德军指挥官", Nation.GERMANY, Nation.ITALY,
"美军指挥官", Nation.USA, Nation.UK
)
print(f"游戏创建成功:")
print(f" 玩家1: {game_state.player1.name} ({game_state.player1.major_nation}/{game_state.player1.minor_nation})")
print(f" 玩家2: {game_state.player2.name} ({game_state.player2.major_nation}/{game_state.player2.minor_nation})")
# 3. 显示初始手牌
print("\n3. 初始手牌")
player1_hand = engine.get_player_hand(0)
player2_hand = engine.get_player_hand(1)
print(f"玩家1手牌 ({len(player1_hand)}张):")
for card in player1_hand:
print(f" - {card}")
print(f"玩家2手牌 ({len(player2_hand)}张):")
for card in player2_hand:
print(f" - {card}")
return engine, game_state
def demo_strategic_deployment():
"""演示战略调度阶段"""
print("\n=== 战略调度阶段演示 ===")
engine, game_state = demo_basic_card_system()
# 玩家1进行战略调度 - 不重抽任何牌
print("\n1. 玩家1战略调度不重抽")
new_cards = engine.perform_strategic_deployment(0, [])
print(f"玩家1没有重抽任何卡牌")
# 玩家2进行战略调度 - 重抽2张牌
print("\n2. 玩家2战略调度重抽2张牌")
player2_hand = engine.get_player_hand(1)
cards_to_mulligan = player2_hand[:2]
print("重抽前的卡牌:")
for card in cards_to_mulligan:
print(f" - {card}")
new_cards = engine.perform_strategic_deployment(1, cards_to_mulligan)
print("重抽后的新卡牌:")
for card in new_cards:
print(f" - {card}")
return engine, game_state
def demo_main_game_flow():
"""演示正式游戏流程"""
print("\n=== 正式游戏流程演示 ===")
engine, game_state = demo_strategic_deployment()
# 开始正式游戏
print("\n开始正式游戏")
engine.start_main_game()
# 显示游戏统计信息
stats = engine.get_game_statistics()
print(f"\n当前游戏状态:")
print(f" 回合: {stats['current_turn']}")
print(f" 阶段: {stats['phase']}")
print(f" 当前玩家: {stats['active_player']}")
# 显示双方资源状态
print(f"\n玩家1状态:")
print(f" Kredits: {stats['player1_stats']['kredits']}")
print(f" 手牌: {stats['player1_stats']['card_stats']['hand_size']}")
print(f" 牌库: {stats['player1_stats']['card_stats']['cards_in_deck']}")
print(f"\n玩家2状态:")
print(f" Kredits: {stats['player2_stats']['kredits']}")
print(f" 手牌: {stats['player2_stats']['card_stats']['hand_size']}")
print(f" 牌库: {stats['player2_stats']['card_stats']['cards_in_deck']}")
return engine, game_state
def demo_card_playing():
"""演示打牌功能"""
print("\n=== 打牌功能演示 ===")
engine, game_state = demo_main_game_flow()
# 玩家1的回合
current_player_id = game_state.active_player_id
current_player = game_state.get_current_player()
print(f"\n{current_player.name} 的回合")
print(f"可用Kredits: {current_player.kredits}")
# 获取可打出的卡牌
playable_cards = engine.get_playable_cards(current_player_id)
print(f"可打出的卡牌 ({len(playable_cards)}张):")
for card in playable_cards:
print(f" - {card}")
# 尝试打出一张单位卡
if playable_cards:
card_to_play = None
for card in playable_cards:
if hasattr(card, 'unit_definition_id'): # 找到一张单位卡
card_to_play = card
break
if card_to_play:
print(f"\n尝试打出: {card_to_play}")
initial_kredits = current_player.kredits
success = engine.play_unit_card(current_player_id, card_to_play)
if success:
final_kredits = current_player.kredits
print(f"打牌成功!")
print(f" 消耗Kredits: {card_to_play.stats.cost}")
print(f" 剩余Kredits: {final_kredits}")
# 显示战场状态
battlefield_state = engine.get_battlefield_state()
print(f"\n战场状态:")
if current_player_id == 0:
units = battlefield_state['player1_support']['units']
print(f" 玩家1支援线: {len(units)}个单位")
for unit in units[-1:]: # 显示最后部署的单位
print(f" - {unit}")
else:
units = battlefield_state['player2_support']['units']
print(f" 玩家2支援线: {len(units)}个单位")
for unit in units[-1:]: # 显示最后部署的单位
print(f" - {unit}")
else:
print("打牌失败!")
return engine, game_state
def demo_turn_progression():
"""演示回合进行"""
print("\n=== 回合进行演示 ===")
engine, game_state = demo_card_playing()
# 结束当前玩家回合
current_player = game_state.get_current_player()
print(f"\n{current_player.name} 结束回合")
engine.end_turn(game_state.active_player_id)
# 显示新的回合状态
stats = engine.get_game_statistics()
print(f"\n新回合状态:")
print(f" 回合: {stats['current_turn']}")
print(f" 当前玩家: {stats['active_player']}")
new_current_player = game_state.get_current_player()
print(f" {new_current_player.name} 的Kredits: {new_current_player.kredits}")
print(f" 手牌数量: {len(engine.get_player_hand(game_state.active_player_id))}")
def main():
"""主演示函数"""
try:
demo_basic_card_system()
demo_strategic_deployment()
demo_main_game_flow()
demo_card_playing()
demo_turn_progression()
print("\n=== 演示完成 ===")
print("卡牌系统基本功能正常运行!")
except Exception as e:
print(f"\n演示过程中出现错误: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
main()