From fd019fb45adb2444e794b57a638c362e9bb03344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi?= Date: Wed, 29 May 2024 09:47:41 +0200 Subject: [PATCH] Un truc de plus fonctionne --- .../Models/Events/BoardsUpdateEventArgs.cs | 17 +++++ source/Trek-12/Models/Game/Game.cs | 14 +++- source/Trek-12/Models/Rules/Rules.cs | 75 ++++++++++++++----- 3 files changed, 83 insertions(+), 23 deletions(-) create mode 100644 source/Trek-12/Models/Events/BoardsUpdateEventArgs.cs 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;