From 740598a50808e3f4de42e134c266842ec60bea7d Mon Sep 17 00:00:00 2001 From: "jeremy.mouyon" Date: Mon, 13 May 2024 15:02:54 +0200 Subject: [PATCH] add event (just problem with first notification) --- .../AddPlayerNotifiedEventArgs.cs | 12 +++++ Qwirkle/QwirkleClassLibrary/Game.cs | 12 ++++- .../QwirkleConsoleApp/NotificationClass.cs | 33 +++++++++++++ Qwirkle/QwirkleConsoleApp/Program.cs | 48 ++++++++++--------- 4 files changed, 81 insertions(+), 24 deletions(-) create mode 100644 Qwirkle/QwirkleClassLibrary/AddPlayerNotifiedEventArgs.cs create mode 100644 Qwirkle/QwirkleConsoleApp/NotificationClass.cs diff --git a/Qwirkle/QwirkleClassLibrary/AddPlayerNotifiedEventArgs.cs b/Qwirkle/QwirkleClassLibrary/AddPlayerNotifiedEventArgs.cs new file mode 100644 index 0000000..bc1ad1c --- /dev/null +++ b/Qwirkle/QwirkleClassLibrary/AddPlayerNotifiedEventArgs.cs @@ -0,0 +1,12 @@ +namespace QwirkleClassLibrary +{ + public class AddPlayerNotifiedEventArgs : EventArgs + { + public int numberBack { get; private set; } + + public AddPlayerNotifiedEventArgs(int numberBack) + { + this.numberBack = numberBack; + } + } +} \ No newline at end of file diff --git a/Qwirkle/QwirkleClassLibrary/Game.cs b/Qwirkle/QwirkleClassLibrary/Game.cs index 68360de..ada4983 100644 --- a/Qwirkle/QwirkleClassLibrary/Game.cs +++ b/Qwirkle/QwirkleClassLibrary/Game.cs @@ -21,6 +21,11 @@ namespace QwirkleClassLibrary public ReadOnlyCollection ScoreList => scores.AsReadOnly(); private readonly List scores = new(); + public event EventHandler PlayerAddNotified; + + protected virtual void OnPlayerNotified(AddPlayerNotifiedEventArgs args) + => PlayerAddNotified?.Invoke(this, args); + public Game() { bag = new TileBag(3); @@ -31,11 +36,13 @@ namespace QwirkleClassLibrary { if (string.IsNullOrWhiteSpace(playerTag) == true || this.GameRunning == true) { + OnPlayerNotified(new AddPlayerNotifiedEventArgs(1)); return false; } if (players.Count >= 4) { + OnPlayerNotified(new AddPlayerNotifiedEventArgs(2)); return false; } @@ -43,19 +50,22 @@ namespace QwirkleClassLibrary { if (p.NameTag == playerTag) { + OnPlayerNotified(new AddPlayerNotifiedEventArgs(3)); return false; } + } players.Add(CreatePlayer(playerTag)); scores.Add(new Score(players[players.Count-1])); - + OnPlayerNotified(new AddPlayerNotifiedEventArgs(0)); return true; } public Player CreatePlayer(string playerTag) { var player = new Player(playerTag); + return player; } diff --git a/Qwirkle/QwirkleConsoleApp/NotificationClass.cs b/Qwirkle/QwirkleConsoleApp/NotificationClass.cs new file mode 100644 index 0000000..3cd2dc4 --- /dev/null +++ b/Qwirkle/QwirkleConsoleApp/NotificationClass.cs @@ -0,0 +1,33 @@ +using QwirkleClassLibrary; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace QwirkleConsoleApp +{ + class NotificationClass + { + public void NotificationMessagePlayer(object? sender, AddPlayerNotifiedEventArgs args) + { + int t = args.numberBack; + + switch (t) + { + case 0: + Console.WriteLine("Player as correctly add"); + break; + case 1: + Console.WriteLine("ERROR : The name is null or white space"); + break; + case 2: + Console.WriteLine("ERROR : The game is full"); + break; + case 3: + Console.WriteLine("ERROR : Name exist"); + break; + } + } + } +} diff --git a/Qwirkle/QwirkleConsoleApp/Program.cs b/Qwirkle/QwirkleConsoleApp/Program.cs index ef1a41e..7c6580f 100644 --- a/Qwirkle/QwirkleConsoleApp/Program.cs +++ b/Qwirkle/QwirkleConsoleApp/Program.cs @@ -1,24 +1,26 @@ using QwirkleClassLibrary; +using QwirkleConsoleApp; using System.Net.Quic; using System.Text; using System.Transactions; using static System.Console; + static void AddPlayers(Game game) { + NotificationClass nc = new NotificationClass(); + while (game.PlayerList.Count < 4) { Write("Enter player tag : "); string? playerTag = ReadLine(); - if (game.AddPlayerInGame(playerTag) == false) - { - WriteLine("ERROR : Player already exist or game is running !"); - } - else - { - WriteLine("Player " + playerTag + " added !"); - } + game.AddPlayerInGame(playerTag); + + game.PlayerAddNotified -= nc.NotificationMessagePlayer; + + game.PlayerAddNotified += nc.NotificationMessagePlayer; + Write("Do you want to add another player ? (y/n) : "); string? answer = ReadLine(); @@ -38,14 +40,14 @@ static void AddPlayers(Game game) static void ShowTiles(Game game) { WriteLine("\n --------------------- YOUR TILES ------------------------"); - + var currentPlayer = game.GetPlayingPlayer(); var stringBuilder = new StringBuilder(); for (int i = 0; i < currentPlayer.Tiles.Count(); i++) { - stringBuilder.Append("[" + (i+1) + "] "); + stringBuilder.Append("[" + (i + 1) + "] "); stringBuilder.AppendLine(currentPlayer.Tiles[i].ToString()); } @@ -65,12 +67,12 @@ static void AddTile(Game game) } tile = game.TileOfPlayerWithPos(no - 1); - + Write("Enter the x of the cell: "); int x = Convert.ToInt32(ReadLine()); Write("Enter the y of the cell : "); int y = Convert.ToInt32(ReadLine()); - + if (game.PlaceTile(game.GetPlayingPlayer(), tile, x, y) == true) { WriteLine("ok ! your tile is placed"); @@ -85,14 +87,14 @@ static void SwapTile(Game game) { var tilesToSwap = new List(); bool continueSwap = true; - + ShowTiles(game); while (continueSwap == true) { Write("Enter the number of the tile you want to swap : "); int no = Convert.ToInt32(ReadLine()); - + if (no is < 1 or > 6) { WriteLine("ERROR : Enter a number between 1 and 6 !"); @@ -101,23 +103,23 @@ static void SwapTile(Game game) { tilesToSwap.Add(game.TileOfPlayerWithPos(no - 1)); } - + Write("Do you want to swap another tile ? (y/n) : "); string? answer = ReadLine(); - + if (answer == "n") { continueSwap = false; } } - + game.SwapTiles(game.GetPlayingPlayer(), tilesToSwap); } static void MenuSwitch(Game game) { int enter = 0; - + while (enter != 3) { ShowTiles(game); @@ -152,11 +154,11 @@ static void MainMenu(Game game) Console.ForegroundColor = ConsoleColor.Green; WriteLine("Game is starting !"); Console.ResetColor(); - + do { string tagPlayerPlay = game.SetNextPlayer(); - + WriteLine(" --------------------- GAME ! ------------------------"); WriteLine(tagPlayerPlay + "'s turn !"); @@ -169,16 +171,16 @@ static void MainMenu(Game game) static void MainGame() { Game game = new Game(); - + Console.ForegroundColor = ConsoleColor.DarkGreen; WriteLine(" ===================== WELCOME TO QWIRKLE ! ====================="); WriteLine("Enter the players' nametags (2 to 4 players) : "); Console.ResetColor(); - + AddPlayers(game); game.StartGame(); - + MainMenu(game); }