/
Landilf
/
2413_Ryumin_CourseWork
Обзор
Документация
Войти
/
Landilf
/
2413_Ryumin_CourseWork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
CourseWork/ConsoleUI/Views/GameView.cs
117 строк
3 KB
Landilf
add project
27 янв 2026, 13:57
27 янв 2026, 13:57
753b3e7
Код
Авторство
О чём код?
using GameCore.Controllers; using GameCore.Entities; namespace ConsoleUI.Views; /// <summary> /// Представление игрового процесса. /// </summary> public class GameView { #region Поля /// <summary> /// Низкоуровневый рендерер консоли. /// </summary> private readonly ConsoleRenderer _renderer; /// <summary> /// Последнее отрисованное значение обратного отсчета. /// </summary> private int _lastDrawnCountdown = -1; #endregion #region Конструкторы /// <summary> /// Конструктор представления игры. /// </summary> public GameView() { _renderer = new ConsoleRenderer(); _renderer.Init(); } #endregion #region Методы /// <summary> /// Инициализирует рендерер. /// </summary> public void Init() { _renderer.Init(); } /// <summary> /// Отрисовывает игровой кадр. /// </summary> /// <param name="parController">Контроллер игры.</param> /// <param name="parHumanPlayer">Объект игрока-человека.</param> public void Draw(GameController parController, Player parHumanPlayer) { var currentCountdown = parController.Session.CountdownValue; bool isCountdown = parController.Session.IsCountdownActive; // Оптимизация: если идет отсчет, рисуем только при изменении цифры if (isCountdown && currentCountdown == _lastDrawnCountdown) { return; } if (isCountdown) { _lastDrawnCountdown = currentCountdown; } else { _lastDrawnCountdown = -1; } lock (parController.SyncRoot) { _renderer.DrawGame(parController.Engine, parHumanPlayer); } if (isCountdown) { DrawCountdownOverlay(currentCountdown); } } /// <summary> /// Отрисовывает цифру обратного отсчета поверх игры. /// </summary> /// <param name="parSeconds">Секунды для отображения.</param> private void DrawCountdownOverlay(int parSeconds) { string text = $" {parSeconds} "; int x = 14; // Примерно центр ViewportWidth int y = 12; // Примерно центр ViewportHeight try { Console.SetCursorPosition(x, y); Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; Console.Write(text); Console.ResetColor(); } catch { // Игнорируем ошибки курсора при ресайзе окна } } /// <summary> /// Сбрасывает состояние отрисовки. /// </summary> public void Reset() { _lastDrawnCountdown = -1; } #endregion }