public static PlayWord GetVerticalWord(this IBoard board, IEnumerable <IPlayLetter> allLetters, IPlayLetter letter) { int posX = letter.Tile.X; int startY = letter.Tile.Y; int endY = letter.Tile.Y; while (startY > 0) { startY--; var previousLetter = allLetters.SingleOrDefault(l => l.Tile.Y == startY && l.Tile.X == posX); if (previousLetter == null) { startY++; break; } } while (endY <= board.BoardRows) { endY++; var previousLetter = allLetters.SingleOrDefault(l => l.Tile.Y == endY && l.Tile.X == posX); if (previousLetter == null) { endY--; break; } } var word = new List <IPlayLetter>(); if (endY > startY) { for (int y = startY; y <= endY; y++) { var wletter = allLetters.Single(ls => ls.Tile.Y == y && ls.Tile.X == posX); word.Add(wletter); } } // TODO check 1 letter words return(new PlayWord { Letters = word.Select(l => l.ToDto <PlayLetter>()).ToArray(), Score = 0, RawScore = 0, }); }
public static PlayWord GetHorizontalWord(this IBoard board, IEnumerable <IPlayLetter> allLetters, IPlayLetter letter) { var posY = letter.Tile.Y; int startX = letter.Tile.X; int endX = letter.Tile.X; while (startX > 0) { startX--; var previousLetter = allLetters.SingleOrDefault(l => l.Tile.Y == posY && l.Tile.X == startX); if (previousLetter == null) { startX++; break; } } while (endX <= board.BoardColumns) { endX++; var previousLetter = allLetters.SingleOrDefault(l => l.Tile.Y == posY && l.Tile.X == endX); if (previousLetter == null) { endX--; break; } } var word = new List <IPlayLetter>(); if (endX > startX) { for (int x = startX; x <= endX; x++) { var wletter = allLetters.Single(ls => ls.Tile.Y == posY && ls.Tile.X == x); word.Add(wletter); } } // TODO check 1 letter words return(new PlayWord { Letters = word.Select(l => l.ToDto <PlayLetter>()).ToArray(), Score = 0, RawScore = 0, }); }