Пример #1
0
        private void VotingForPlayersWordsTimeout()
        {
            LogSaver.Log("VotingForPlayersWords Timeout");
            User contacter, questioner;
            bool openLetter           = false;
            bool winGame              = false;
            bool CurrentWordAccepted  = false;
            bool VarOfCurWordAccepted = false;

            lock (gameState)
            {
                CurrentWordAccepted  = gameState.votings[0].Accepted(gameState.Users.Count);
                VarOfCurWordAccepted = gameState.votings[1].Accepted(gameState.Users.Count);


                // добавить в список используемых
                if (CurrentWordAccepted)
                {
                    gameState.UsedWords.Add(gameState.CurrentWord);
                }

                if (VarOfCurWordAccepted)
                {
                    gameState.UsedWords.Add(gameState.VarOfCurWord);
                }


                if (CurrentWordAccepted && VarOfCurWordAccepted) // игроки выиграли
                {
                    gameState.NumberOfOpenChars++;

                    if (gameState.NumberOfOpenChars == gameState.PrimaryWord.Length)
                    {
                        winGame = true;
                    }
                    else
                    {
                        openLetter = true;
                    }
                }


                // сбросить роли
                contacter      = gameState.Users.Single(user => user.role == User.Role.Contacter);
                contacter.role = User.Role.None;

                questioner      = gameState.Users.Single(user => user.role == User.Role.Qwestioner);
                questioner.role = User.Role.None;
            }

            //разослать изменения
            BroadcastMessage(GameMessage.UserRoleChangedMessage(contacter, User.Role.None));
            BroadcastMessage(GameMessage.UserRoleChangedMessage(questioner, User.Role.None));

            //Сообщить о добавленых словах
            if (CurrentWordAccepted)
            {
                BroadcastMessage(GameMessage.UsedWordAddedMessage(gameState.CurrentWord)); // TODO: а это безопасно?
            }
            if (VarOfCurWordAccepted)
            {
                BroadcastMessage(GameMessage.UsedWordAddedMessage(gameState.VarOfCurWord));
            }


            if (openLetter)
            {
                BroadcastMessage(GameMessage.PrimaryWordCharOpened());
            }

            if (winGame)
            {
                ChangeState(GameState.State.GameOver);
            }
            else
            {
                ChangeState(GameState.State.HaveNoCurrentWord);
            }

            LogSaver.Log("VotingForPlayersWords Timeout end");
        }
Пример #2
0
        private void VotingForHostWordTimeout()
        {
            LogSaver.Log("VotingForChiefWord Timeout");
            bool openLetter = false;
            bool winGame = false;
            bool ChiefWord = false;
            User questioner, contacter;

            lock (gameState)
            {
                ChiefWord = gameState.votings[0].Accepted(gameState.Users.Count);

                if (ChiefWord)
                {
                    gameState.UsedWords.Add(gameState.ChiefWord);
                }
                else
                {
                    gameState.NumberOfOpenChars++;

                    if (gameState.NumberOfOpenChars == gameState.PrimaryWord.Length)
                    {
                        winGame = true;
                    }
                    else
                    {
                        openLetter = true;
                    }
                }

                questioner = gameState.Users.SingleOrDefault(user => user.role == User.Role.Qwestioner);
                contacter  = gameState.Users.SingleOrDefault(user => user.role == User.Role.Contacter);
            }

            if (questioner != null)
            {
                questioner.role = User.Role.None;
                BroadcastMessage(GameMessage.UserRoleChangedMessage(questioner, User.Role.None));
            }

            if (contacter != null)
            {
                contacter.role = User.Role.None;
                BroadcastMessage(GameMessage.UserRoleChangedMessage(contacter, User.Role.None));
            }

            if (ChiefWord)
            {
                BroadcastMessage(GameMessage.UsedWordAddedMessage(gameState.ChiefWord));
            }

            if (openLetter)
            {
                BroadcastMessage(GameMessage.PrimaryWordCharOpened());
            }

            if (winGame)
            {
                ChangeState(GameState.State.GameOver);
            }
            else
            {
                ChangeState(GameState.State.HaveNoCurrentWord);
            }
        }