/
puma
/
ppa
Обзор
Документация
Войти
/
puma
/
ppa
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Commands/MakeRoundCommand.cs
68 строк
2 KB
Margarita
new
29 май 2026, 17:05
29 май 2026, 17:05
cc969a9
Код
Авторство
О чём код?
/// <summary> /// Команда «Сделать ход»: выполняет один раунд боя с поддержкой отмены. /// Перед выполнением сохраняет снимок состояния через TakeSnapshot(), /// который используется в Undo() для полного восстановления. /// </summary> public class MakeRoundCommand : IGameCommand { private readonly Battle _battle; private BattleSnapshot? _snapshot; public string Name => "Сделать ход"; /// <summary>Отмена доступна после первого выполнения (снимок сохранён).</summary> public bool CanUndo => _snapshot != null; /// <summary>Завершился ли бой после выполнения команды.</summary> public bool BattleEnded { get; private set; } /// <summary>Закончилось ли ничьёй.</summary> public bool IsDraw { get; private set; } /// <summary>Победитель или null, если бой не завершён / ничья.</summary> public Player? Winner { get; private set; } public MakeRoundCommand(Battle battle) { _battle = battle; } /// <summary> /// Сохраняет снимок состояния, выполняет раунд и переключает ход на другого игрока. /// </summary> public void Execute() { _snapshot = _battle.TakeSnapshot(); BattleEnded = false; IsDraw = false; Winner = null; var result = _battle.ExecuteRound(); if (result.Outcome == RoundOutcome.Winner) { BattleEnded = true; Winner = result.Winner; } else if (result.Outcome == RoundOutcome.Draw) { BattleEnded = true; IsDraw = true; } else { _battle.SwitchPlayers(); } } /// <summary> /// Восстанавливает состояние боя из снимка, сделанного перед ходом. /// </summary> public void Undo() { if (_snapshot == null) return; _battle.RestoreFromSnapshot(_snapshot); BattleEnded = false; IsDraw = false; Winner = null; } }