Ejemplo n.º 1
0
        public WordPuzzleEntry Solve(string word)
        {
            ThrowIfGameIsOver();
            AttemptIndex++;
            _oneLetterLeftFailures = 0;

            var puzzleEntry = _wordPuzzle.Solve(word);

            if (puzzleEntry.LetterEntries.All(x => x.State == LetterState.CorrectLocation))
            {
                State = new WordGameStateInfo(WordGameState.Won);
                return(puzzleEntry);
            }

            UpdateKnownLetters(puzzleEntry);

            if (AttemptIndex == 6)
            {
                State = new WordGameStateInfo(WordGameState.Lost);
            }
            else if (AttemptIndex == 5) // matrix full. switch teams.
            {
                SwitchTeam(true);
            }
            else
            {
                if (ActiveTeamIndex != _startingTeamIndex)
                {
                    // the attempt made by the other team was not correct.
                    // Switch back the turn to the original team.
                    ActiveTeamIndex = _startingTeamIndex;
                    State           = new WordGameStateInfo(WordGameState.SwitchTeam, SwitchTeamFlags.Normal);
                }
                else
                {
                    State = new WordGameStateInfo(WordGameState.Ongoing);
                }
            }

            return(puzzleEntry);
        }
Ejemplo n.º 2
0
        private void SwitchTeam(bool onNewRow)
        {
            SwitchTeamFlags flag = onNewRow ? SwitchTeamFlags.AddRow : SwitchTeamFlags.ClearRow;

            ActiveTeamIndex = ActiveTeamIndex == 0 ? 1 : 0;
            if (KnownLetters.Count(x => x == '.') > 1)
            {
                State = new WordGameStateInfo(WordGameState.SwitchTeam, flag | SwitchTeamFlags.AddBonusLetter);
            }
            else
            {
                if (_oneLetterLeftFailures++ > 1)
                {
                    State = new WordGameStateInfo(WordGameState.Lost);
                }
                else
                {
                    State = new WordGameStateInfo(WordGameState.SwitchTeam, flag);
                }
            }
        }