diff --git a/Qwirkle/QwirkleClassLibrary/AddPlayerNotifiedEventArgs.cs b/Qwirkle/QwirkleClassLibrary/AddPlayerNotifiedEventArgs.cs index bc1ad1c..1f6abd3 100644 --- a/Qwirkle/QwirkleClassLibrary/AddPlayerNotifiedEventArgs.cs +++ b/Qwirkle/QwirkleClassLibrary/AddPlayerNotifiedEventArgs.cs @@ -2,11 +2,11 @@ { public class AddPlayerNotifiedEventArgs : EventArgs { - public int numberBack { get; private set; } + public string returnedNotified { get; private set; } - public AddPlayerNotifiedEventArgs(int numberBack) + public AddPlayerNotifiedEventArgs(string returnedNotified) { - this.numberBack = numberBack; + this.returnedNotified = returnedNotified; } } } \ No newline at end of file diff --git a/Qwirkle/QwirkleClassLibrary/Game.cs b/Qwirkle/QwirkleClassLibrary/Game.cs index ada4983..3480b93 100644 --- a/Qwirkle/QwirkleClassLibrary/Game.cs +++ b/Qwirkle/QwirkleClassLibrary/Game.cs @@ -11,7 +11,7 @@ namespace QwirkleClassLibrary { public class Game : IPlayer, IRules { - private readonly TileBag bag; + private TileBag bag; public bool GameRunning { get; private set; } private Board board; @@ -21,28 +21,40 @@ namespace QwirkleClassLibrary public ReadOnlyCollection ScoreList => scores.AsReadOnly(); private readonly List scores = new(); - public event EventHandler PlayerAddNotified; + public event EventHandler? PlayerAddNotified; protected virtual void OnPlayerNotified(AddPlayerNotifiedEventArgs args) => PlayerAddNotified?.Invoke(this, args); + public event EventHandler? NextPlayerNotified; + + protected virtual void OnNextPlayer(NextPlayerNotifiedEventArgs args) + => NextPlayerNotified?.Invoke(this, args); + public Game() { bag = new TileBag(3); board = CreateBoard(); + } public bool AddPlayerInGame(string? playerTag) { - if (string.IsNullOrWhiteSpace(playerTag) == true || this.GameRunning == true) + if (string.IsNullOrWhiteSpace(playerTag) == true) + { + OnPlayerNotified(new AddPlayerNotifiedEventArgs("ERROR : The name is null or white space.")); + return false; + } + + if(this.GameRunning == true) { - OnPlayerNotified(new AddPlayerNotifiedEventArgs(1)); + OnPlayerNotified(new AddPlayerNotifiedEventArgs("ERROR : The game is running.")); return false; } if (players.Count >= 4) { - OnPlayerNotified(new AddPlayerNotifiedEventArgs(2)); + OnPlayerNotified(new AddPlayerNotifiedEventArgs("ERROR : The game is full.")); return false; } @@ -50,7 +62,7 @@ namespace QwirkleClassLibrary { if (p.NameTag == playerTag) { - OnPlayerNotified(new AddPlayerNotifiedEventArgs(3)); + OnPlayerNotified(new AddPlayerNotifiedEventArgs("ERROR : Name alreay taken")); return false; } @@ -58,7 +70,7 @@ namespace QwirkleClassLibrary players.Add(CreatePlayer(playerTag)); scores.Add(new Score(players[players.Count-1])); - OnPlayerNotified(new AddPlayerNotifiedEventArgs(0)); + OnPlayerNotified(new AddPlayerNotifiedEventArgs("Player was correctly added")); return true; } @@ -117,7 +129,7 @@ namespace QwirkleClassLibrary { for (int j = 0; j < 6; j++) { - int val = RandomNumberGenerator.GetInt32(0, bag.TilesBag.Count + 1); + int val = RandomNumberGenerator.GetInt32(0, bag.TilesBag.Count); p.AddTileToPlayer(bag.TilesBag[val]); bag.RemoveTileInBag(bag.TilesBag[val]); @@ -130,6 +142,7 @@ namespace QwirkleClassLibrary if (GameRunning == true) { players[0].IsPlaying = true; + //OnNextPlayer(new NextPlayerNotifiedEventArgs(players[0])); return players[0].NameTag; } else @@ -150,6 +163,7 @@ namespace QwirkleClassLibrary players[i].IsPlaying = false; players[(i + 1) % players.Count].IsPlaying = true; + OnNextPlayer(new NextPlayerNotifiedEventArgs(players[i])); return players[GetPlayingPlayerPosition()].NameTag; } diff --git a/Qwirkle/QwirkleClassLibrary/NextPlayerNotifiedEventArgs.cs b/Qwirkle/QwirkleClassLibrary/NextPlayerNotifiedEventArgs.cs new file mode 100644 index 0000000..6c0f6aa --- /dev/null +++ b/Qwirkle/QwirkleClassLibrary/NextPlayerNotifiedEventArgs.cs @@ -0,0 +1,12 @@ +namespace QwirkleClassLibrary +{ + public class NextPlayerNotifiedEventArgs : EventArgs + { + public Player player { get; set; } + + public NextPlayerNotifiedEventArgs(Player player) + { + this.player = player; + } + } +} \ No newline at end of file diff --git a/Qwirkle/QwirkleConsoleApp/NotificationClass.cs b/Qwirkle/QwirkleConsoleApp/NotificationClass.cs index 3cd2dc4..953e9d6 100644 --- a/Qwirkle/QwirkleConsoleApp/NotificationClass.cs +++ b/Qwirkle/QwirkleConsoleApp/NotificationClass.cs @@ -9,25 +9,14 @@ namespace QwirkleConsoleApp { class NotificationClass { - public void NotificationMessagePlayer(object? sender, AddPlayerNotifiedEventArgs args) + public void NotificationPlayerAdd(object? sender, AddPlayerNotifiedEventArgs args) { - int t = args.numberBack; + Console.WriteLine(args.returnedNotified); + } - 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; - } + public void NotificationNextPlayer(object? sender, NextPlayerNotifiedEventArgs args) + { + Console.WriteLine(args.player.NameTag + "'s turn"); } } } diff --git a/Qwirkle/QwirkleConsoleApp/Program.cs b/Qwirkle/QwirkleConsoleApp/Program.cs index 7c6580f..ab2d393 100644 --- a/Qwirkle/QwirkleConsoleApp/Program.cs +++ b/Qwirkle/QwirkleConsoleApp/Program.cs @@ -9,6 +9,7 @@ using static System.Console; static void AddPlayers(Game game) { NotificationClass nc = new NotificationClass(); + game.PlayerAddNotified += nc.NotificationPlayerAdd; while (game.PlayerList.Count < 4) { @@ -17,10 +18,6 @@ static void AddPlayers(Game game) game.AddPlayerInGame(playerTag); - game.PlayerAddNotified -= nc.NotificationMessagePlayer; - - game.PlayerAddNotified += nc.NotificationMessagePlayer; - Write("Do you want to add another player ? (y/n) : "); string? answer = ReadLine(); @@ -130,7 +127,14 @@ static void MenuSwitch(Game game) WriteLine("[2] Swap your tiles"); WriteLine("[3] Skip your turn"); - enter = Convert.ToInt32(ReadLine()); + try + { + enter = Convert.ToInt32(ReadLine()); + } + catch { + WriteLine("ERROR : You must type (1 / 2 / 3). Please retry : "); + } + switch (enter) { @@ -155,12 +159,14 @@ static void MainMenu(Game game) WriteLine("Game is starting !"); Console.ResetColor(); + NotificationClass nc = new NotificationClass(); + game.NextPlayerNotified += nc.NotificationNextPlayer; + do { - string tagPlayerPlay = game.SetNextPlayer(); + game.SetNextPlayer(); WriteLine(" --------------------- GAME ! ------------------------"); - WriteLine(tagPlayerPlay + "'s turn !"); game.DrawTiles(game.GetPlayingPlayer()); MenuSwitch(game);