public void BackToLobby(Player player) { if (this.CanRestart(player).IsFailure(out var message)) { throw new InvalidOperationException(message); } Turns.Clear(); WordTiles.Clear(); Status = GameStatus.Lobby; AddPublicEvent(GameEvent.OrganizerRestartedGameInLobby(DateTime.Now)); }
public void TallyVotes() { if (Status != GameStatus.InProgress) { throw new InvalidOperationException(); } if (CurrentTurn?.Status != TurnStatus.Tallying) { throw new InvalidOperationException(); } if (CurrentTurn.EndTurnVotes.Count == Researchers.Count(p => p.Team == CurrentTurn.Team)) { EndCurrentTurn(); } else if (WordTiles.SingleOrDefault(t => t.Votes.Count == Researchers.Count(p => p.Team == CurrentTurn.Team)) is WordTile tile) { CurrentTurn.Guesses.Add(new Guess(tile.Word, CurrentTurn.Guesses.Count, tile.Team)); tile.Votes.Clear(); tile.IsRevealed = true; if (tile.Team == CurrentTurn.Team) { AddPublicEvent(GameEvent.TeamGuessedCorrectly(CurrentTurn.Team, DateTime.Now)); if (CurrentTurn.GuessesRemaining <= 0 || GetTilesRemaining(CurrentTurn.Team) <= 0) { EndCurrentTurn(); } else { CurrentTurn.GuessAgain(); } } else { AddPublicEvent(GameEvent.TeamGuessedIncorrectly(CurrentTurn.Team, DateTime.Now)); EndCurrentTurn(); } } else { throw new InvalidOperationException(); } }