diff --git a/source/Trek-12/ConsoleApp/Program.cs b/source/Trek-12/ConsoleApp/Program.cs index 117e7cb..69dfa14 100644 --- a/source/Trek-12/ConsoleApp/Program.cs +++ b/source/Trek-12/ConsoleApp/Program.cs @@ -90,6 +90,19 @@ class Program Console.WriteLine($"Operation: {e.Operation}, Result: {e.Result}"); DisplayOperationTable(((Game)sender).UsedMap.OperationGrid); Cell playerChoice = GetPlayerChoice(); + bool test = ((Game)sender).HandlePlayerChoice(playerChoice, e.Result); + if(!test) + { + Console.WriteLine("Invalid cell. Please choose again."); + Console.WriteLine(); + Console.WriteLine(); + DisplayBoard(((Game)sender).UsedMap); + OnOperationChosen(sender, e); + } + + + + /* try { ((Game)sender).HandlePlayerChoice(playerChoice, e.Result); @@ -106,6 +119,13 @@ class Program playerChoice = GetPlayerChoice(); ((Game)sender).HandlePlayerChoice(playerChoice, e.Result); } + catch (InvalidPlaceResultException err) + { + Console.WriteLine(err.Message); + playerChoice = GetPlayerChoice(); + ((Game)sender).HandlePlayerChoice(playerChoice, e.Result); + } + */ } /// diff --git a/source/Trek-12/Models/Exceptions/InvalidPlaceResultException.cs b/source/Trek-12/Models/Exceptions/InvalidPlaceResultException.cs new file mode 100644 index 0000000..de8fdd0 --- /dev/null +++ b/source/Trek-12/Models/Exceptions/InvalidPlaceResultException.cs @@ -0,0 +1,11 @@ +namespace Models.Exceptions +{ + /// + /// Exception for when the cell is invalid. + /// + public class InvalidPlaceResultException : Exception + { + public InvalidPlaceResultException(string message) : base(message) { } + } +} + diff --git a/source/Trek-12/Models/Game/Game.cs b/source/Trek-12/Models/Game/Game.cs index 4839b1b..586ce34 100644 --- a/source/Trek-12/Models/Game/Game.cs +++ b/source/Trek-12/Models/Game/Game.cs @@ -117,7 +117,7 @@ namespace Models.Game /// /// The cell chosen by the player to place the result. /// The result of the dice operation to be placed in the cell. - private void PlaceResult(Cell playerChoice, int result) + private bool PlaceResult(Cell playerChoice, int result) { if (Turn == 1 || GameRules.NearCellIsValid(playerChoice, UsedMap.Boards)) { @@ -125,13 +125,17 @@ namespace Models.Game { if (UsedMap.Boards[i].X == playerChoice.X && UsedMap.Boards[i].Y == playerChoice.Y) { + if (UsedMap.Boards[i].Value != null) + return false; UsedMap.Boards[i].Value = result; - break; + BoardUpdated?.Invoke(this, new BoardsUpdateEventArgs(UsedMap.Boards)); + return true; } } - playerChoice.Value = result; - BoardUpdated?.Invoke(this, new BoardsUpdateEventArgs(UsedMap.Boards)); + //playerChoice.Value = result; } + return false; + } /// @@ -227,22 +231,30 @@ namespace Models.Game /// /// /// - public void HandlePlayerChoice(Cell cell, int result) + public bool HandlePlayerChoice(Cell cell, int result) { if (cell.X < 0 || cell.X >= UsedMap.Boards.Count / 6 || cell.Y < 0 || cell.Y >= 6) { - throw new InvalidCellCoordinatesException("Invalid cell coordinates. Please choose again."); + return false; + //throw new InvalidCellCoordinatesException("Invalid cell coordinates. Please choose again."); } if (!GameRules.IsCellValid(cell, UsedMap.Boards)) { - throw new InvalidCellException("Cell is not valid. Please choose again."); + return false; + //throw new InvalidCellException("Cell is not valid. Please choose again."); } - PlaceResult(cell, result); + bool res = PlaceResult(cell, result); + if (!res) + { + return false; + //throw new InvalidPlaceResultException("Cell is not valid for place result. Please choose again."); + } GameRules.IsZoneValidAndAddToZones(cell, UsedMap); AddToRopePath(cell, GameRules.EveryAdjacentCells(cell, UsedMap.Boards)); CellChosen?.Invoke(this, new CellChosenEventArgs(cell, result)); + return true; //BoardUpdated?.Invoke(this, EventArgs.Empty); } }