public List <string> Deserialize(int wordLength) { if (!_fileSystem.File.Exists(_filePath)) { throw new FileNotFoundException(); } List <string> words = new List <string>(); using (StreamReader reader = new StreamReader(_fileSystem.File.OpenRead(_filePath))) { string line; while ((line = reader.ReadLine()) != null) { string word = line.Replace("\n", "").Replace("\r", ""); if (char.IsUpper(word[0])) { continue; } word = WordFormatter.Format(word); if (WordIsAllowed(wordLength, word)) { words.Add(word); } } } return(words); }
private List <string> OnCalcWordList(List <BaseFormulaNode> nodes, VariablesSource variables) { // Rent using var idContainer = GetIdContainer(); // Calculate with internal struct List <string> res = CalcInternal(nodes, variables, idContainer); return(WordFormatter.Format(res)); }
public WordInputViewModel(List <string> words, Settings settings, Random random, WordGameViewModel wordGameViewModel) { _words = words; _settings = settings; _random = random; _wordGameViewModel = wordGameViewModel; CandidateWord = GetRandomWord(); var gameIsOngoing = this.WhenAnyValue(x => x.StateInfo.State, (state) => state == WordGameState.Ongoing); var canAccept = this.WhenAnyValue( x => x.WordInputtedByUser, x => x.StateInfo.State, (word, state) => !string.IsNullOrEmpty(word) && state == WordGameState.Ongoing && WordFormatter.Format(word).Length == settings.WordSize); Accept = ReactiveCommand.Create(() => new Unit(), canAccept); Reject = ReactiveCommand.Create(() => new Unit(), gameIsOngoing); TimeOut = ReactiveCommand.Create(() => new Unit(), gameIsOngoing); AddRow = ReactiveCommand.Create(() => new Unit(), this.WhenAnyValue(x => x.StateInfo.Flags, (switchTeamFlags) => (switchTeamFlags & SwitchTeamFlags.AddRow) == SwitchTeamFlags.AddRow)); AddBonusLetter = ReactiveCommand.Create(() => new Unit(), this.WhenAnyValue(x => x.StateInfo.Flags, (switchTeamFlags) => (switchTeamFlags & SwitchTeamFlags.AddBonusLetter) == SwitchTeamFlags.AddBonusLetter)); ClearRow = ReactiveCommand.Create(() => new Unit(), this.WhenAnyValue(x => x.StateInfo.Flags, (flags) => (flags & SwitchTeamFlags.ClearRow) == SwitchTeamFlags.ClearRow)); GenerateWord = ReactiveCommand.Create(() => { CandidateWord = GetRandomWord(); return(new Unit()); }); NewGame = ReactiveCommand.CreateFromTask(async() => { var cancel = CancelCountDownAndGetNewToken(); CurrentWord = CandidateWord; CandidateWord = GetRandomWord(); await wordGameViewModel.StartWordGame(CurrentWord); StateInfo = new WordGameStateInfo(WordGameState.Ongoing); StartCountDown(cancel.Token); return(Unit.Default); }); ShowWord = ReactiveCommand.Create(() => new Unit(), this.WhenAnyValue(x => x.StateInfo.State, (state) => state == WordGameState.Lost)); this.WhenAnyValue(x => x.WordInputtedByUser) .Where(x => !string.IsNullOrWhiteSpace(x)) .Subscribe(onNext => wordGameViewModel.SetWord(WordFormatter.Format(onNext))); this.Accept.Subscribe(async onNext => { var cancel = CancelCountDownAndGetNewToken(); WordInputtedByUser = null; StateInfo = await wordGameViewModel.AcceptWord(); if (StateInfo.State == WordGameState.SwitchTeam && StateInfo.Flags == SwitchTeamFlags.Normal) { StateInfo = new WordGameStateInfo(WordGameState.Ongoing); } if (StateInfo.State == WordGameState.Ongoing) { StartCountDown(cancel.Token); } }); this.Reject.Subscribe(async onNext => { var cancel = CancelCountDownAndGetNewToken(); WordInputtedByUser = null; StateInfo = await wordGameViewModel.RejectWord(); if (StateInfo.State == WordGameState.Ongoing) { StartCountDown(cancel.Token); } }); this.TimeOut.Subscribe(async onNext => { var cancel = CancelCountDownAndGetNewToken(); WordInputtedByUser = null; StateInfo = await wordGameViewModel.TimeOut(); StartCountDown(cancel.Token); }); this.AddRow.Subscribe(async onNext => { var cancel = CancelCountDownAndGetNewToken(); await wordGameViewModel.AddRow(); if (StateInfo.State == WordGameState.SwitchTeam) { if ((StateInfo.Flags & SwitchTeamFlags.AddBonusLetter) != SwitchTeamFlags.AddBonusLetter) { StateInfo = new WordGameStateInfo(WordGameState.Ongoing); } } StartCountDown(cancel.Token); }); this.AddBonusLetter.Subscribe(async onNext => { var cancel = CancelCountDownAndGetNewToken(); await wordGameViewModel.AddBonusLetter(); StateInfo = new WordGameStateInfo(WordGameState.Ongoing); StartCountDown(cancel.Token); }); this.ClearRow.Subscribe(async x => { await wordGameViewModel.ClearRow(); if ((StateInfo.Flags & SwitchTeamFlags.AddBonusLetter) != SwitchTeamFlags.AddBonusLetter) { StateInfo = new WordGameStateInfo(WordGameState.Ongoing); } }); this.ShowWord.Subscribe(onNext => { CancelCountDownAndGetNewToken(); wordGameViewModel.ShowWord(CurrentWord); }); }