示例#1
0
        private bool HandleOneGameTurn(Guid humanUserId)
        {
            var game = GetGameByUser(humanUserId);

            if (game.IsFinished())
            {
                UpdatePlayersWhenGameFinished(game);
                return(false);
            }

            PlayerDecision?decision = AskHumanDecision();

            if (!decision.HasValue)
            {
                return(false);
            }
            game.SetPlayerDecision(humanUserId, decision.Value);

            var aiPlayer = game.Players.First(p => p.UserId != humanUserId);

            game.SetPlayerDecision(aiPlayer.UserId, GetAiDecision());

            if (game.HaveDecisionOfEveryPlayer)
            {
                var gameTurn = game.FinishTurn();
                turnRepo.Insert(gameTurn);
            }

            ShowScore(game);
            gameRepo.Update(game);
            return(true);
        }
示例#2
0
        public IActionResult DoStep([FromRoute] Guid gameId, [FromQuery] Guid userId, [FromQuery] int decision)
        {
            if (gameId == Guid.Empty || userId == Guid.Empty || decision < 1 || decision > 3)
            {
                return(BadRequest());
            }
            var game = gameRepo.FindById(gameId);

            if (game == null)
            {
                return(NotFound());
            }
            if (game.Status != GameStatus.Playing)
            {
                return(BadRequest());
            }
            game.SetPlayerDecision(userId, (PlayerDecision)decision);

            GameTurnEntity turn = null;

            if (game.HaveDecisionOfEveryPlayer)
            {
                turn = game.FinishTurn();
                turnRepo.Insert(turn);
            }
            gameRepo.Update(game);
            return(turn != null
                ? Ok(GetScore(game, turn))
                : NoContent() as IActionResult);
        }