/
evsyukov.s
/
DiceGame
Обзор
Документация
Войти
/
evsyukov.s
/
DiceGame
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
src/DicePoker.ConsoleApp/UI/MenuManager.cs
100 строк
4 KB
chernova.v
Добавлена обработка ошибок
20 дек 2025, 14:28
20 дек 2025, 14:28
9fe0ba8
Код
Авторство
О чём код?
using DicePoker.Core.Data.Abstractions; using DicePoker.Core.Services; namespace DicePoker.ConsoleApp.UI { /// <summary> /// Класс для управления отображением различных меню приложения. /// Отвечает за показ главного меню, таблицы рекордов и меню игровых действий. /// </summary> public class MenuManager { private readonly RecordsManagementService _recordsService; /// <summary> /// Инициализирует новый экземпляр класса MenuManager. /// </summary> public MenuManager(RecordsManagementService recordsService) { _recordsService = recordsService; } /// <summary> /// Отображает главное меню приложения и возвращает выбор пользователя. /// </summary> public string ShowMainMenu() { Console.Clear(); ConsoleUi.PrintHeader(); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("1) Новая игра"); Console.WriteLine("2) Загрузить игру"); Console.WriteLine("3) Таблица рекордов"); Console.WriteLine("4) Выход"); Console.ResetColor(); return InputHandler.ReadChoice(); } /// <summary> /// Отображает таблицу лучших рекордов и статистику. /// Показывает топ-10 игроков по очкам, а также общую статистику. /// </summary> public async Task ShowRecordsAsync() { Console.Clear(); ConsoleUi.PrintHeader(); // Получаем список лучших рекордов IReadOnlyList<RecordEntry> list = await _recordsService.GetTopRecordsAsync(); if (list.Count == 0) { // Если рекордов нет, выводим соответствующее сообщение Console.WriteLine("Пока пусто."); } else { // Выводим таблицу рекордов Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("\n=== Топ-10 рекордов ===\n"); Console.ResetColor(); int i = 1; foreach (RecordEntry r in list) { // Форматируем вывод: номер, имя игрока и его счет Console.WriteLine($"{i,2}. {r.PlayerName,-16} {r.Score,8}"); i++; } // Дополнительно показываем статистику рекордов RecordsStatistics stats = await _recordsService.GetStatisticsAsync(); Console.WriteLine($"\nВсего записей: {stats.TotalRecords}"); Console.WriteLine($"Наивысший счет: {stats.HighestScore}"); Console.WriteLine($"Средний счет: {stats.AverageScore}"); if (stats.TopPlayer != null) { Console.WriteLine($"Лидер: {stats.TopPlayer}"); } } // Ждем нажатия Enter для возврата в меню Console.WriteLine("\nEnter чтобы вернуться в меню."); Console.ReadLine(); } /// <summary> /// Отображает меню игровых действий. /// </summary> public void ShowGameActionsMenu() { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("\nВыберите действие:"); Console.WriteLine("1) Перебросить выбранные кости"); Console.WriteLine("2) Завершить ход"); Console.WriteLine("3) Сохранить игру"); Console.WriteLine("4) История"); Console.WriteLine("5) Отмена последнего действия (undo)"); Console.WriteLine("6) Выход в главное меню"); Console.ResetColor(); } } }