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