/
puma
/
ppa
Обзор
Документация
Войти
/
puma
/
ppa
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Commands/PlayToEndCommand.cs
59 строк
2 KB
Margarita
new
29 май 2026, 17:05
29 май 2026, 17:05
cc969a9
Код
Авторство
О чём код?
/// <summary> /// Команда «До конца»: прокручивает бой до победы или ничьей без остановок. /// Поддерживает отмену — перед запуском сохраняет снимок состояния, /// позволяя вернуться к моменту нажатия кнопки. /// </summary> public class PlayToEndCommand : 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 PlayToEndCommand(Battle battle) { _battle = battle; } /// <summary> /// Сохраняет снимок и запускает автопрогон до конца боя. /// </summary> public void Execute() { _snapshot = _battle.TakeSnapshot(); BattleEnded = false; IsDraw = false; Winner = null; var result = _battle.RunToCompletion(); BattleEnded = true; if (result.Outcome == RoundOutcome.Winner) Winner = result.Winner; else IsDraw = true; } /// <summary> /// Восстанавливает состояние боя до начала автопрогона. /// </summary> public void Undo() { if (_snapshot == null) return; _battle.RestoreFromSnapshot(_snapshot); BattleEnded = false; IsDraw = false; Winner = null; } }