/
Landilf
/
2413_Ryumin_CourseWork
Обзор
Документация
Войти
/
Landilf
/
2413_Ryumin_CourseWork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
CourseWork/ConsoleUI/Flow/ConsoleGameGameplay.cs
106 строк
3 KB
Landilf
add project
27 янв 2026, 13:57
27 янв 2026, 13:57
753b3e7
Код
Авторство
О чём код?
using GameCore.Enums; using ConsoleUI.Enums; namespace ConsoleUI.Flow; /// <summary> /// Часть класса, отвечающая за игровой цикл. /// </summary> public static partial class ConsoleGame { #region Методы /// <summary> /// Инициализирует и запускает новую игру. /// </summary> private static void StartGame() { _controller?.StartGame(); _gameView?.Reset(); _currentState = AppState.Game; } /// <summary> /// Запускает основной процесс игры (главный поток ввода). /// </summary> private static void RunGame() { Console.Clear(); _gameView?.Reset(); // Loop is started by StartGame() inside Controller.StartGame() while (_currentState == AppState.Game) { var cmd = ConsoleInput.GetCommand(); if (!_controller!.Session.IsCountdownActive) { switch (cmd) { case InputCommand.Cancel: // Пауза lock (_controller.SyncRoot) { _controller.Pause(); } _controller.StopGame(); // Останавливаем цикл _currentState = AppState.Pause; return; case InputCommand.Up: lock (_controller.SyncRoot) _controller.HandleInput(Direction.Up); break; case InputCommand.Down: lock (_controller.SyncRoot) _controller.HandleInput(Direction.Down); break; case InputCommand.Left: lock (_controller.SyncRoot) _controller.HandleInput(Direction.Left); break; case InputCommand.Right: lock (_controller.SyncRoot) _controller.HandleInput(Direction.Right); break; case InputCommand.CheatVictory: lock (_controller.SyncRoot) _controller.CheatVictory(); break; } } // Проверка окончания игры GameState? state; lock (_controller.SyncRoot) state = _controller.State; if (state == GameState.GameOver) { _controller.StopGame(); _currentState = AppState.GameOver; return; } if (state == GameState.Victory) { _controller.StopGame(); _currentState = AppState.Victory; return; } Thread.Sleep(10); } } /// <summary> /// Обработчик события отрисовки кадра (вызывается из контроллера). /// </summary> private static void OnRenderFrame() { if (_currentState != AppState.Game) { return; } var human = _controller?.Engine.Players.FirstOrDefault(p => !p.IsBot); if (human != null && _gameView != null && _controller != null) { _gameView.Draw(_controller, human); } } #endregion }