示例#1
0
        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,
            });
        }
示例#2
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,
            });
        }