From a86a39cbb1d1b7f6c3e1b9bed0f6169e4fc24a9c Mon Sep 17 00:00:00 2001 From: "jules.lascret" Date: Tue, 14 May 2024 19:01:46 +0200 Subject: [PATCH] I could be a fucking genius --- Qwirkle/QwirkleClassLibrary/Board.cs | 1 - Qwirkle/QwirkleClassLibrary/Game.cs | 43 +++++++++++++++++++++++++-- Qwirkle/QwirkleClassLibrary/IRules.cs | 2 ++ Qwirkle/QwirkleConsoleApp/Program.cs | 2 ++ 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/Qwirkle/QwirkleClassLibrary/Board.cs b/Qwirkle/QwirkleClassLibrary/Board.cs index 4614b52..81ba4e0 100644 --- a/Qwirkle/QwirkleClassLibrary/Board.cs +++ b/Qwirkle/QwirkleClassLibrary/Board.cs @@ -51,7 +51,6 @@ namespace QwirkleClassLibrary if (cells[i].IsFree == true) { return cells[i].SetTile(tile); - } } return false; diff --git a/Qwirkle/QwirkleClassLibrary/Game.cs b/Qwirkle/QwirkleClassLibrary/Game.cs index 902b2dd..bbf5fa7 100644 --- a/Qwirkle/QwirkleClassLibrary/Game.cs +++ b/Qwirkle/QwirkleClassLibrary/Game.cs @@ -20,6 +20,9 @@ namespace QwirkleClassLibrary public ReadOnlyCollection ScoreList => scores.AsReadOnly(); private readonly List scores = new(); + + public ReadOnlyCollection CellsUsed => cellUsed.AsReadOnly(); + private readonly List cellUsed = new(); public Game() { @@ -80,6 +83,16 @@ namespace QwirkleClassLibrary return true; } + public void AddCellUsed(Cell? c) + { + if (c != null) cellUsed.Add(c); + } + + public void EmptyCellUsed() + { + cellUsed.Clear(); + } + public Player GetPlayingPlayer() { if(GetPlayingPlayerPosition() == -1) @@ -163,7 +176,7 @@ namespace QwirkleClassLibrary /// - /// + /// Allows a player to draw tiles from the bag as soon as he has less than 6 tiles /// /// /// @@ -238,6 +251,30 @@ namespace QwirkleClassLibrary return true; } + public bool CheckTilesInLine(List cells, Board b, int x, int y) + { + if(cells.Count < 2) + { + return true; + } + + var x1 = cells[0].GetX; + var y1 = cells[0].GetY; + var x2 = cells[1].GetX; + var y2 = cells[1].GetY; + + if (x1 == x2) + { + return x == x1; + } + if (y1 == y2) + { + return y == y1; + } + + return false; + } + public bool IsMoveCorrect(Tile t, int x, int y, Board b) { if (!b.HasOccupiedCase()) @@ -274,8 +311,8 @@ namespace QwirkleClassLibrary } } - return surroundingCells.Any(cell => cell?.GetTile != null); - } + return CheckTilesInLine(this.cellUsed, b, x, y) && surroundingCells.Any(cell => cell?.GetTile != null); + } public bool IsGameOver() diff --git a/Qwirkle/QwirkleClassLibrary/IRules.cs b/Qwirkle/QwirkleClassLibrary/IRules.cs index 40fe258..5041b74 100644 --- a/Qwirkle/QwirkleClassLibrary/IRules.cs +++ b/Qwirkle/QwirkleClassLibrary/IRules.cs @@ -16,6 +16,8 @@ namespace QwirkleClassLibrary bool CheckExtendedSurroundingCells(Tile tile, int x, int y, int dx, int dy, Board b); + bool CheckTilesInLine(List cells, Board b, int x, int y); + bool IsGameOver(); } } diff --git a/Qwirkle/QwirkleConsoleApp/Program.cs b/Qwirkle/QwirkleConsoleApp/Program.cs index c4bfd54..e76c236 100644 --- a/Qwirkle/QwirkleConsoleApp/Program.cs +++ b/Qwirkle/QwirkleConsoleApp/Program.cs @@ -76,6 +76,7 @@ static void AddTile(Game game) if (game.PlaceTile(game.GetPlayingPlayer(), tile, x, y) == true) { WriteLine("ok ! your tile is placed"); + game.AddCellUsed(game.GetBoard().GetCell(x, y)); } else { @@ -149,6 +150,7 @@ static void MenuSwitch(Game game) enter = 3; break; case 3: + game.EmptyCellUsed(); return; } }