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);
}
}