diff --git a/source/Trek-12/Models/Events/BoardsUpdateEventArgs.cs b/source/Trek-12/Models/Events/BoardsUpdateEventArgs.cs
new file mode 100644
index 0000000..22e205f
--- /dev/null
+++ b/source/Trek-12/Models/Events/BoardsUpdateEventArgs.cs
@@ -0,0 +1,17 @@
+using Models.Game;
+
+namespace Models.Events
+{
+ ///
+ /// Event arguments for when the board change.
+ ///
+ public class BoardsUpdateEventArgs : EventArgs
+ {
+ public List Boards { get; }
+
+ public BoardsUpdateEventArgs(List board)
+ {
+ Boards = board;
+ }
+ }
+}
diff --git a/source/Trek-12/Models/Game/Game.cs b/source/Trek-12/Models/Game/Game.cs
index bb07919..4839b1b 100644
--- a/source/Trek-12/Models/Game/Game.cs
+++ b/source/Trek-12/Models/Game/Game.cs
@@ -32,7 +32,7 @@ namespace Models.Game
// == Events ==
public event EventHandler GameStarted;
public event EventHandler GameEnded;
- public event EventHandler BoardUpdated;
+ public event EventHandler BoardUpdated;
public event EventHandler DiceRolled;
public event EventHandler OperationChosen;
public event EventHandler CellChosen;
@@ -121,8 +121,16 @@ namespace Models.Game
{
if (Turn == 1 || GameRules.NearCellIsValid(playerChoice, UsedMap.Boards))
{
+ for (int i = 0; i < UsedMap.Boards.Count; i++)
+ {
+ if (UsedMap.Boards[i].X == playerChoice.X && UsedMap.Boards[i].Y == playerChoice.Y)
+ {
+ UsedMap.Boards[i].Value = result;
+ break;
+ }
+ }
playerChoice.Value = result;
- BoardUpdated?.Invoke(this, EventArgs.Empty);
+ BoardUpdated?.Invoke(this, new BoardsUpdateEventArgs(UsedMap.Boards));
}
}
@@ -235,7 +243,7 @@ namespace Models.Game
GameRules.IsZoneValidAndAddToZones(cell, UsedMap);
AddToRopePath(cell, GameRules.EveryAdjacentCells(cell, UsedMap.Boards));
CellChosen?.Invoke(this, new CellChosenEventArgs(cell, result));
- BoardUpdated?.Invoke(this, EventArgs.Empty);
+ //BoardUpdated?.Invoke(this, EventArgs.Empty);
}
}
}
diff --git a/source/Trek-12/Models/Rules/Rules.cs b/source/Trek-12/Models/Rules/Rules.cs
index 8a7dc43..a3ae541 100644
--- a/source/Trek-12/Models/Rules/Rules.cs
+++ b/source/Trek-12/Models/Rules/Rules.cs
@@ -29,25 +29,39 @@ namespace Models.Rules
return true;
}
+ //public bool IsCellAdjacent(Cell choosenCell, Cell targetCell)
+ //{
+ // if (Math.Abs(choosenCell.X - targetCell.X) > 1 || Math.Abs(choosenCell.Y - targetCell.Y) > 1)
+ // return false;
+ // if (Math.Abs(choosenCell.X - targetCell.X) > 1 && Math.Abs(choosenCell.Y - targetCell.Y) > 1)
+ // return false;
+ // if (choosenCell.X == 0 && targetCell.X == 4)
+ // return false;
+ // if (choosenCell.Y == 0 && targetCell.Y == 4)
+ // return false;
+ // if (choosenCell.X == 4 && targetCell.X == 0)
+ // return false;
+ // if (choosenCell.Y == 4 && targetCell.Y == 0)
+ // return false;
+ // if (choosenCell.X == targetCell.X && choosenCell.Y == targetCell.Y)
+ // return false;
+
+ // return true;
+ //}
+
public bool IsCellAdjacent(Cell choosenCell, Cell targetCell)
{
- if (Math.Abs(choosenCell.X - targetCell.X) > 1 || Math.Abs(choosenCell.Y - targetCell.Y) > 1)
- return false;
- if (Math.Abs(choosenCell.X - targetCell.X) > 1 && Math.Abs(choosenCell.Y - targetCell.Y) > 1)
- return false;
- if (choosenCell.X == 0 && targetCell.X == 4)
- return false;
- if (choosenCell.Y == 0 && targetCell.Y == 4)
- return false;
- if (choosenCell.X == 4 && targetCell.X == 0)
- return false;
- if (choosenCell.Y == 4 && targetCell.Y == 0)
- return false;
- if (choosenCell.X == targetCell.X && choosenCell.Y == targetCell.Y)
- return false;
+ if (Math.Abs(choosenCell.X - targetCell.X) <= 1 && Math.Abs(choosenCell.Y - targetCell.Y) <= 1)
+ {
+ if (choosenCell.X != targetCell.X || choosenCell.Y != targetCell.Y)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
- return true;
- }
public bool IsInRopePaths (Cell adjacente,List> ropePaths,int index)
{
@@ -70,10 +84,29 @@ namespace Models.Rules
}
return false;
}
+ //public bool NearCellIsValid(Cell choosenCell, List cells)
+ //{
+ // if (choosenCell == null || cells == null) return false;
+
+ // IEnumerable PlayedCellsQuery =
+ // from cell in cells
+ // where cell.Value != null
+ // select cell;
+
+ // foreach (var cell in PlayedCellsQuery)
+ // {
+ // if(!IsCellAdjacent(choosenCell, cell)) continue;
+
+ // return true;
+ // }
+
+ // return false;
+ //}
+
public bool NearCellIsValid(Cell choosenCell, List cells)
{
if (choosenCell == null || cells == null) return false;
-
+
IEnumerable PlayedCellsQuery =
from cell in cells
where cell.Value != null
@@ -81,14 +114,16 @@ namespace Models.Rules
foreach (var cell in PlayedCellsQuery)
{
- if(!IsCellAdjacent(choosenCell, cell)) continue;
-
- return true;
+ if (IsCellAdjacent(choosenCell, cell))
+ {
+ return true;
+ }
}
return false;
}
+
public void IsZoneValidAndAddToZones(Cell chosenCell, Map map)
{
if (chosenCell == null ||chosenCell.Value == null) return;
| | | | | |