diff --git a/Core/Program.cs b/Core/Program.cs index cffc3d6..5d89c56 100644 --- a/Core/Program.cs +++ b/Core/Program.cs @@ -34,8 +34,8 @@ class Program mainMenu.AddOption("About me", () => PrintAboutMe()); mainMenu.AddOption("Array sort", () => new ArraySortDemo().Run()); mainMenu.AddOption("Snake game", () => { - SnakeGame game = new SnakeGame(difficulty, sizex, sizey); - game.start(); + mainMenuForm.Hide(); + snakeDiffMenuForm.Show(); }); mainMenu.AddOption("Exit", () => Exit()); @@ -44,8 +44,13 @@ class Program Utils.Arrays withTwoParams = new Utils.Arrays(10, 100); mainMenuForm = new MenuForm(mainMenu); - snakeDiffMenuForm = new MenuForm(difficultyMenu); - snakeSizeMenuForm = new MenuForm(sizeMenu); + snakeDiffMenuForm = new MenuForm(difficultyMenu, () => { snakeDiffMenuForm.SwitchToForm(snakeSizeMenuForm); }); + snakeSizeMenuForm = new MenuForm(sizeMenu, () => + { + SnakeGame game = new SnakeGame(difficulty, sizex, sizey); + game.start(); + snakeSizeMenuForm.SwitchToForm(mainMenuForm); + }); Application.Run(mainMenuForm); diff --git a/GUI/MenuForm.cs b/GUI/MenuForm.cs index d66e70c..0f4f035 100644 --- a/GUI/MenuForm.cs +++ b/GUI/MenuForm.cs @@ -21,6 +21,22 @@ namespace ProgLab1.GUI this.Width = 800; this.Height = 600; AddMenu(consoleMenu); + this.FormClosing += new FormClosingEventHandler((object sender, FormClosingEventArgs e) => { e.Cancel = true; }); + } + + public MenuForm(Menu consoleMenu, Action onAny) + { + InitializeComponent(); + this.Width = 800; + this.Height = 600; + AddMenu(consoleMenu, onAny); + this.FormClosing += new FormClosingEventHandler((object sender, FormClosingEventArgs e) => { e.Cancel = true; }); + } + + public void SwitchToForm(Form form) + { + form.Show(); + this.Hide(); } /// @@ -66,5 +82,61 @@ namespace ProgLab1.GUI this.Controls.Add(buttonPanel); } + + private void AddMenu(Menu consoleMenu, Action onAny) + { + + FlowLayoutPanel buttonPanel = new FlowLayoutPanel + { + Dock = DockStyle.Fill, // Растягиваем на всю форму + FlowDirection = FlowDirection.TopDown, // Кнопки располагаются сверху вниз + WrapContents = false // Запрет переноса + }; + + Label menuLabel = new Label + { + Text = consoleMenu.GetTitle(), // Текст заголовка + Font = new System.Drawing.Font("Arial", 16, System.Drawing.FontStyle.Bold), // Стиль шрифта + TextAlign = System.Drawing.ContentAlignment.MiddleCenter, // Выравнивание текста по центру + Dock = DockStyle.Top, // Заголовок сверху + Height = 40 // Высота заголовка + }; + + buttonPanel.Controls.Add(menuLabel); + + foreach (MenuOption option in consoleMenu.GetOptions()) + { + Button button = new Button + { + Text = option.Name, + Width = buttonPanel.Width - 10, + Height = 40, + Margin = new Padding(5), + }; + + // Связываем обработчик с OnSelect из консольного меню + button.Click += (sender, e) => option.Action(); + button.Click += (sender, e) => onAny(); + + buttonPanel.Controls.Add(button); + } + + this.Controls.Add(buttonPanel); + } + + private void FormClosingHandler(object sender, FormClosingEventArgs e) + { + // Предотвращаем закрытие окна + DialogResult result = MessageBox.Show("Вы уверены, что хотите закрыть окно?", "Подтверждение", MessageBoxButtons.YesNo); + + if (result == DialogResult.No) + { + e.Cancel = true; // Отменяем закрытие окна + } + else + { + e.Cancel = false; // Разрешаем закрытие окна + } + } } }