/
anstyfil
/
Minesweeper
Обзор
Документация
Войти
/
anstyfil
/
Minesweeper
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Program.cs
86 строк
4 KB
anstyfil
handle edge cases and error scenarios
18 дек 2025, 14:00
18 дек 2025, 14:00
dcc8e20
Код
Авторство
О чём код?
using Minesweeper.UI; using Minesweeper.UI.Gui; using Terminal.Gui; // Точка входа, выбор интерфейса Console.WriteLine("Выберите интерфейс:"); Console.WriteLine("1 - GUI"); Console.WriteLine("2 - Консоль"); Console.Write("Ваш выбор: "); string? choice = Console.ReadLine(); switch (choice) { case "1": // Проверка минимального размера терминала перед инициализацией GUI int minWidth = 60; int minHeight = 20; // Получаем размер терминала (если доступно) try { int terminalWidth = Console.WindowWidth; int terminalHeight = Console.WindowHeight; if (terminalWidth < minWidth || terminalHeight < minHeight) { Console.WriteLine($"\n⚠️ ВНИМАНИЕ: Размер терминала слишком мал!"); Console.WriteLine($"Текущий размер: {terminalWidth}x{terminalHeight}"); Console.WriteLine($"Рекомендуемый минимальный размер: {minWidth}x{minHeight}"); Console.WriteLine("\nПопробуйте увеличить размер окна терминала."); Console.WriteLine("Нажмите Enter для продолжения (может работать некорректно) или Ctrl+C для выхода..."); Console.ReadLine(); } } catch { // Если не удалось получить размер терминала, продолжаем // (может быть недоступно в некоторых окружениях) } // Инициализация Terminal.Gui Application.Init(); // Обработка Ctrl+C для GUI режима // Устанавливаем обработчик ДО запуска Application.Run() Console.CancelKeyPress += (sender, e) => { // Отменяем стандартное поведение (немедленное завершение) e.Cancel = true; // Выполняем обработку в главном потоке GUI Application.MainLoop.Invoke(() => { // Показываем диалог подтверждения int result = MessageBox.Query(55, 8, "Подтверждение выхода", "Вы уверены, что хотите выйти из приложения?\n\nНажата комбинация Ctrl+C.\n\nВсе несохраненные данные будут потеряны.", "Да, выйти", "Отмена"); if (result == 0) // "Да, выйти" { // Завершаем работу приложения Application.RequestStop(); } // Если "Отмена", остаемся в приложении }); }; // Создаем и показываем главное окно var mainWindow = new MainWindow(); Application.Top.Add(mainWindow); // Запускаем главный цикл приложения Application.Run(); // Завершаем работу Terminal.Gui при выходе Application.Shutdown(); break; case "2": Menu.Run(); break; default: Console.WriteLine("Неверный выбор. Запускается консольный интерфейс."); Menu.Run(); break; }