diff --git a/PuzzlePlayer/Binary.cs b/PuzzlePlayer/Binary.cs index 385aa0c30b273f8b2d312fb20b96a88523315644..1a0a364b70fa9a8b6d970e9684b0dead9de7f297 100644 --- a/PuzzlePlayer/Binary.cs +++ b/PuzzlePlayer/Binary.cs @@ -18,13 +18,13 @@ namespace PuzzlePlayer_Namespace internal class Binary : Board { // constructor with boardSize parameter (default is set to 8 but can be changed) - public Binary(int boardSize = 8) // should be even + public Binary(int boardSize = 6) // should be even { boardState = GetClearBoard(boardSize); - description = "Binary puzzle is played on any even-numbered square grid, with some cells initially containing black or white circles. The goal of the puzzle is to fill all cells such that:\r\nâ— More than two circles of the same color cannot be adjacent\r\nâ— Each row and column must contain an equal number of black and white circles\r\nâ— Each row and column cannot appear multiple times on the board"; - + description = "Binary puzzle is played on any even-numbered square grid, with some cells initially containing black or white circles. The goal of the puzzle is to fill all cells such that:\r\nâ— More than two circles of the same color cannot be adjacent\r\nâ— Each row and column must contain an equal number of black and white circles"; + drawFactor = 8; // clear the board (fill it in with -1) //Clear(false); } @@ -452,8 +452,25 @@ namespace PuzzlePlayer_Namespace } public override void TileInput(Point p, int x) { - if (x==0 || x==1) boardState[p.X, p.Y] = x; - + if (x==0 || x==1 || x==2) boardState[p.X, p.Y] = x%2; } + public override void TileClick(Point p, int x) + { + if (boardState[p.X, p.Y] == -1) + { + boardState[p.X, p.Y] = x; + return; + } + if (boardState[p.X, p.Y] == x) + { + boardState[p.X, p.Y] = 1 - boardState[p.X, p.Y]; + return; + } + if (boardState[p.X, p.Y] == 1 - x) + { + boardState[p.X, p.Y] = -1; + } + } + } } \ No newline at end of file diff --git a/PuzzlePlayer/Board.cs b/PuzzlePlayer/Board.cs index 85245dde2bb7215873d54cf055a769d0d28f6a22..7a393c6fb6ae6427913663a3bec1ec4068220c60 100644 --- a/PuzzlePlayer/Board.cs +++ b/PuzzlePlayer/Board.cs @@ -39,6 +39,7 @@ namespace PuzzlePlayer_Namespace { protected const int emptySpace = -1; // for every puzzle -1 represents a empty space public string description; + public int drawFactor; // setting this to 1 always works // variables to keep track of the board state and the last generated board public int[,] boardState; diff --git a/PuzzlePlayer/PuzzleForm.cs b/PuzzlePlayer/PuzzleForm.cs index 04842aaedff2b8b9a34a6c34b62f77c2821d1ff9..8090dc3ef417b52f1a0994199fd461656a362851 100644 --- a/PuzzlePlayer/PuzzleForm.cs +++ b/PuzzlePlayer/PuzzleForm.cs @@ -19,6 +19,9 @@ namespace PuzzlePlayer_Namespace private readonly Label titlebox; private readonly Label informationbox; private Rectangle boardspace; + private readonly MenuStrip menuStrip; + private readonly ToolStripMenuItem menuSettings; + private readonly BufferedGraphics bufferedGraphics; private Board board; public Board Board //updating the Board member will immediately call board.Draw method so that the board is updated visually @@ -52,7 +55,24 @@ namespace PuzzlePlayer_Namespace titlebox = new Label(); informationbox = new Label(); boardspace = new Rectangle(220, 30, 400, 400); + MenuStrip menuStrip = new MenuStrip + { + BackColor = SettingForm.secondaryColor, + ForeColor = SettingForm.secondaryColor, + Name = "Main menu", + Text = "Main Menu", + Dock = DockStyle.Top, + Font = SettingForm.mainFont, + }; + ToolStripMenuItem menuSettings = new ToolStripMenuItem + { + BackColor = Color.FromArgb(54, 57, 62), + ForeColor = Color.Black, + Text = "Settings", + TextAlign = ContentAlignment.BottomRight, + Font = SettingForm.mainFont, + }; this.Paint += (object o, PaintEventArgs pea) => { board.Draw(bufferedGraphics.Graphics, boardspace); @@ -63,6 +83,7 @@ namespace PuzzlePlayer_Namespace this.Resize += (object o, EventArgs ea) => UpdateUI(); this.Move += (object o, EventArgs ea) => this.Focus(); this.KeyPress += (object o, KeyPressEventArgs kea) => Input(kea.KeyChar); + this.KeyUp += (object o, KeyEventArgs kea) => this.MouseClick += (object o, MouseEventArgs mea) => { if (mea.Button == MouseButtons.Left) @@ -100,21 +121,21 @@ namespace PuzzlePlayer_Namespace generatebutton.MouseClick += (object sender, MouseEventArgs mea) => { Board.Generate(); - Board = Board; + this.Invalidate(); }; CreateButton(hintbutton); hintbutton.Text = "Hint"; hintbutton.MouseClick += (object sender, MouseEventArgs mea) => { MessageBox.Show("Hint: geef op"); - Board = Board; + this.Invalidate(); }; CreateButton(solvebutton); solvebutton.Text = "Solve"; solvebutton.MouseClick += (object sender, MouseEventArgs mea) => { Board.Solve(false); - Board = Board; + this.Invalidate(); }; CreateButton(UPDATEBUTTON); @@ -141,12 +162,13 @@ namespace PuzzlePlayer_Namespace informationbox.ForeColor = Color.White; informationbox.Text = board.description; informationbox.Font = new Font("Verdana", 10); + UpdateUI(); } private void UpdateUI() //resizes the boardspace rectangle and updates the rest of the ui around the new boardspace size { bufferedGraphics.Graphics.Clear(this.BackColor); - boardspace.Size = FitBoard(new Size(Board.boardState.GetLength(0),Board.boardState.GetLength(1)),new Size(this.Width - 350, this.Height - 100),8); + boardspace.Size = FitBoard(new Size(Board.boardState.GetLength(0), Board.boardState.GetLength(1)), new Size(this.Width - 350, this.Height - 100), Board.drawFactor); generatebutton.Location = new Point(boardspace.Right + 30, 30); hintbutton.Location = new Point(boardspace.Right + 30, 110); solvebutton.Location = new Point(boardspace.Right + 30, 190); @@ -174,11 +196,14 @@ namespace PuzzlePlayer_Namespace switch (c) { case 'n': + this.Invalidate(); return; case 'h': MessageBox.Show("Hint: geef op"); + this.Invalidate(); return; case 's': + this.Invalidate(); return; } @@ -186,12 +211,14 @@ namespace PuzzlePlayer_Namespace if (!(tile.X >= 0 && tile.X < Board.boardState.GetLength(0) && tile.Y >= 0 && tile.Y < Board.boardState.GetLength(1))) return; if (c == '[' || c == ']') // '[' = 91, ']' = 93 { - //Board.TileClick(tile, (c - 91) / 2); + Board.TileClick(tile, (c - 91) / 2); + this.Invalidate(); return; } if (char.GetNumericValue(c) != -1) { Board.TileInput(tile, (int)char.GetNumericValue(c)); + this.Invalidate(); return; } MessageBox.Show("uhoh"); diff --git a/PuzzlePlayer/PuzzlePlayer.cs b/PuzzlePlayer/PuzzlePlayer.cs index b068169ca1fb5d0fcf7dfa5c1ea97dc113829b42..f64b7945fc5cc78fe50b64fe3d9cef31b4f28572 100644 --- a/PuzzlePlayer/PuzzlePlayer.cs +++ b/PuzzlePlayer/PuzzlePlayer.cs @@ -124,7 +124,7 @@ namespace PuzzlePlayer_Namespace button.MouseClick += (object o, MouseEventArgs e) => { this.Hide(); - PuzzleForm puzzleForm = new PuzzleForm(new Binary(6)); + PuzzleForm puzzleForm = new PuzzleForm(new Binary()); puzzleForm.FormClosed += (object o, FormClosedEventArgs fcea) => { this.BackColor = SettingForm.primaryColor;