From b7a6477c4e83ffc8f6f99f7cb18c0863e58e053b Mon Sep 17 00:00:00 2001 From: bionic85 <144353436+bionic85@users.noreply.github.com> Date: Thu, 5 Dec 2024 12:11:00 +0100 Subject: [PATCH] PlayerController is Finished --- PuzzlePlayer/Maze.cs | 32 +++++++++++++++++++------------- PuzzlePlayer/PuzzleForm.cs | 9 +++++++-- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/PuzzlePlayer/Maze.cs b/PuzzlePlayer/Maze.cs index a0d3539..82af376 100644 --- a/PuzzlePlayer/Maze.cs +++ b/PuzzlePlayer/Maze.cs @@ -45,6 +45,9 @@ namespace PuzzlePlayer_Namespace drawFactor = 1; // init all 2D array's Reset(size); + lastGeneratedBoard = GetClearBoard(size); + + description = "The maze is played on a square grid where each cells has walls. You need to navigate through the maze until you reach the end. Use the arrow keys or WASD to move the blue square to the end goal"; } private void Reset(int size) @@ -52,6 +55,7 @@ namespace PuzzlePlayer_Namespace boardState = GetClearBoard(size); mazeState = GetClearBoard(size); visitedCells = GetClearBoard(size); + playerPos = new Point(0,0); } // two funcions to go from number to walls and back @@ -112,6 +116,8 @@ namespace PuzzlePlayer_Namespace // draw the space blue if the player has visited it if (boardState[i, j] == 1) gr.FillRectangle(Brushes.Blue, currentRect); + if(i == playerPos.X && j == playerPos.Y) + gr.FillRectangle(Brushes.DarkBlue, currentRect); // draw board outline gr.DrawRectangle(Pens.LightGray,currentRect); @@ -130,13 +136,8 @@ namespace PuzzlePlayer_Namespace } - // draw an indication of where the start and end from the maze are - - gr.FillRectangle(Brushes.Blue, r.X, r.Y, tilesize.Width, tilesize.Height); + // draw an indication of where the end of the maze is gr.FillRectangle(Brushes.Red, r.X + tilesize.Width*(boardState.GetLength(0)-1), r.Y + tilesize.Height * (boardState.GetLength(1)-1), tilesize.Width, tilesize.Height); - - //gr.DrawString("START", SettingForm.mainFont, Brushes.Red, r.Left, r.Top + tilesize.Height/2); - //gr.DrawString("END", SettingForm.mainFont, Brushes.Red, r.Right - tilesize.Width / 4, r.Bottom - tilesize.Height / 2); } // this methode generates a Maze starting with an empty board @@ -368,23 +369,28 @@ namespace PuzzlePlayer_Namespace public override void TileInput(Point? p, Keys key) { - (bool top, bool right, bool bottom, bool left) = getWallsFromNumber(mazeState[((Point)p).X,((Point)p).Y]); + boardState[playerPos.X, playerPos.Y] = 1; //dw + (bool top, bool right, bool bottom, bool left) = getWallsFromNumber(mazeState[playerPos.X,playerPos.Y]); switch (key) { - case Keys.Up | Keys.W: + case Keys.Up: + case Keys.W: if (!top) - playerPos.Y++; + playerPos.Y--; break; - case Keys.Down | Keys.S: + case Keys.Down: + case Keys.S: if (!bottom) - playerPos.Y--; + playerPos.Y++; break; - case Keys.Right | Keys.D: + case Keys.Right: + case Keys.D: if (!right) playerPos.X++; break; - case Keys.Left | Keys.A: + case Keys.Left: + case Keys.A: if (!left) playerPos.X--; break; diff --git a/PuzzlePlayer/PuzzleForm.cs b/PuzzlePlayer/PuzzleForm.cs index 5ab038f..1be92ff 100644 --- a/PuzzlePlayer/PuzzleForm.cs +++ b/PuzzlePlayer/PuzzleForm.cs @@ -65,6 +65,7 @@ namespace PuzzlePlayer_Namespace }; this.Resize += (object o, EventArgs ea) => UpdateUI(); this.Move += (object o, EventArgs ea) => this.Focus(); + this.PreviewKeyDown += (object o, PreviewKeyDownEventArgs e) => e.IsInputKey = true; this.KeyDown += (object o, KeyEventArgs kea) => Input(kea.KeyCode); this.MouseClick += (object o, MouseEventArgs mea) => { @@ -177,7 +178,6 @@ namespace PuzzlePlayer_Namespace solvebutton.Location = new Point(boardspace.Right + 30, 190); restartbutton.Location = new Point(boardspace.Right + 30, 270); UPDATEBUTTON.Location = new Point(boardspace.Right + 30, 350); - informationbox.Text = Convert.ToString(boardspace.Size); this.Invalidate(); } public static Size FitBoard(Size gamesize, Size maxboardsize, int drawfactor) //returns the largest rectangle smaller than MaxBoardSize that fits the given GameSize well @@ -207,7 +207,7 @@ namespace PuzzlePlayer_Namespace MessageBox.Show("Hint: geef op"); this.Invalidate(); return; - case Keys.S: + case Keys.Space: Board.Solve(false); this.Invalidate(); return; @@ -215,7 +215,12 @@ namespace PuzzlePlayer_Namespace case Keys.Left: case Keys.Right: case Keys.Down: + case Keys.W: + case Keys.A: + case Keys.S: + case Keys.D: Board.TileInput(null, k); + this.Invalidate(); return; } Point tile = GetTile(new Size(Board.boardState.GetLength(0), Board.boardState.GetLength(1)), boardspace, Control.MousePosition); -- GitLab