public Keyboard(Character [,] keySet, int maxDepth) { keys = keySet; _maxDepth = maxDepth; DimensionX = keys.GetUpperBound(1); DimensionY = keys.GetUpperBound(0); // Set up the keyboard character meta data SetKeyBoardCharacterList(); SetKnightMoveFunctionList(); SetKeyLocations(); SetKeyKnightMoveOptions(); }
// Decided it would be more efficient to use // the list of possible valid words from the dictionary and evaluate them then // against the keyboard Knight Move permutations using PLinq. private static string[] FindValidWords(Character[,] characterSet) { string fileName = @"..\..\Data\SINGLE.TXT"; string[] filteredDictionary; // PLinq is more efficient with arrays. Keyboard board = new Keyboard(characterSet, SEARCH_DEPTH); using (StreamReader sr = new StreamReader(fileName)) { filteredDictionary = sr.Lines().ToArray(); } string[] finalWordList = (from word in filteredDictionary.AsParallel() .WithMergeOptions(ParallelMergeOptions.NotBuffered) .WithDegreeOfParallelism(Environment.ProcessorCount) where board.ValidateWord(new Word(word)) select word).ToArray(); return finalWordList; }
/// <summary> /// Special keys return more than just a single character /// </summary> /// <returns>All keys relating to the special keys</returns> public List<Character> SpecialKeys(Character currentChar) { List<Character> charList = new List<Character>(); // Check if we are on a special key like the spacebar/shift/enter // If we are return all the other keys that do not have the same location if (this.CurrentCharacter().Id.HasValue) charList = (from chr in CharacterList where chr.Id.Value == currentChar.Id.Value && chr.LocationX != currentChar.LocationX && chr.LocationY != currentChar.LocationY select chr).ToList(); return charList; }