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