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); }
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); } } }