public bool CheckAnswer(RoundAnswer answer, GamePlayer player) { lock (_lock) { if (!Players.Any(x => x.Id == player.Id)) { return(false); } if (_answeredPlayers.Any(x => x.Id == player.Id)) { return(false); } _answeredPlayers = _answeredPlayers.Add(player); bool isAnswerCorrect; if (answer.IsEquationCorrect) { isAnswerCorrect = Equation.CheckResult(Equation.ShownResult); } else { isAnswerCorrect = !Equation.CheckResult(Equation.ShownResult); } return(isAnswerCorrect); } }
public async Task Answer(string playerKey, RoundAnswer answer) { var result = await _mathGameState.CheckAnswer(answer, playerKey); if (result.IsCorrectAnswer) { await SendMessage(new RoundEndMessage() { WinningPlayerId = playerKey }); await SendMessage(new PlayerInfoUpdateMessage() { Id = result.WinningPlayer.Id, Name = result.WinningPlayer.Name, Score = result.WinningPlayer.Score, }); } await SendMessage(new DisableRoundMessage() { DisableForPlayerId = playerKey }); await TryStartRound(result); }
public async Task <CheckAnswerResult> CheckAnswer(RoundAnswer answer, string id) { if (_players.TryGetValue(id, out var player)) { return(await CheckAnswer(answer, player)); } var status = UpdateRoundStatus(); return(new CheckAnswerResult(status.State)); }
public Task <CheckAnswerResult> CheckAnswer(RoundAnswer answer, GamePlayer player) { lock (_lock) { if (CurrentState != GameState.RoundInPlay) { return(Task.FromResult(new CheckAnswerResult(GetRoundState(CurrentState)))); } var isAnswerCorrect = CurrentRound.CheckAnswer(answer, player); if (isAnswerCorrect) { player.Score++; var roundHistoryItem = new GameRoundHistory() { Id = CurrentRound.Id, StartTime = CurrentRound.StartTime, EndTime = _dateTimeProvider.UtcNow, Players = CurrentRound.Players, WinningPlayer = player }; _roundHistoryArray = _roundHistoryArray.Add(roundHistoryItem); var winningRoundState = ResetRound(); return(Task.FromResult(new CheckAnswerResult(winningRoundState.State, player))); } var roundState = UpdateRoundStatus(); return(Task.FromResult(new CheckAnswerResult(roundState.State))); } }
public Task Answer(RoundAnswer answer) { return(_client.Answer(answer, Context.ConnectionId)); }
public Task Answer(RoundAnswer answer, string key) { return(_mathGameProcessor.Answer(key, answer)); }