internal void LookDiagonally(Word word, int charIndex)
        {
            //ColumnCount 20, RowCount 10, charIndex 15, rowIndex 0, charactersAbove 0, charactersBelow 9
            int
                rowIndex = charIndex / ColumnCount,
                charactersAbove = rowIndex,
                charactersBelow = RowCount - rowIndex - 1,
                charactersToLeft = charIndex % ColumnCount,
                charactersToRight = ColumnCount - charactersToLeft - 1;

            if (charactersAbove >= word.LengthMinusOne)
            {
                if (charactersToRight >= word.LengthMinusOne && LookUpAndRight(word, charIndex))
                    if(FoundWords.Add(new BTLRFoundWord(word.Text, charIndex, this)))
                        return;
                if (charactersToLeft >= word.LengthMinusOne && LookUpAndLeft(word, charIndex))
                    if(FoundWords.Add(new BTRLFoundWord(word.Text, charIndex, this)))
                        return;
            }

            if (charactersBelow >= word.LengthMinusOne)
            {
                if (charactersToRight >= word.LengthMinusOne && LookDownAndRight(word, charIndex))
                    if(FoundWords.Add(new TBLRFoundWord(word.Text, charIndex, this)))
                        return;
                if (charactersToLeft >= word.LengthMinusOne && LookDownAndLeft(word, charIndex))
                    if(FoundWords.Add(new TBRLFoundWord(word.Text, charIndex, this)))
                        return;
            }
        }
        internal bool LookDown(Word word, int charIndex)
        {
            char[] possibleWord = new char[word.Length];
            int startingRowIndex = charIndex / ColumnCount;

            for (int i = 0; i < word.Length; i++)
                possibleWord[i] = Characters[charIndex + ColumnCount * i];

            return ArrayEquals(possibleWord, word.Text.ToCharArray());
        }
 internal void FindWord(Word word, int currentIndex)
 {
     LookHorizontally(word, currentIndex);
     LookVertically(word, currentIndex);
     LookDiagonally(word, currentIndex);
 }
        internal void LookVertically(Word word, int charIndex)
        {
            //ColumnCount 20, RowCount 10, charIndex 15, rowIndex 0, charactersAbove 0, charactersBelow 9
            int
                rowIndex = charIndex / ColumnCount,
                charactersAbove = rowIndex,
                charactersBelow = RowCount - rowIndex - 1;

            if (charactersAbove >= word.LengthMinusOne && LookUp(word, charIndex))
                if (FoundWords.Add(new BTFoundWord(word.Text, charIndex, this)))
                    return;

            if (charactersBelow >= word.LengthMinusOne && LookDown(word, charIndex))
                if(FoundWords.Add(new TBFoundWord(word.Text, charIndex, this)))
                    return;
        }
        internal bool LookToRight(Word word, int charIndex)
        {
            char[] possibleWord = new char[word.Length];

            for (int i = 0; i < possibleWord.Length; i++)
                possibleWord[i] = Characters[charIndex + i];

            return ArrayEquals(possibleWord, word.Text.ToCharArray());
        }
        internal void LookHorizontally(Word word, int charIndex)
        {
            // ColumnCount 10, charIndex 5, char to left 5, char to right 4
            int
                charactersToLeft = charIndex % ColumnCount,
                charactersToRight = ColumnCount - charactersToLeft - 1;

            if (charactersToRight >= word.LengthMinusOne && LookToRight(word, charIndex))
                if(FoundWords.Add(new LRFoundWord(word.Text, charIndex, this)))
                    return;

            if (charactersToLeft >= word.LengthMinusOne && LookToLeft(word, charIndex))
                if(FoundWords.Add(new RLFoundWord(word.Text, charIndex, this)))
                    return;
        }