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