diff --git a/Qwirkle/QwirkleClassLibrary/Games/Game.cs b/Qwirkle/QwirkleClassLibrary/Games/Game.cs index a3e2711..ab0da75 100644 --- a/Qwirkle/QwirkleClassLibrary/Games/Game.cs +++ b/Qwirkle/QwirkleClassLibrary/Games/Game.cs @@ -21,7 +21,7 @@ namespace QwirkleClassLibrary.Games public ReadOnlyDictionary ScoreBoard => scoreBoard.AsReadOnly(); private readonly Dictionary scoreBoard = new(); - private TileBag bag; + private TileBag? bag = null; public bool GameRunning { get; private set; } private Board board; @@ -56,7 +56,6 @@ namespace QwirkleClassLibrary.Games /// public Game() { - bag = CreateTileBag(3); board = CreateBoard(); } @@ -120,6 +119,12 @@ namespace QwirkleClassLibrary.Games /// /// Board public Board GetBoard() { return board; } + + /// + /// Returns the tile bag of the game + /// + /// + public TileBag GetTileBag() { return bag; } /// /// Creates a board with a number of columns and rows @@ -148,6 +153,7 @@ namespace QwirkleClassLibrary.Games public void StartGame() { if (players.Count < 2 || players.Count >= 5) return; + bag = CreateTileBag(3); GameRunning = true; } @@ -177,7 +183,7 @@ namespace QwirkleClassLibrary.Games { if (GetPlayingPlayerPosition() == -1) { - throw new ArgumentException("No player play."); + throw new ArgumentException("No player currently playing !"); } return players[GetPlayingPlayerPosition()]; } @@ -217,10 +223,13 @@ namespace QwirkleClassLibrary.Games { for (int j = 0; j < 6; j++) { - int val = RandomNumberGenerator.GetInt32(0, bag.TilesBag.Count); + if (bag != null) + { + int val = RandomNumberGenerator.GetInt32(0, bag.TilesBag.Count); - p.AddTileToPlayer(bag.TilesBag[val]); - bag.RemoveTileInBag(bag.TilesBag[val]); + p.AddTileToPlayer(bag.TilesBag[val]); + bag.RemoveTileInBag(bag.TilesBag[val]); + } } } } @@ -650,7 +659,7 @@ namespace QwirkleClassLibrary.Games /// /// /// - public bool CheckBoardTile(List playerTilesBagPos) + public bool CheckPlacementPossibilities(List playerTilesBagPos) { for (int i = 0; i < playerTilesBagPos.Count; i++) { @@ -682,7 +691,7 @@ namespace QwirkleClassLibrary.Games { List playerTilesBagPos = CheckTilesBag(); - if (playerTilesBagPos.Count != 0 && !CheckBoardTile(playerTilesBagPos)) + if (playerTilesBagPos.Count != 0 && !CheckPlacementPossibilities(playerTilesBagPos)) { OnEndOfGame(new EndOfGameNotifiedEventArgs(player)); GameRunning = false; @@ -692,5 +701,15 @@ namespace QwirkleClassLibrary.Games return false; } + + public void ClearGame() + { + players.Clear(); + scoreBoard.Clear(); + cellUsed.Clear(); + bag = null; + board = CreateBoard(); + GameRunning = false; + } } } \ No newline at end of file diff --git a/Qwirkle/TestBase/TestGame.cs b/Qwirkle/TestBase/TestGame.cs index 98bd724..5460711 100644 --- a/Qwirkle/TestBase/TestGame.cs +++ b/Qwirkle/TestBase/TestGame.cs @@ -214,21 +214,19 @@ public class TestGame game.AddPlayerInGame("Test1"); game.AddPlayerInGame("Test2"); - game.GiveTilesToPlayers(); - if (except) { game.StartGame(); + game.GiveTilesToPlayers(); game.SetNextPlayer(); Assert.True(game.PlaceTile(game.GetPlayingPlayer(), game.PlayerList[game.GetPlayingPlayerPosition()].Tiles[0], 1, 1)); return; } game.StartGame(); + game.GiveTilesToPlayers(); game.SetNextPlayer(); Assert.False(game.PlaceTile(game.GetPlayingPlayer(), game.PlayerList[game.GetPlayingPlayerPosition()].Tiles[0], -5, 1)); - return; - } [Fact] @@ -389,6 +387,23 @@ public class TestGame game.CheckGameOver(game.GetPlayingPlayer()); } + + [Fact] + public void Test_ClearGame() + { + Game game = new Game(); + game.AddPlayerInGame("Test1"); + game.AddPlayerInGame("Test2"); + + game.StartGame(); + game.SetFirstPlayer(); + + game.ClearGame(); + + Assert.Empty(game.PlayerList); + Assert.Null(game.GetTileBag()); + Assert.Equal(-1, game.GetPlayingPlayerPosition()); + } }