diff --git a/source/Trek-12/ConsoleApp/Program.cs b/source/Trek-12/ConsoleApp/Program.cs
index e623b1c..7deb345 100644
--- a/source/Trek-12/ConsoleApp/Program.cs
+++ b/source/Trek-12/ConsoleApp/Program.cs
@@ -1,414 +1,414 @@
-// See https://aka.ms/new-console-template for more information
-
-using Models;
-using Models.Events;
-using Models.Game;
-using Models.Interfaces;
-using DataContractPersistence;
-using Microsoft.Extensions.Logging;
-using System.Diagnostics.CodeAnalysis;
-using System.Runtime.CompilerServices;
-
-namespace ConsoleApp;
-
-class Program
-{
-
- static Game Game { get; set; }
-
- ///
- /// Main function of the console app
- ///
- ///
- static void Main(string[] args)
- {
- Console.WriteLine("Enter your pseudo:");
- string? pseudo = Console.ReadLine();
- if (pseudo != null)
- {
- IPersistence persistence = new DataContractXml();
- Player player = new Player(pseudo, "test.png");
-
- Map map = new Map("Dunai","background");
- Game = new Game(persistence);
-
- // Abonnement aux événements
- Game.GameStarted += OnGameStarted!;
- Game.GameEnded += OnGameEnded!;
- Game.BoardUpdated += OnBoardUpdated!;
- Game.DiceRolled += OnDiceRolled!;
- Game.OperationChosen += OnOperationChosen!;
- Game.CellChosen += OnCellChosen!;
- Game.PlayerChooseOp += OnPlayerSelectionOp!;
- Game.PlayerOption += OnPlayerOption!;
- Game.PlayerChooseCell += OnPlayerSelectionCell!;
-
- // Initialisation
- Game.InitializeGame(map, player);
- }
-
-
- }
-
- static void OnPlayerSelectionCell(Object sender, PlayerChooseCellEventArgs e)
- {
- int row, column;
- while (true)
- {
- Console.ForegroundColor = ConsoleColor.Cyan;
- Console.WriteLine("Enter the position of the cell you want to play");
- Console.WriteLine("Enter the row number (0-6)");
- Console.ResetColor();
- if (!int.TryParse(Console.ReadLine(), out row) || row < 0 || row >= 7)
- {
- Console.ForegroundColor= ConsoleColor.Red;
- Console.WriteLine("Invalid row number. Please enter a number between 0 and 6.");
- Console.ResetColor();
- continue;
- }
- Console.ForegroundColor = ConsoleColor.Cyan;
- Console.WriteLine("Enter the column number (0-6)");
- Console.ResetColor();
- if (!int.TryParse(Console.ReadLine(), out column) || column < 0 || column >= 7)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("Invalid column number. Please enter a number between 0 and 6.");
- Console.ResetColor();
- continue;
- }
-
- Game.PlayerCell = new Cell(row, column);
- break;
- }
- }
-
- static void OnPlayerOption(object sender, PlayerOptionEventArgs e)
- {
- Console.WriteLine();
- if(e.Turn != 1)
- {
- IEnumerable PlayedCellsQuery =
+// See https://aka.ms/new-console-template for more information
+
+using Models;
+using Models.Events;
+using Models.Game;
+using Models.Interfaces;
+using DataContractPersistence;
+using Microsoft.Extensions.Logging;
+using System.Diagnostics.CodeAnalysis;
+using System.Runtime.CompilerServices;
+
+namespace ConsoleApp;
+
+class Program
+{
+
+ static Game Game { get; set; }
+
+ ///
+ /// Main function of the console app
+ ///
+ ///
+ static void Main(string[] args)
+ {
+ Console.WriteLine("Enter your pseudo:");
+ string? pseudo = Console.ReadLine();
+ if (pseudo != null)
+ {
+ IPersistence persistence = new DataContractXml();
+ Player player = new Player(pseudo, "test.png");
+
+ Map map = new Map("Dunai","background");
+ Game = new Game(persistence);
+
+ // Abonnement aux événements
+ Game.GameStarted += OnGameStarted!;
+ Game.GameEnded += OnGameEnded!;
+ Game.BoardUpdated += OnBoardUpdated!;
+ Game.DiceRolled += OnDiceRolled!;
+ Game.OperationChosen += OnOperationChosen!;
+ Game.CellChosen += OnCellChosen!;
+ Game.PlayerChooseOp += OnPlayerSelectionOp!;
+ Game.PlayerOption += OnPlayerOption!;
+ Game.PlayerChooseCell += OnPlayerSelectionCell!;
+
+ // Initialisation
+ Game.InitializeGame(map, player);
+ }
+
+
+ }
+
+ static void OnPlayerSelectionCell(Object sender, PlayerChooseCellEventArgs e)
+ {
+ int row, column;
+ while (true)
+ {
+ Console.ForegroundColor = ConsoleColor.Cyan;
+ Console.WriteLine("Enter the position of the cell you want to play");
+ Console.WriteLine("Enter the row number (0-6)");
+ Console.ResetColor();
+ if (!int.TryParse(Console.ReadLine(), out row) || row < 0 || row >= 7)
+ {
+ Console.ForegroundColor= ConsoleColor.Red;
+ Console.WriteLine("Invalid row number. Please enter a number between 0 and 6.");
+ Console.ResetColor();
+ continue;
+ }
+ Console.ForegroundColor = ConsoleColor.Cyan;
+ Console.WriteLine("Enter the column number (0-6)");
+ Console.ResetColor();
+ if (!int.TryParse(Console.ReadLine(), out column) || column < 0 || column >= 7)
+ {
+ Console.ForegroundColor = ConsoleColor.Red;
+ Console.WriteLine("Invalid column number. Please enter a number between 0 and 6.");
+ Console.ResetColor();
+ continue;
+ }
+
+ Game.PlayerCell = new Cell(row, column);
+ break;
+ }
+ }
+
+ static void OnPlayerOption(object sender, PlayerOptionEventArgs e)
+ {
+ Console.WriteLine();
+ if(e.Turn != 1)
+ {
+ IEnumerable PlayedCellsQuery =
from cell in e.Board
- where cell.Valid == true
- where cell.Value != null
- select cell;
- foreach (var item in e.Board)
- {
- if (item.X == 6)
- Console.WriteLine();
- if (!item.Valid)
- Console.Write(" ");
- else if (item.Value != null)
- Console.Write($"{item.Value}");
- else
- {
- foreach (var item1 in PlayedCellsQuery)
- {
- if (Math.Abs(item.X - item1.X) <= 1 && Math.Abs(item.Y - item1.Y) <= 1)
- {
- Console.ForegroundColor = ConsoleColor.Cyan;
- Console.Write($"{e.Resultat}");
- Console.ResetColor();
- }
- }
- }
- }
- return;
- }
- foreach (var item in e.Board)
- {
- if (!item.Valid)
- Console.Write(" ");
- else
- {
- Console.ForegroundColor = ConsoleColor.Cyan;
- Console.Write($"{e.Resultat}");
- Console.ResetColor();
-
- }
- if (item.X == 6)
- Console.WriteLine();
- }
- Console.WriteLine();
- Console.ForegroundColor = ConsoleColor.Cyan;
- Console.WriteLine("Choose an Available cell.");
- Console.ResetColor();
- }
-
- static void OnPlayerSelectionOp(object sender, PlayerChooseOperationEventArgs e)
- {
- Console.WriteLine();
- DisplayOperationTable(((Game)sender).UsedMap.OperationGrid.ToList());
- Console.WriteLine();
- Console.WriteLine("0. Lower | 1. Higher | 2. Substraction | 3. Addition | 4. Multiplication");
- string? op = Console.ReadLine();
- while (op != "0" && op != "1" && op != "2" && op != "3" && op != "4")
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine("Invalid operation. Please choose again.");
- Console.ResetColor();
- op = Console.ReadLine();
- }
- int test = Convert.ToInt32(op);
- Game.PlayerOperation = (Operation)test;
-
- }
-
-
- ///
- /// Handles the event when the game has started.
- ///
- ///
- ///
- static void OnGameStarted(object sender, GameStartedEventArgs e)
- {
- Console.WriteLine($"The game has started! Player: {e.CurrentPlayer.Pseudo}");
- }
-
- ///
- /// Handles the event when the game has ended.
- ///
- ///
- ///
- static void OnGameEnded(object sender, GameEndedEventArgs e)
- {
- Console.WriteLine($"The game has ended! Player: {e.CurrentPlayer.Pseudo}");
- Console.WriteLine($"Points: {e.Point}");
- }
-
- ///
- /// Handles the event when the board is updated.
- ///
- ///
- ///
- static void OnBoardUpdated(object sender, BoardsUpdateEventArgs e)
- {
- foreach (var item in e.Boards)
- {
- if (!item.Valid)
- Console.Write(" ");
- else if (item.Value != null)
- Console.Write($"{item.Value}");
- else Console.Write("O");
- if (item.X == 6)
- Console.WriteLine();
- }
- }
-
- ///
- /// Handles the event when the dice are rolled.
- ///
- ///
- ///
- static void OnDiceRolled(object sender, DiceRolledEventArgs e)
- {
- // Console.Clear();
- Console.WriteLine($"Dice 1: {e.Dice1Value} | Dice 2: {e.Dice2Value}");
- Console.WriteLine();
- Console.ForegroundColor = ConsoleColor.Cyan;
- Console.WriteLine("Choose an operation.");
- Console.ResetColor();
- }
-
- ///
- /// Handles the event when an operation is chosen by the player.
- ///
- ///
- ///
- static void OnOperationChosen(object sender, OperationChosenEventArgs e)
- {
- Console.WriteLine($"Operation: {e.Operation}, Result: {e.Result}");
- DisplayOperationTable(((Game)sender).UsedMap.OperationGrid.ToList());
- 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);
- }
- catch (InvalidCellCoordinatesException err)
- {
- Console.WriteLine(err.Message);
- playerChoice = GetPlayerChoice();
- ((Game)sender).HandlePlayerChoice(playerChoice, e.Result);
- }
- catch (InvalidCellException err)
- {
- Console.WriteLine(err.Message);
- playerChoice = GetPlayerChoice();
- ((Game)sender).HandlePlayerChoice(playerChoice, e.Result);
- }
- catch (InvalidPlaceResultException err)
- {
- Console.WriteLine(err.Message);
- playerChoice = GetPlayerChoice();
- ((Game)sender).HandlePlayerChoice(playerChoice, e.Result);
- }
- */
- }
-
- ///
- /// Handles the event when a cell is chosen by the player.
- ///
- ///
- ///
- static void OnCellChosen(object sender, CellChosenEventArgs e)
- {
- Console.WriteLine($"Cell chosen: ({e.Cell.X}, {e.Cell.Y}) with result: {e.Result}");
- DisplayBoard(((Game)sender).UsedMap);
- }
-
- ///
- /// Displays the game board.
- ///
- /// Used map to display
- static void DisplayBoard(Map map)
- {
- int cpt = 0;
- for (int i = 0; i < map.Boards.Count; i++)
- {
- if (cpt % 6 == 0)
- {
- Console.Write("| ");
- }
-
- if (map.Boards[i].Value.HasValue)
- {
- Console.Write(map.Boards[i].Value?.ToString().PadLeft(2));
- }
- else
- {
- Console.Write(" O");
- }
-
- cpt++;
- if (cpt % 6 == 0)
- {
- Console.Write(" |");
- Console.WriteLine();
- }
- }
- }
-
- ///
- /// Displays the operation table.
- ///
- /// The operation table to display.
- static void DisplayOperationTable(List operationTable)
- {
- Console.ForegroundColor = ConsoleColor.Yellow;
- foreach ( var cell in operationTable)
- {
-
- if (cell.X == 0 && cell.Y == 0)
- Console.Write("Lower => ");
- if (cell.X == 0 && cell.Y == 1)
- Console.Write("Higher => ");
- if (cell.X == 0 && cell.Y == 2)
- Console.Write("Substraction => ");
- if (cell.X == 0 && cell.Y == 3)
- Console.Write("Addition => ");
- if (cell.X == 0 && cell.Y == 4)
- Console.Write("Multiplication => ");
- if (cell.IsChecked)
- Console.Write("X | ");
- if (!cell.IsChecked)
- Console.Write(" | ");
- if (cell.X == 3)
- Console.WriteLine();
- }
- Console.ResetColor();
- }
-
- ///
- /// Gets the cell chosen by the player.
- ///
- /// The cell chosen by the player.
- static Cell GetPlayerChoice()
- {
- int row, column;
- while (true)
- {
- Console.WriteLine("Enter the position of the cell you want to play");
- Console.WriteLine("Enter the row number (0-5)");
- if (!int.TryParse(Console.ReadLine(), out row) || row < 0 || row >= 6)
- {
- Console.WriteLine("Invalid row number. Please enter a number between 0 and 5.");
- continue;
- }
-
- Console.WriteLine("Enter the column number (0-5)");
- if (!int.TryParse(Console.ReadLine(), out column) || column < 0 || column >= 6)
- {
- Console.WriteLine("Invalid column number. Please enter a number between 0 and 5.");
- continue;
- }
-
- return new Cell(row, column);
- }
- }
-
- ///
- /// Gets the operation chosen by the player.
- ///
- ///
- ///
- static Operation GetPlayerOperation(object? sender)
- {
- DisplayOperationOptions();
- string? op = Console.ReadLine();
- while (op != "1" && op != "2" && op != "3" && op != "4" && op != "5")
- {
- Console.WriteLine("Invalid operation. Please choose again.");
- op = Console.ReadLine();
- }
- int test = Convert.ToInt32(op);
-
- while(((Game)sender).UsedMap.CheckOperationPossible(test-1))
- {
- Console.WriteLine("Invalid operation. Please choose again.");
- Console.WriteLine();
- op = Console.ReadLine();
- while (op != "1" && op != "2" && op != "3" && op != "4" && op != "5")
- {
- Console.WriteLine("Invalid operation. Please choose again.");
- op = Console.ReadLine();
- }
- test = Convert.ToInt32(op);
- }
-
- return op switch
- {
- "1" => Operation.ADDITION,
- "2" => Operation.SUBTRACTION,
- "3" => Operation.MULTIPLICATION,
- "4" => Operation.LOWER,
- "5" => Operation.HIGHER,
- _ => throw new ArgumentOutOfRangeException()
- };
- }
-
- ///
- /// Displays the operation options for the player to choose from.
- ///
- static void DisplayOperationOptions()
- {
- Console.WriteLine("Choose an operation:");
- Console.WriteLine("1: Addition (+)");
- Console.WriteLine("2: Subtraction (-)");
- Console.WriteLine("3: Multiplication (*)");
- Console.WriteLine("4: Lower Dice (less)");
- Console.WriteLine("5: Higher Dice (high)");
- }
+ where cell.Valid == true
+ where cell.Value != null
+ select cell;
+ foreach (var item in e.Board)
+ {
+ if (item.X == 6)
+ Console.WriteLine();
+ if (!item.Valid)
+ Console.Write(" ");
+ else if (item.Value != null)
+ Console.Write($"{item.Value}");
+ else
+ {
+ foreach (var item1 in PlayedCellsQuery)
+ {
+ if (Math.Abs(item.X - item1.X) <= 1 && Math.Abs(item.Y - item1.Y) <= 1)
+ {
+ Console.ForegroundColor = ConsoleColor.Cyan;
+ Console.Write($"{e.Resultat}");
+ Console.ResetColor();
+ }
+ }
+ }
+ }
+ return;
+ }
+ foreach (var item in e.Board)
+ {
+ if (!item.Valid)
+ Console.Write(" ");
+ else
+ {
+ Console.ForegroundColor = ConsoleColor.Cyan;
+ Console.Write($"{e.Resultat}");
+ Console.ResetColor();
+
+ }
+ if (item.X == 6)
+ Console.WriteLine();
+ }
+ Console.WriteLine();
+ Console.ForegroundColor = ConsoleColor.Cyan;
+ Console.WriteLine("Choose an Available cell.");
+ Console.ResetColor();
+ }
+
+ static void OnPlayerSelectionOp(object sender, PlayerChooseOperationEventArgs e)
+ {
+ Console.WriteLine();
+ DisplayOperationTable(((Game)sender).UsedMap.OperationGrid.ToList());
+ Console.WriteLine();
+ Console.WriteLine("0. Lower | 1. Higher | 2. Substraction | 3. Addition | 4. Multiplication");
+ string? op = Console.ReadLine();
+ while (op != "0" && op != "1" && op != "2" && op != "3" && op != "4")
+ {
+ Console.ForegroundColor = ConsoleColor.Red;
+ Console.WriteLine("Invalid operation. Please choose again.");
+ Console.ResetColor();
+ op = Console.ReadLine();
+ }
+ int test = Convert.ToInt32(op);
+ Game.PlayerOperation = (Operation)test;
+
+ }
+
+
+ ///
+ /// Handles the event when the game has started.
+ ///
+ ///
+ ///
+ static void OnGameStarted(object sender, GameStartedEventArgs e)
+ {
+ Console.WriteLine($"The game has started! Player: {e.CurrentPlayer.Pseudo}");
+ }
+
+ ///
+ /// Handles the event when the game has ended.
+ ///
+ ///
+ ///
+ static void OnGameEnded(object sender, GameEndedEventArgs e)
+ {
+ Console.WriteLine($"The game has ended! Player: {e.CurrentPlayer.Pseudo}");
+ Console.WriteLine($"Points: {e.Point}");
+ }
+
+ ///
+ /// Handles the event when the board is updated.
+ ///
+ ///
+ ///
+ static void OnBoardUpdated(object sender, BoardsUpdateEventArgs e)
+ {
+ foreach (var item in e.Boards)
+ {
+ if (!item.Valid)
+ Console.Write(" ");
+ else if (item.Value != null)
+ Console.Write($"{item.Value}");
+ else Console.Write("O");
+ if (item.X == 6)
+ Console.WriteLine();
+ }
+ }
+
+ ///
+ /// Handles the event when the dice are rolled.
+ ///
+ ///
+ ///
+ static void OnDiceRolled(object sender, DiceRolledEventArgs e)
+ {
+ // Console.Clear();
+ Console.WriteLine($"Dice 1: {e.Dice1Value} | Dice 2: {e.Dice2Value}");
+ Console.WriteLine();
+ Console.ForegroundColor = ConsoleColor.Cyan;
+ Console.WriteLine("Choose an operation.");
+ Console.ResetColor();
+ }
+
+ ///
+ /// Handles the event when an operation is chosen by the player.
+ ///
+ ///
+ ///
+ static void OnOperationChosen(object sender, OperationChosenEventArgs e)
+ {
+ Console.WriteLine($"Operation: {e.Operation}, Result: {e.Result}");
+ DisplayOperationTable(((Game)sender).UsedMap.OperationGrid.ToList());
+ 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);
+ }
+ catch (InvalidCellCoordinatesException err)
+ {
+ Console.WriteLine(err.Message);
+ playerChoice = GetPlayerChoice();
+ ((Game)sender).HandlePlayerChoice(playerChoice, e.Result);
+ }
+ catch (InvalidCellException err)
+ {
+ Console.WriteLine(err.Message);
+ playerChoice = GetPlayerChoice();
+ ((Game)sender).HandlePlayerChoice(playerChoice, e.Result);
+ }
+ catch (InvalidPlaceResultException err)
+ {
+ Console.WriteLine(err.Message);
+ playerChoice = GetPlayerChoice();
+ ((Game)sender).HandlePlayerChoice(playerChoice, e.Result);
+ }
+ */
+ }
+
+ ///
+ /// Handles the event when a cell is chosen by the player.
+ ///
+ ///
+ ///
+ static void OnCellChosen(object sender, CellChosenEventArgs e)
+ {
+ Console.WriteLine($"Cell chosen: ({e.Cell.X}, {e.Cell.Y}) with result: {e.Result}");
+ DisplayBoard(((Game)sender).UsedMap);
+ }
+
+ ///
+ /// Displays the game board.
+ ///
+ /// Used map to display
+ static void DisplayBoard(Map map)
+ {
+ int cpt = 0;
+ for (int i = 0; i < map.Boards.Count; i++)
+ {
+ if (cpt % 6 == 0)
+ {
+ Console.Write("| ");
+ }
+
+ if (map.Boards[i].Value.HasValue)
+ {
+ Console.Write(map.Boards[i].Value?.ToString().PadLeft(2));
+ }
+ else
+ {
+ Console.Write(" O");
+ }
+
+ cpt++;
+ if (cpt % 6 == 0)
+ {
+ Console.Write(" |");
+ Console.WriteLine();
+ }
+ }
+ }
+
+ ///
+ /// Displays the operation table.
+ ///
+ /// The operation table to display.
+ static void DisplayOperationTable(List operationTable)
+ {
+ Console.ForegroundColor = ConsoleColor.Yellow;
+ foreach ( var cell in operationTable)
+ {
+
+ if (cell.X == 0 && cell.Y == 0)
+ Console.Write("Lower => ");
+ if (cell.X == 0 && cell.Y == 1)
+ Console.Write("Higher => ");
+ if (cell.X == 0 && cell.Y == 2)
+ Console.Write("Substraction => ");
+ if (cell.X == 0 && cell.Y == 3)
+ Console.Write("Addition => ");
+ if (cell.X == 0 && cell.Y == 4)
+ Console.Write("Multiplication => ");
+ if (cell.IsChecked)
+ Console.Write("X | ");
+ if (!cell.IsChecked)
+ Console.Write(" | ");
+ if (cell.X == 3)
+ Console.WriteLine();
+ }
+ Console.ResetColor();
+ }
+
+ ///
+ /// Gets the cell chosen by the player.
+ ///
+ /// The cell chosen by the player.
+ static Cell GetPlayerChoice()
+ {
+ int row, column;
+ while (true)
+ {
+ Console.WriteLine("Enter the position of the cell you want to play");
+ Console.WriteLine("Enter the row number (0-5)");
+ if (!int.TryParse(Console.ReadLine(), out row) || row < 0 || row >= 6)
+ {
+ Console.WriteLine("Invalid row number. Please enter a number between 0 and 5.");
+ continue;
+ }
+
+ Console.WriteLine("Enter the column number (0-5)");
+ if (!int.TryParse(Console.ReadLine(), out column) || column < 0 || column >= 6)
+ {
+ Console.WriteLine("Invalid column number. Please enter a number between 0 and 5.");
+ continue;
+ }
+
+ return new Cell(row, column);
+ }
+ }
+
+ ///
+ /// Gets the operation chosen by the player.
+ ///
+ ///
+ ///
+ static Operation GetPlayerOperation(object? sender)
+ {
+ DisplayOperationOptions();
+ string? op = Console.ReadLine();
+ while (op != "1" && op != "2" && op != "3" && op != "4" && op != "5")
+ {
+ Console.WriteLine("Invalid operation. Please choose again.");
+ op = Console.ReadLine();
+ }
+ int test = Convert.ToInt32(op);
+
+ while(((Game)sender).UsedMap.CheckOperationPossible(test-1))
+ {
+ Console.WriteLine("Invalid operation. Please choose again.");
+ Console.WriteLine();
+ op = Console.ReadLine();
+ while (op != "1" && op != "2" && op != "3" && op != "4" && op != "5")
+ {
+ Console.WriteLine("Invalid operation. Please choose again.");
+ op = Console.ReadLine();
+ }
+ test = Convert.ToInt32(op);
+ }
+
+ return op switch
+ {
+ "1" => Operation.ADDITION,
+ "2" => Operation.SUBTRACTION,
+ "3" => Operation.MULTIPLICATION,
+ "4" => Operation.LOWER,
+ "5" => Operation.HIGHER,
+ _ => throw new ArgumentOutOfRangeException()
+ };
+ }
+
+ ///
+ /// Displays the operation options for the player to choose from.
+ ///
+ static void DisplayOperationOptions()
+ {
+ Console.WriteLine("Choose an operation:");
+ Console.WriteLine("1: Addition (+)");
+ Console.WriteLine("2: Subtraction (-)");
+ Console.WriteLine("3: Multiplication (*)");
+ Console.WriteLine("4: Lower Dice (less)");
+ Console.WriteLine("5: Higher Dice (high)");
+ }
}
\ No newline at end of file
diff --git a/source/Trek-12/Models/Game/Game.cs b/source/Trek-12/Models/Game/Game.cs
index 4d0f6a7..a570337 100644
--- a/source/Trek-12/Models/Game/Game.cs
+++ b/source/Trek-12/Models/Game/Game.cs
@@ -317,7 +317,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 void PlaceResult(Cell playerChoice)
{
IEnumerable ValidCell =
from cell in UsedMap.Boards
@@ -326,8 +326,11 @@ namespace Models.Game
select cell;
foreach (var item in ValidCell)
{
- if(item.X == playerChoice.X && item.Y == playerChoice.Y)
- item.Value = result;
+ if (item.X == playerChoice.X && item.Y == playerChoice.Y)
+ {
+ item.Value = PlayerCell.Value;
+ return;
+ }
}
}
@@ -336,36 +339,33 @@ namespace Models.Game
///
///
///
- private void AddToRopePath(Cell playerChoice,List adjacentes)
+ private void AddToRopePath(Cell playerChoice,List board)
{
- int index =0;
-
- foreach (var cells in adjacentes.Where(cells => cells.Value - playerChoice.Value == 1 || cells.Value - playerChoice.Value == -1))
- {
- // Le cas si il n'existe aucun chemin de corde
- if (UsedMap.RopePaths.Count == 0)
- {
- // Creer un nouveau chemin de corde avec la cellule choisi par le joueur et celle adjacente
- UsedMap.RopePaths.Add(new List {playerChoice, cells});
- }
-
- // A modifier dans le cas ou il est possible de fusionner deux chemins de corde
- if (GameRules.IsInRopePaths(playerChoice, UsedMap.RopePaths, index)) break;
+ if(Turn==1) return;
+ int index = 0;
- // Le cas si il existe des chemins de corde
+ IEnumerable ValidCell =
+ from cell in UsedMap.Boards
+ where cell.Value != null && cell.Valid == true && cell != playerChoice
+ select cell;
- // Est-ce que la cellule adjacentes fait parti d'un chemin de corde
- if (!GameRules.IsInRopePaths(cells,UsedMap.RopePaths,index))
+ foreach (var item in ValidCell)
+ {
+ if (!GameRules.IsCellAdjacent(playerChoice, item))
+ continue;
+ if (!((playerChoice.Value - item.Value) == 1 || (playerChoice.Value - item.Value) == -1))
+ continue;
+ if (!GameRules.IsInRopePaths(item,UsedMap.RopePaths,index))
{
- UsedMap.RopePaths.Add(new List { playerChoice, cells });
- continue;
- }
-
- if (!GameRules.AsValue(playerChoice,UsedMap.RopePaths,index))
+ UsedMap.RopePaths.Add(new List { playerChoice, item });
+ return;
+ }
+ if (!GameRules.AsValue(playerChoice, UsedMap.RopePaths, index))
{
UsedMap.RopePaths[index].Add(playerChoice);
- }
+ return;
+ }
}
}
@@ -410,17 +410,17 @@ namespace Models.Game
///
private void GameLoop()
{
- int res = 0,turn = 1;
- Cell cell;
while (IsRunning)
{
RollAllDice();
- res = PlayerChooseOperation();
- PlayerOption?.Invoke(this,new PlayerOptionEventArgs(UsedMap.Boards.ToList(),res,turn));
+ int res = PlayerChooseOperation();
+ PlayerOption?.Invoke(this,new PlayerOptionEventArgs(UsedMap.Boards.ToList(),res,Turn));
PlayerSelectionCell();
- PlaceResult(PlayerCell,res);
+ PlayerCell.Value = res;
+ AddToRopePath(PlayerCell,UsedMap.Boards.ToList());
+ PlaceResult(PlayerCell);
BoardUpdated?.Invoke(this, new BoardsUpdateEventArgs(UsedMap.Boards.ToList()));
- turn++;
+ Turn++;
}
}
diff --git a/source/Trek-12/Trek-12/Views/PageBoard.xaml.cs b/source/Trek-12/Trek-12/Views/PageBoard.xaml.cs
index 081dd6f..beddbaf 100644
--- a/source/Trek-12/Trek-12/Views/PageBoard.xaml.cs
+++ b/source/Trek-12/Trek-12/Views/PageBoard.xaml.cs
@@ -87,28 +87,23 @@ public partial class PageBoard : ContentPage
private void HigherClicked(object sender, EventArgs e)
{
- GameManager.MarkOperationAsChecked(Operation.HIGHER);
Higher.IsVisible = false;
}
private void LowerClicked(object sender, EventArgs e)
{
- GameManager.MarkOperationAsChecked(Operation.LOWER);
}
private void AdditionClicked(object sender, EventArgs e)
{
- GameManager.MarkOperationAsChecked(Operation.ADDITION);
}
private void SubstractionClicked(object sender, EventArgs e)
{
- GameManager.MarkOperationAsChecked(Operation.SUBTRACTION);
}
private void MultiplicationClicked(object sender, EventArgs e)
{
- GameManager.MarkOperationAsChecked(Operation.MULTIPLICATION);
}
private void DiceButton_Clicked(object sender, EventArgs e)
| | | | | | | | |