Example #1
0
        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);
            }
        }
Example #2
0
        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)));
            }
        }
Example #5
0
 public Task Answer(RoundAnswer answer)
 {
     return(_client.Answer(answer, Context.ConnectionId));
 }
 public Task Answer(RoundAnswer answer, string key)
 {
     return(_mathGameProcessor.Answer(key, answer));
 }