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