From a49f7ff23bf1f0b40a11a232d8c3d952f165caee Mon Sep 17 00:00:00 2001 From: "jules.lascret" Date: Fri, 10 May 2024 17:04:45 +0200 Subject: [PATCH] If that genuinely works, I'm a genius --- Qwirkle/QwirkleClassLibrary/Game.cs | 186 ++++++++++++++++++---------- 1 file changed, 120 insertions(+), 66 deletions(-) diff --git a/Qwirkle/QwirkleClassLibrary/Game.cs b/Qwirkle/QwirkleClassLibrary/Game.cs index 34cabe3..2049b4e 100644 --- a/Qwirkle/QwirkleClassLibrary/Game.cs +++ b/Qwirkle/QwirkleClassLibrary/Game.cs @@ -207,99 +207,153 @@ namespace QwirkleClassLibrary return true; } + // public bool IsMoveCorrect(Tile t, int x, int y, Board b) + // { + // if (b.HasOccupiedCase() == false) + // { + // return true; + // } + // + // var surroundingCells = new List(); + // + // 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 (cell?.GetTile == null) + // { + // surroundingCells.Remove(cell); + // continue; + // } + // + // if (cell?.GetTile.GetColor != t.GetColor && cell?.GetTile.GetShape != t.GetShape) + // { + // return false; + // } + // } + // + // if(surroundingCells.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; + // } + public bool IsMoveCorrect(Tile t, int x, int y, Board b) { - if (b.HasOccupiedCase() == false) + if (!b.HasOccupiedCase()) { return true; } - var surroundingCells = new List(); + var surroundingCells = new[] + { + b.GetCell(x + 1, y), + b.GetCell(x - 1, y), + b.GetCell(x, y + 1), + b.GetCell(x, y - 1) + }; - 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()) + foreach (var cell in surroundingCells) { if (cell?.GetTile == null) { - surroundingCells.Remove(cell); continue; } - if (cell?.GetTile.GetColor != t.GetColor && cell?.GetTile.GetShape != t.GetShape) + if (cell.GetTile.GetColor != t.GetColor && cell.GetTile.GetShape != t.GetShape) { return false; - } - } + } - if(surroundingCells.Count == 0) return false; - - foreach (var cell in surroundingCells.ToList()) - { - var extendedCells = new List(); + var dx = cell.GetX - x; + var dy = cell.GetY - y; - 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++) { - for (int i = 1; i < 7; i++) + var extendedCell = b.GetCell(x + i * dx, y + i * dy); + + if (extendedCell?.GetTile == null) { - if (b.GetCell(x + i, y)?.GetTile != null) - { - extendedCells.Add(b.GetCell(x + i, y)); - } + break; } - } - - else if (cell?.GetX == x - 1 && cell?.GetY == y) - { - for (int i = 1; i < 7; i++) + + if (extendedCell.GetTile.GetColor != t.GetColor && extendedCell.GetTile.GetShape != t.GetShape) { - if (b.GetCell(x - i, y)?.GetTile != null) - { - extendedCells.Add(b.GetCell(x - i, y)); - } + return false; } - } - - foreach (var e in extendedCells) - { - if (e?.GetTile?.GetColor != t.GetColor && e?.GetTile?.GetShape != t.GetShape) + + if (i == 6) { return false; } } - - if (extendedCells.Count == 6) - { - return false; - } } - - return true; + + return surroundingCells.Any(cell => cell?.GetTile != null); }