From 797ece09dafc653e2029336d9186c40ec2122d48 Mon Sep 17 00:00:00 2001 From: DamianKomdeur <77113617+DamianKomdeur@users.noreply.github.com> Date: Mon, 9 Dec 2024 00:38:51 +0100 Subject: [PATCH] Sudoku Generator Sudoku Generator + Manual placement + Small settings fixes (Now all menu items change color correctly and the settings are accessible from a puzzleform) --- PuzzlePlayer/PuzzleForm.cs | 29 ++- PuzzlePlayer/PuzzlePlayer.cs | 10 +- PuzzlePlayer/Resources/Sudoku.jpg | Bin 0 -> 27150 bytes PuzzlePlayer/Resources/SudokuGray.jpg | Bin 0 -> 25134 bytes PuzzlePlayer/SettingForm.cs | 38 +++- PuzzlePlayer/Sudoku.cs | 284 ++++++++++++++++++++++++++ 6 files changed, 354 insertions(+), 7 deletions(-) create mode 100644 PuzzlePlayer/Resources/Sudoku.jpg create mode 100644 PuzzlePlayer/Resources/SudokuGray.jpg create mode 100644 PuzzlePlayer/Sudoku.cs diff --git a/PuzzlePlayer/PuzzleForm.cs b/PuzzlePlayer/PuzzleForm.cs index 1be92ff..1299470 100644 --- a/PuzzlePlayer/PuzzleForm.cs +++ b/PuzzlePlayer/PuzzleForm.cs @@ -44,7 +44,7 @@ namespace PuzzlePlayer_Namespace if (s == default) s = new Size(700, 420); this.Size = this.MinimumSize = s; this.WindowState = FormWindowState.Maximized; - this.BackColor = Color.DarkGreen; + this.BackColor = SettingForm.primaryColor; this.Text = "PuzzlePlayer"; bufferedGraphics = BufferedGraphicsManager.Current.Allocate(this.CreateGraphics(), this.DisplayRectangle); bufferedGraphics.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; @@ -103,6 +103,30 @@ namespace PuzzlePlayer_Namespace menuStrip.Items.Add(menuSettings); this.Controls.Add(menuStrip); + + menuSettings.Click += (object o, EventArgs e) => + { + this.Hide(); + SettingForm settingForm = new SettingForm(); + + settingForm.FormClosed += (object s, FormClosedEventArgs args) => + { + this.BackColor = SettingForm.primaryColor; + this.ForeColor = SettingForm.tertiaryColor; + + foreach (Control control in this.Controls) + { + SettingForm.UpdateSettings(control); + } + + bufferedGraphics.Graphics.Clear(this.BackColor); + + this.Show(); + }; + + settingForm.Show(); + }; + void CreateButton(Button b) { Controls.Add(b); @@ -167,6 +191,9 @@ namespace PuzzlePlayer_Namespace informationbox.Text = board.description; informationbox.Font = new Font("Verdana", 10); + this.BackColor = SettingForm.primaryColor; + this.ForeColor = SettingForm.tertiaryColor; + UpdateUI(); } private void UpdateUI() //resizes the boardspace rectangle and updates the rest of the ui around the new boardspace size diff --git a/PuzzlePlayer/PuzzlePlayer.cs b/PuzzlePlayer/PuzzlePlayer.cs index a1a65a3..6f91df4 100644 --- a/PuzzlePlayer/PuzzlePlayer.cs +++ b/PuzzlePlayer/PuzzlePlayer.cs @@ -29,6 +29,7 @@ namespace PuzzlePlayer_Namespace puzzleForms.Clear(); puzzleForms.Add(new PuzzleForm(new Binary())); puzzleForms.Add(new PuzzleForm(new Maze())); + puzzleForms.Add(new PuzzleForm(new Sudoku())); } private void SetUpUI() @@ -97,6 +98,9 @@ namespace PuzzlePlayer_Namespace { string image = "../../..//Resources/" + $"{puzzleForms[i].puzzleType}"; + Image normalImage = Image.FromFile(image + ".jpg"); + Image grayImage = Image.FromFile(image + "Gray.jpg"); + // Set the name of the button RoundedButton button = new RoundedButton { @@ -104,7 +108,7 @@ namespace PuzzlePlayer_Namespace Margin = new Padding(10), Height = 345, Width = 345, - Image = Image.FromFile(image + ".jpg"), + Image = normalImage, FlatStyle = FlatStyle.Flat, Font = SettingForm.mainFont, Name = i.ToString() @@ -112,12 +116,12 @@ namespace PuzzlePlayer_Namespace button.MouseEnter += (object o, EventArgs e) => { - button.Image = Image.FromFile(image + "Gray.jpg"); + button.Image = grayImage; }; button.MouseLeave += (object o, EventArgs e) => { - button.Image = Image.FromFile(image + ".jpg"); + button.Image = normalImage; }; button.MouseClick += (object o, MouseEventArgs e) => diff --git a/PuzzlePlayer/Resources/Sudoku.jpg b/PuzzlePlayer/Resources/Sudoku.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd2d9fb8b0ab4855462dc6ba69a5f3406cf4ed86 GIT binary patch literal 27150 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 XQx$mc++<<U8)bTr@1uU=m%;x5H;<7K literal 0 HcmV?d00001 diff --git a/PuzzlePlayer/Resources/SudokuGray.jpg b/PuzzlePlayer/Resources/SudokuGray.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38db407507fc57a46fc47b1e266c11fd154113e7 GIT binary patch literal 25134 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 V&II6ibpXLL3&0Q@N|XCz<UbVWCg1=7 literal 0 HcmV?d00001 diff --git a/PuzzlePlayer/SettingForm.cs b/PuzzlePlayer/SettingForm.cs index d1f391b..3f499c4 100644 --- a/PuzzlePlayer/SettingForm.cs +++ b/PuzzlePlayer/SettingForm.cs @@ -11,9 +11,10 @@ namespace PuzzlePlayer_Namespace // Public variables for all settings public static Color primaryColor = Color.FromArgb(66, 69, 73); public static Color secondaryColor = Color.FromArgb(54, 57, 62); - public static Color tertiaryColor = Color.FromArgb(66, 69, 73); + public static Color tertiaryColor = Color.FromArgb(0, 0, 0); public static int fontSize = 16; public static Font mainFont = new Font("Gotham", fontSize); + public static FlowLayoutPanel settingsPanel; public SettingForm() { @@ -69,6 +70,7 @@ namespace PuzzlePlayer_Namespace }; themeSelector.Items.Add("Dark"); themeSelector.Items.Add("Light"); + themeSelector.Items.Add("Pink"); themeSelector.SelectedIndexChanged += (object o, EventArgs e) => { @@ -84,6 +86,11 @@ namespace PuzzlePlayer_Namespace SettingForm.secondaryColor = Color.FromArgb(210, 211, 219); SettingForm.tertiaryColor = Color.FromArgb(72, 75, 106); break; + case "Pink": + SettingForm.primaryColor = Color.FromArgb(255, 209, 220); + SettingForm.secondaryColor = Color.FromArgb(252, 178, 197); + SettingForm.tertiaryColor = Color.FromArgb(251, 199, 255); + break; } }; @@ -95,7 +102,7 @@ namespace PuzzlePlayer_Namespace Width = 250, BackColor = SettingForm.secondaryColor, ForeColor = Color.Black, - Margin = new Padding(20) + Margin = new Padding(20), }; sizeSelector.Items.Add("Small"); sizeSelector.Items.Add("Medium"); @@ -116,9 +123,10 @@ namespace PuzzlePlayer_Namespace break; } mainFont = new Font("Gotham", fontSize); + settingsPanel.PerformLayout(); }; - FlowLayoutPanel settingsPanel = new FlowLayoutPanel + settingsPanel = new FlowLayoutPanel { Location = new Point(0, menuStrip.Height), Size = new Size(ClientSize.Width, ClientSize.Height - menuStrip.Height - 100), @@ -126,6 +134,7 @@ namespace PuzzlePlayer_Namespace FlowDirection = FlowDirection.TopDown, WrapContents = true, AutoScroll = true, + Padding = new Padding(20), }; // @@ -189,6 +198,29 @@ namespace PuzzlePlayer_Namespace { UpdateSettings(childControl); } + + if (control is MenuStrip menuStrip) + { + foreach (ToolStripItem item in menuStrip.Items) + { + UpdateToolStripSettings(item); + } + } + } + + public static void UpdateToolStripSettings(ToolStripItem item) + { + item.BackColor = secondaryColor; + item.ForeColor = tertiaryColor; + item.Font = mainFont; + + if (item is ToolStripMenuItem menuItem) + { + foreach (ToolStripItem subItem in menuItem.DropDownItems) + { + UpdateToolStripSettings(subItem); + } + } } } } diff --git a/PuzzlePlayer/Sudoku.cs b/PuzzlePlayer/Sudoku.cs new file mode 100644 index 0000000..ecdda24 --- /dev/null +++ b/PuzzlePlayer/Sudoku.cs @@ -0,0 +1,284 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.DirectoryServices; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.Rebar; + +namespace PuzzlePlayer_Namespace +{ + internal class Sudoku : Binary + { + private static int boardLength; + private static int rootBoardLength; + public Sudoku(int boardSize = 9) + { + boardState = GetClearBoard(boardSize, boardSize); + lastGeneratedBoard = GetClearBoard(boardSize, boardSize); + boardLength = boardSize; + rootBoardLength = (int)Math.Sqrt(boardLength); + + description = "SUDOKU !!!!! !!!!"; + drawFactor = 8; + } + + public override void Draw(Graphics gr, Rectangle r) + { + Size tilesize = new Size(r.Width / boardState.GetLength(0), r.Height / boardState.GetLength(1)); + Pen border = new Pen(Color.Black, 2); + gr.FillRectangle(Brushes.Beige, r.X, r.Y, tilesize.Width * boardState.GetLength(0), tilesize.Height * boardState.GetLength(1)); + for (int i = 0; i < boardState.GetLength(0); i++) + { + for (int j = 0; j < boardState.GetLength(1); j++) + { + + gr.DrawRectangle(Pens.LightGray, + r.X + i * tilesize.Width, + r.Y + j * tilesize.Height, + tilesize.Width, + tilesize.Height); + + if (boardState[i,j] != -1) + { + gr.DrawString( + (boardState[i, j]).ToString(), + new Font("Arial", 42), + Brushes.Black, + (float)(r.X + i * tilesize.Width + tilesize.Width / 4), + (float)(r.Y + j * tilesize.Height + tilesize.Height / 4) + ); + } + + if (lastGeneratedBoard[i, j] != Board.emptySpace) + { + gr.FillRectangle(Brushes.LightGray, + (int)(r.X + ((double)i + 0.4375) * tilesize.Width), + (int)(r.Y + ((double)j + 0.4375) * tilesize.Height), + tilesize.Width / 8, + tilesize.Height / 8); + } + } + } + } + + public override void Generate() + { + + boardState = GetClearBoard(boardLength, boardLength); + + for (int i = 0; i < boardLength; i += rootBoardLength) + { + FillBox(i, i); + } + + FillSudoku(0, rootBoardLength); + } + + private int RandomNumber(int number) + { + Random random = new Random(); + return (int)Math.Floor((double)(random.NextDouble() * number + 1)); + } + + private void FillBox(int row, int col) + { + int num; + + for (int i = 0; i < rootBoardLength; i++) + { + for (int j = 0; j < rootBoardLength; j++) + { + do + { + num = RandomNumber(boardLength); + } + while (BoxFlag(row, col, num)); + + boardState[row + i, col + j] = num; + } + } + } + + private bool DoAllChecks(int i, int j, int num) + { + return (BoxFlag(i - i % rootBoardLength, j - j % rootBoardLength, num) || RowFlag(i, num) || ColFlag(j, num)); + } + + private bool BoxFlag(int row, int col, int num) + { + for (int i = 0; i < rootBoardLength; i++) + { + for (int j = 0; j < rootBoardLength; j++) + { + if (boardState[row + i, col + j] == num) + { + return true; + } + } + } + return false; + } + + private bool RowFlag(int i, int num) + { + for (int j = 0; j < boardLength; j++) + { + if (num == boardState[i, j]) + { + return true; + } + } + return false; + } + + private bool ColFlag(int j, int num) + { + for (int i = 0; i < boardLength; i++) + { + if(num == boardState[i, j]) + { + return true; + } + } + return false; + } + + private bool FillSudoku(int row, int col) + { + if (row == boardLength - 1 && col == boardLength) + return true; + + if (col == boardLength) + { + row++; + col = 0; + } + + if (boardState[row, col] != -1) + { + return FillSudoku(row, col + 1); + } + + for (int num = 1; num <= boardLength; num++) + { + if (!DoAllChecks(row, col, num)) + { + boardState[row, col] = num; + + if (FillSudoku(row, col + 1)) + return true; + + boardState[row, col] = -1; + } + } + return false; + } + + private static string BoardToString(int[,] board) + { + string result = ""; + + for (int i = 0; i < board.GetLength(0); i++) + { + for (int j = 0; j < board.GetLength(1); j++) + { + result += (board[i, j] == emptySpace ? "." : board[i, j].ToString()); + } + result += "|"; + } + return result; + } + + private static int[,] BoardFromString(string board) + { + string[] parts = board.Split('|', StringSplitOptions.RemoveEmptyEntries); + int[,] result = new int[parts.Length, parts.Length]; + + for (int i = 0; i < result.GetLength(0); i++) + { + for (int j = 0; j < result.GetLength(1); j++) + { + string s = parts[i][j].ToString(); + if (s == ".") + result[i, j] = emptySpace; + else if (int.Parse(s) >= 0 && int.Parse(s) <= 8) + result[i, j] = int.Parse(s); + else + return null; + } + + } + + return result; + } + + public override void TileInput(Point? p, Keys k) + { + if (p == null) return; + int num = (int)k - 48; + if (num >= 1 && num <= 9) boardState[((Point)p).X, ((Point)p).Y] = num; + + } + public override void TileClick(Point p, int x) + { + if (x == 1) + { + x = -1; + } + if (x == 0) + { + x = 1; + } + + if (boardState[p.X, p.Y] == emptySpace) + { + if (x == 1) + { + boardState[p.X, p.Y] = 1; + return; + } + else + { + boardState[p.X, p.Y] = 9; + return; + } + } + else if (boardState[p.X, p.Y] == 9) + { + if (x == 1) + { + boardState[p.X, p.Y] = emptySpace; + return; + } + else + { + boardState[p.X, p.Y] += x; + return; + } + } + else if (boardState[p.X, p.Y] == 1) + { + if (x == -1) + { + boardState[p.X, p.Y] = emptySpace; + return; + } + else + { + boardState[p.X, p.Y] += x; + return; + } + } + else + { + boardState[p.X, p.Y] += x; + return; + } + } + + } +} -- GitLab