/
expens1ve
/
project_war
Обзор
Документация
Войти
/
expens1ve
/
project_war
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Engine/GameEngine.cs
74 строки
2 KB
Lawrence_20
Add draw detection after 10 rounds without HP change
29 апр 2026, 01:13
29 апр 2026, 01:13
7b5810d
Код
Авторство
О чём код?
using System; using project_war.Engine.Interfaces; using project_war.Models.Interfaces; namespace project_war.Engine { public class GameEngine : IGameEngine { public event Action<IArmy>? OnGameOver; public event Action<string>? OnDraw; public bool IsGameOver => _army1?.IsDefeated == true || _army2?.IsDefeated == true; public bool IsDraw { get; private set; } private IArmy? _army1; private IArmy? _army2; private Battlefield? _battlefield; private DrawDetector _drawDetector; public GameEngine() { _drawDetector = new DrawDetector(); IsDraw = false; } public void StartGame(IArmy army1, IArmy army2) { _army1 = army1 ?? throw new ArgumentNullException(nameof(army1)); _army2 = army2 ?? throw new ArgumentNullException(nameof(army2)); _battlefield = new Battlefield(_army1, _army2); _drawDetector.Initialize(_army1, _army2); IsDraw = false; } public void PlayTurn() { if (_battlefield == null) throw new InvalidOperationException("Вызовите StartGame сначала."); if (IsGameOver || IsDraw) return; _battlefield.ResolveCombat(); if (IsGameOver) { IArmy winner = _army1?.IsDefeated == true ? _army2! : _army1!; OnGameOver?.Invoke(winner); return; } // КОНЕЦ РАУНДА - проверяем ничью CheckDrawCondition(); } private void CheckDrawCondition() { if (_army1 == null || _army2 == null) return; if (_drawDetector.CheckDraw(_army1, _army2)) { IsDraw = true; OnDraw?.Invoke($"НИЧЬЯ! {_drawDetector.GetMaxRoundsWithoutDamage()} раундов без изменения здоровья."); } } public IBattlefield? GetBattlefield() => _battlefield; public int GetRoundsWithoutDamage() => _drawDetector.GetRoundsWithoutDamage(); public int GetMaxRoundsWithoutDamage() => _drawDetector.GetMaxRoundsWithoutDamage(); } }