Пример #1
0
        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);
        }
Пример #2
0
        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));
        }
Пример #3
0
        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);
            });
        }