From 665a94aaaf74d83e79fc2d3f1770ae3f6290c8e5 Mon Sep 17 00:00:00 2001 From: Floris <f.k.h.vandezande@students.uu.nl> Date: Wed, 4 Dec 2024 11:56:23 +0100 Subject: [PATCH] input fixes --- PuzzlePlayer/Binary.cs | 27 +++++++++++++++++++++----- PuzzlePlayer/Board.cs | 1 + PuzzlePlayer/PuzzleForm.cs | 37 +++++++++++++++++++++++++++++++----- PuzzlePlayer/PuzzlePlayer.cs | 2 +- 4 files changed, 56 insertions(+), 11 deletions(-) diff --git a/PuzzlePlayer/Binary.cs b/PuzzlePlayer/Binary.cs index 385aa0c..1a0a364 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 85245dd..7a393c6 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 04842aa..8090dc3 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 b068169..f64b794 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; -- GitLab