public void SubmitAnswer(Player player, string answer, Action onSuccess) { if (IsPrompt(answer)) { Logger.Log(this, "Player {0}'s answer matches prompt!", player.Data.Name); player.SendAnswerValidation(GameAnswerValidationResponse.MatchesPrompt); } else if (MatchesExistingAnswer(answer)) { Logger.Log(this, "Player {0}'s answer matches an existing answer from another player!", player.Data.Name); player.SendAnswerValidation(GameAnswerValidationResponse.AlreadyExists); } else if (string.IsNullOrWhiteSpace(answer)) { player.SendAnswerValidation(GameAnswerValidationResponse.Empty); } else { player.SendAnswerValidation(GameAnswerValidationResponse.None); // Add answer here var answerData = new AnswerData(player.Data, answer.Trim()); Logger.Log(this, "Add answer: {0}", answerData.Answer); answers.Add(answerData); // Tell all clients that player has submitted answer Players.ForEach(x => x.NotifyPlayerGameAction(player.Data, GamePlayerAction.AnswerSubmitted)); if (onSuccess != null) onSuccess(); } }
public SendActualAnswer(AnswerData answer) { Answer = answer; }
public SendResult(AnswerData answer) { Answer = answer; }
public ScoreData(uint score, uint likes, AnswerData answerGiven) { Score = score; Likes = likes; AnswerGiven = answerGiven; }
public Queue<AnswerData> GetResults() { var results = new Queue<AnswerData>(); // Sort answers by least chosen to most chosen excluding the actual answer var sortedAnswers = ChosenAnswers .Where(x => x.Type != GameAnswerType.ActualAnswer) .OrderBy(x => x.Choosers.Count) .ToList(); sortedAnswers.ForEach(x => results.Enqueue(x)); // Append the actual answer to the queue var actualAnswer = ChosenAnswers.FirstOrDefault(x => x.Type == GameAnswerType.ActualAnswer); if (actualAnswer == null) actualAnswer = new AnswerData(CurrentDrawing.Prompt.GetText(), GameAnswerType.ActualAnswer); results.Enqueue(actualAnswer); return results; }
public void SendChoicesToPlayers() { // Find out how many players didn't answer var playersWithNoAnswerCount = 0; foreach (var player in Players) { if (!answers.Any(x => x.Author == player.Data) && player.Data != CurrentDrawing.Creator) playersWithNoAnswerCount++; } // Add decoys for every player that didn't answer var decoys = Settings.Drawesome.Decoys; if (decoys.Count == 0) { Logger.Warn(this, "Can't add decoys as none are present in Drawesome's settings"); } else { var rnd = new Random(); for (int i = 0; i < playersWithNoAnswerCount; i++) { var decoy = decoys[rnd.Next(0, decoys.Count - 1)]; answers.Add(new AnswerData(decoy, GameAnswerType.Decoy)); Console.WriteLine("Add decoy: {0}", decoy); } } // Add actual answer var answerData = new AnswerData(CurrentDrawing.Prompt.GetText(), GameAnswerType.ActualAnswer); answers.Add(answerData); Players.ForEach(x => x.SendChoices(CurrentDrawing.Creator, answers.ToList())); }