From 26c5d7395c5d55abdba3cf6eea68b37d735ed165 Mon Sep 17 00:00:00 2001 From: "jules.lascret" Date: Fri, 10 May 2024 16:36:51 +0200 Subject: [PATCH] added some ground rules for the tile placement --- Qwirkle/QwirkleClassLibrary/Game.cs | 90 +++++++++++++++++++++++----- Qwirkle/QwirkleConsoleApp/Program.cs | 14 ++--- 2 files changed, 83 insertions(+), 21 deletions(-) diff --git a/Qwirkle/QwirkleClassLibrary/Game.cs b/Qwirkle/QwirkleClassLibrary/Game.cs index af8174d..34cabe3 100644 --- a/Qwirkle/QwirkleClassLibrary/Game.cs +++ b/Qwirkle/QwirkleClassLibrary/Game.cs @@ -23,7 +23,7 @@ namespace QwirkleClassLibrary public Game() { - bag = CreateTileBag(1); + bag = CreateTileBag(3); board = CreateBoard(); } @@ -48,7 +48,7 @@ namespace QwirkleClassLibrary } players.Add(CreatePlayer(playerTag)); - scores.Add(new Score(players[players.Count-1])); + scores.Add(new Score(players[players.Count - 1])); return true; } @@ -63,7 +63,7 @@ namespace QwirkleClassLibrary public Board CreateBoard() { - board = new Board(5, 5); + board = new Board(8, 8); return board; } @@ -214,28 +214,90 @@ namespace QwirkleClassLibrary return true; } - var surroundingTiles = new List(); - - surroundingTiles.Add(b.GetCell(x + 1, y)?.GetTile); - surroundingTiles.Add(b.GetCell(x - 1, y)?.GetTile); - surroundingTiles.Add(b.GetCell(x, y + 1)?.GetTile); - surroundingTiles.Add(b.GetCell(x, y - 1)?.GetTile); + var surroundingCells = new List(); - foreach (var tile in surroundingTiles.ToList()) + surroundingCells.Add(b.GetCell(x + 1, y)); + surroundingCells.Add(b.GetCell(x - 1, y)); + surroundingCells.Add(b.GetCell(x, y + 1)); + surroundingCells.Add(b.GetCell(x, y - 1)); + + foreach (var cell in surroundingCells.ToList()) { - if (tile == null) + if (cell?.GetTile == null) { - surroundingTiles.Remove(tile); + surroundingCells.Remove(cell); continue; } - if (tile.GetColor != t.GetColor && tile.GetShape != t.GetShape) + if (cell?.GetTile.GetColor != t.GetColor && cell?.GetTile.GetShape != t.GetShape) { return false; } } + + if(surroundingCells.Count == 0) return false; - if(surroundingTiles.Count == 0) return false; + foreach (var cell in surroundingCells.ToList()) + { + var extendedCells = new List(); + + if (cell?.GetX == x && cell?.GetY == y + 1) + { + for (int i = 1; i < 7; i++) + { + if (b.GetCell(x, y + i)?.GetTile != null) + { + extendedCells.Add(b.GetCell(x, y + i)); + } + } + } + + else if (cell?.GetX == x && cell?.GetY == y - 1) + { + for (int i = 1; i < 7; i++) + { + if (b.GetCell(x, y - i)?.GetTile != null) + { + extendedCells.Add(b.GetCell(x, y - i)); + } + } + } + + else if (cell?.GetX == x + 1 && cell?.GetY == y) + { + for (int i = 1; i < 7; i++) + { + if (b.GetCell(x + i, y)?.GetTile != null) + { + extendedCells.Add(b.GetCell(x + i, y)); + } + } + } + + else if (cell?.GetX == x - 1 && cell?.GetY == y) + { + for (int i = 1; i < 7; i++) + { + if (b.GetCell(x - i, y)?.GetTile != null) + { + extendedCells.Add(b.GetCell(x - i, y)); + } + } + } + + foreach (var e in extendedCells) + { + if (e?.GetTile?.GetColor != t.GetColor && e?.GetTile?.GetShape != t.GetShape) + { + return false; + } + } + + if (extendedCells.Count == 6) + { + return false; + } + } return true; } diff --git a/Qwirkle/QwirkleConsoleApp/Program.cs b/Qwirkle/QwirkleConsoleApp/Program.cs index b3b78a1..ef2f2a0 100644 --- a/Qwirkle/QwirkleConsoleApp/Program.cs +++ b/Qwirkle/QwirkleConsoleApp/Program.cs @@ -159,13 +159,13 @@ static void ShowBoard(Game game) Board board = game.GetBoard(); List cells = board.GetCells(); - for(int i=0; i