public IHttpActionResult Update([FromBody] PlayRequestDataModel userRequest) { if (!this.ModelState.IsValid) { return(BadRequest(ModelState)); } var user = this.data.Users.All() .Where(u => u.UserName == userRequest.UserName) .FirstOrDefault(); if (user == null) { return(BadRequest("Such user does not exists!")); } if (user.BestScore == null) { user.BestScore = 0; user.Games = 0; this.data.SaveChanges(); } user.Games++; user.BestScore += userRequest.Score; this.data.SaveChanges(); return(Ok(user)); }
public IHttpActionResult Play(PlayRequestDataModel request) { var currentUserId = this.userInfoProvider.GetUserId(); if (request == null || !this.ModelState.IsValid) { return(this.BadRequest(this.ModelState)); } var idAsGuid = new Guid(request.GameId); var game = this.Data.Games.Find(idAsGuid); if (game == null) { return(this.BadRequest("Invalid game id!")); } if (game.FirstPlayerId != currentUserId && game.SecondPlayerId != currentUserId) { return(this.BadRequest("This is not your game!")); } if (game.State != GameState.TurnX && game.State != GameState.TurnO) { return(this.BadRequest("Invalid game state!")); } if ((game.State == GameState.TurnX && game.FirstPlayerId != currentUserId) || (game.State == GameState.TurnO && game.SecondPlayerId != currentUserId)) { return(this.BadRequest("It's not your turn!")); } var positionIndex = (request.Row - 1) * 3 + request.Col - 1; if (game.Board[positionIndex] != '-') { return(this.BadRequest("Invalid position!")); } // Update games state and board var boardAsStringBuilder = new StringBuilder(game.Board); boardAsStringBuilder[positionIndex] = game.State == GameState.TurnX ? 'X' : 'O'; game.Board = boardAsStringBuilder.ToString(); game.State = game.State == GameState.TurnX ? GameState.TurnO : GameState.TurnX; this.Data.SaveChanges(); var gameResult = this.resultValidator.GetResult(game.Board); this.ChangeGameState(gameResult, game); return(this.Ok()); }
public IHttpActionResult Play(PlayRequestDataModel request) { var currentUserId = this.User.Identity.GetUserId(); if (request == null || !ModelState.IsValid) { return BadRequest(ModelState); } var gameIdAsGuid = new Guid(request.GameId); var game = this.data.Games.Find(gameIdAsGuid); if(game == null) { return this.BadRequest("Invalida game id!"); } if(game.State == GameState.Draw || game.State == GameState.FirstPlayerWon || game.State == GameState.SecondPlayerWon) { return BadRequest("The game has ended!"); } if(game.State != GameState.TurnO && game.State != GameState.TurnX) { return this.BadRequest("Invalid game state!"); } if(game.FirstPlayerId != currentUserId && game.SecondPlayerId != currentUserId) { return this.BadRequest("This is not your game!"); } if((game.State == GameState.TurnX && currentUserId != game.FirstPlayerId) || game.State == GameState.TurnO && currentUserId != game.SecondPlayerId) { return this.BadRequest("It is not your turn!"); } var positionIndex = (request.Row - 1) * 3 + request.Col - 1; if(game.Board[positionIndex] != '-') { return this.BadRequest("Invalid position!"); } var gameBoardAsStringBuilder = new StringBuilder(game.Board); gameBoardAsStringBuilder[positionIndex] = game.State == GameState.TurnO ? 'O' : 'X'; game.Board = gameBoardAsStringBuilder.ToString(); game.State = (game.State == GameState.TurnO ? GameState.TurnX : GameState.TurnO); this.data.SaveChanges(); var gameResult = resultValidator.GetResult(game.Board); switch (gameResult) { case GameResult.NotFinished: break; case GameResult.WonByO: game.State = GameState.SecondPlayerWon; this.data.SaveChanges(); break; case GameResult.WonByX: game.State = GameState.FirstPlayerWon; this.data.SaveChanges(); break; case GameResult.Draw: game.State = GameState.Draw; this.data.SaveChanges(); break; default: break; } if(game.State == GameState.Draw) { return this.Ok("Draw!"); } if (game.State == GameState.FirstPlayerWon) { return this.Ok("First player won!"); } if (game.State == GameState.SecondPlayerWon) { return this.Ok("Second player won!"); } return this.Ok(); }
public IHttpActionResult Play(PlayRequestDataModel request) { var currentUserId = this.userIdProvider.GetUserId(); if (request == null || !ModelState.IsValid) { return(this.BadRequest(ModelState)); } var idAsGuid = new Guid(request.GameId); var game = this.data.Games.Find(idAsGuid); if (game == null) { return(this.BadRequest("Invalid game id!")); } if (game.FirstPlayerId != currentUserId && game.SecondPlayerId != currentUserId) { return(this.BadRequest("This is not your game!")); } if (game.State != GameState.TurnX && game.State != GameState.TurnO) { return(this.BadRequest("Invalid game state!")); } if ((game.State == GameState.TurnX && game.FirstPlayerId != currentUserId) || (game.State == GameState.TurnO && game.SecondPlayerId != currentUserId)) { return(this.BadRequest("It's not your turn!")); } var positionIndex = (request.Row - 1) * 3 + request.Col - 1; if (game.Board[positionIndex] != '-') { return(this.BadRequest("Invalid position!")); } // Update games state and board var boardAsStringBuilder = new StringBuilder(game.Board); boardAsStringBuilder[positionIndex] = game.State == GameState.TurnX ? 'X' : 'O'; game.Board = boardAsStringBuilder.ToString(); game.State = game.State == GameState.TurnX ? GameState.TurnO : GameState.TurnX; this.data.SaveChanges(); var firstUser = data.Users.Find(game.FirstPlayerId); var secondUser = data.Users.Find(game.SecondPlayerId); var gameResult = resultValidator.GetResult(game.Board); switch (gameResult) { case GameResult.NotFinished: break; case GameResult.WonByX: game.State = GameState.WonByX; this.data.SaveChanges(); firstUser.GamesWon++; secondUser.GamesLose++; this.data.SaveChanges(); break; case GameResult.WonByO: game.State = GameState.WonByO; this.data.SaveChanges(); firstUser.GamesLose++; secondUser.GamesWon++; this.data.SaveChanges(); break; case GameResult.Draw: game.State = GameState.Draw; this.data.SaveChanges(); firstUser.GamesDraw++; secondUser.GamesDraw++; this.data.SaveChanges(); break; default: break; } return(this.Ok()); }
public IHttpActionResult Play([FromUri] PlayRequestDataModel request) { var userId = User.Identity.GetUserId(); if (!ModelState.IsValid) { return(this.BadRequest(this.ModelState)); } var gameIdAsGuid = new Guid(request.GameId); var game = this.data.Games.All() .FirstOrDefault( x => x.Id == gameIdAsGuid && (x.FirstPlayerId == userId || x.SecondPlayerId == userId)); if (game == null) { return(this.NotFound()); } if (game.State != GameState.TurnX && game.State != GameState.TurnO) { return(this.BadRequest(string.Format("Invalid game state: {0}", game.State))); } if ((game.State == GameState.TurnX && game.FirstPlayerId != userId) || (game.State == GameState.TurnO && game.SecondPlayerId != userId)) { return(this.BadRequest(string.Format("It's not your turn!"))); } int positionIndex = ((request.Row - 1) * 3) + request.Col - 1; if (game.Board[positionIndex] != '-') { return(this.BadRequest("This position is already taken. Please choose a different one.")); } var board = new StringBuilder(game.Board); board[positionIndex] = game.State == GameState.TurnX ? 'X' : 'O'; var boardAsString = board.ToString(); game.Board = boardAsString; game.State = game.State == GameState.TurnX ? GameState.TurnO : GameState.TurnX; var gameResult = this.CheckGameResult(game.Board); var user = this.data.Users.All().First(u => u.Id == userId); switch (gameResult) { case GameResult.XWins: game.State = GameState.GameWonByX; user.Scores += 100; break; case GameResult.OWins: game.State = GameState.GameWonByO; user = this.data.Users.All().First(u => u.Id == userId); user.Scores += 100; break; case GameResult.Draw: game.State = GameState.GameDraw; break; } this.data.SaveChanges(); var gameDataModel = this.data.Games.All() .Where(x => x.Id == gameIdAsGuid && (x.FirstPlayerId == userId || x.SecondPlayerId == userId)) .Project() .To <GameInfoDataModel>() .FirstOrDefault(); return(this.Ok(gameDataModel)); }
public IHttpActionResult Play(PlayRequestDataModel playRequest) { var currentUserId = this.userIdProvider.GetUserId(); if (playRequest == null || !ModelState.IsValid) { return(this.BadRequest(ModelState)); } var idAsGuid = new Guid(playRequest.GameId); var game = this.data.Games.Find(idAsGuid); if (game == null) { return(this.BadRequest("Invalid game id!")); } if (game.State != GameState.TurnFirstPlayerX && game.State != GameState.TurnSecondPlayerO) { return(this.BadRequest("Invalid game state!")); } if (game.FirstPlayerId != currentUserId && game.SecondPlayerId != currentUserId) { return(this.BadRequest("This is not your game!")); } if ((game.State == GameState.TurnFirstPlayerX && game.FirstPlayerId != currentUserId) || (game.State == GameState.TurnSecondPlayerO && game.SecondPlayerId != currentUserId)) { return(this.BadRequest("It is not your turn!")); } var positionIndex = (playRequest.Row - 1) * 3 + (playRequest.Col - 1); if (game.Board[positionIndex] != '-') { return(this.BadRequest("This field is not free!")); } var boardAsStringBuilder = new StringBuilder(game.Board); boardAsStringBuilder[positionIndex] = (game.State == GameState.TurnFirstPlayerX) ? 'X' : 'O'; game.Board = boardAsStringBuilder.ToString(); game.State = game.State == GameState.TurnFirstPlayerX ? GameState.TurnSecondPlayerO : GameState.TurnFirstPlayerX; this.data.SaveChanges(); var gameResult = this.resultValidator.GetResult(game.Board); switch (gameResult) { case GameResult.NotFinished: { break; } case GameResult.WonByFirstPlayerX: { game.State = GameState.WonByFirstPlayerX; this.data.SaveChanges(); break; } case GameResult.WonBySecondPlayerO: { game.State = GameState.WonBySecondPlayerO; this.data.SaveChanges(); break; } case GameResult.Draw: { game.State = GameState.Draw; this.data.SaveChanges(); break; } default: { throw new ArgumentOutOfRangeException(); } } return(this.Ok()); }
public IHttpActionResult Play(PlayRequestDataModel request) { var currentUserId = this.User.Identity.GetUserId(); if (request == null || !this.ModelState.IsValid) { return this.BadRequest(ModelState); } var idAsGuid = new Guid(request.GameId); var game = this.data.Games.GetById(idAsGuid); if (game == null) { return this.BadRequest("Invalid game id!"); } if (game.FirstPlayerId != currentUserId && game.SecondPlayerId != currentUserId) { return this.BadRequest("You are not part of this game"); } if (game.State != GameState.TurnX && game.State != GameState.TurnY) { return this.BadRequest("INvalid game state!"); } if ((game.State == GameState.TurnX && game.FirstPlayerId != currentUserId) || (game.State == GameState.TurnY && game.SecondPlayerId != currentUserId)) { return this.BadRequest("Its not your turn to play!"); } var positionIndex = (request.Row - 1) * 3 + request.Col - 1; if (game.Board[positionIndex] != '-') { return this.BadRequest("Invalid position"); } var sbBoard = new StringBuilder(game.Board); sbBoard[positionIndex] = game.State == GameState.TurnX ? 'X' : 'O'; game.Board = sbBoard.ToString(); game.State = game.State == GameState.TurnX ? GameState.TurnY : GameState.TurnX; this.data.SaveChanges(); var gameResult = validator.GetResult(game.Board); switch (gameResult) { case GameResult.NotFinished: break; case GameResult.WonByX: game.State = GameState.WonByX; this.data.SaveChanges(); break; case GameResult.WonByY: game.State = GameState.WonByY; this.data.SaveChanges(); break; case GameResult.Draw: game.State = GameState.Draw; this.data.SaveChanges(); break; default: break; } return this.Ok(); }
public IHttpActionResult Play(PlayRequestDataModel request) { var currentUserId = this.userIdProvider.GetUserId(); if (request == null || !ModelState.IsValid) { return(this.BadRequest(this.ModelState)); } var gameId = request.GameId; var game = this.Data.Games.SearchFor(g => g.Id == gameId).FirstOrDefault(); if (game == null) { return(this.BadRequest("Invalid game id!")); } if (game.FirstPlayerId != currentUserId && game.SecondPlayerId != currentUserId) { return(this.BadRequest("This is not your game!")); } if (game.State != GameState.FirstPlayerTurn && game.State != GameState.SecondPlayerTurn) { return(this.BadRequest("Invalid game state!")); } if ((game.State == GameState.FirstPlayerTurn && game.FirstPlayerId != currentUserId) || (game.State == GameState.SecondPlayerTurn && game.SecondPlayerId != currentUserId)) { return(this.BadRequest("It's not your turn!")); } // Update games state and adding new guess number var guessNumber = request.GuessNumber; var newGuessNumber = new GuessNumber { Number = guessNumber, GameId = gameId, PlayerId = currentUserId }; this.Data.GuessNumbers.Add(newGuessNumber); game.State = game.State == GameState.FirstPlayerTurn ? GameState.SecondPlayerTurn : GameState.FirstPlayerTurn; this.Data.SaveChanges(); var guess = new Guess { GuessingUserId = currentUserId, GuessNumber = guessNumber.ToString() }; var guessResult = this.gameValidator.GetResult(guess, Data); switch (guessResult.GameResult) { case GameResult.NotFinished: break; case GameResult.WonByFirstPlayer: game.State = GameState.WonByFirstPlayer; game.GameEnd = DateTime.Now; this.Data.SaveChanges(); break; case GameResult.WonBySecondPlayer: game.State = GameState.WonBySecondPlayer; game.GameEnd = DateTime.Now; this.Data.SaveChanges(); break; default: break; } return(this.Ok(guessResult)); }
public IHttpActionResult Play(PlayRequestDataModel request) { var currentUserId = this.userIdProvider.GetUserId(); if (request == null || !ModelState.IsValid) { return(this.BadRequest(ModelState)); } var idAsGuid = new Guid(request.GameId); var game = this.data.Games.Find(idAsGuid); if (game == null) { return(this.BadRequest("Invalid game id!")); } if (game.FirstPlayerId != currentUserId && game.SecondPlayerId != currentUserId) { return(this.BadRequest("This is not your game!")); } if (game.State != GameState.TurnX && game.State != GameState.TurnO) { var message = string.Format("The game is not currently playing! Game state is '{0}'", game.State); return(this.BadRequest(message)); } if ((game.State == GameState.TurnX && game.FirstPlayerId != currentUserId) || (game.State == GameState.TurnO && game.SecondPlayerId != currentUserId)) { return(this.BadRequest("It's not your turn!")); } var positionIndex = (request.Row - 1) * 3 + request.Col - 1; if (game.Board[positionIndex] != '-') { return(this.BadRequest("Invalid position!")); } // Update games state and board var boardAsStringBuilder = new StringBuilder(game.Board); boardAsStringBuilder[positionIndex] = game.State == GameState.TurnX ? 'X' : 'O'; game.Board = boardAsStringBuilder.ToString(); game.State = game.State == GameState.TurnX ? GameState.TurnO : GameState.TurnX; var gameResult = resultValidator.GetResult(game.Board); switch (gameResult) { case GameResult.WonByX: game.State = GameState.WonByX; game.FirstPlayer.Wins++; game.SecondPlayer.Losses++; break; case GameResult.WonByO: game.State = GameState.WonByO; game.SecondPlayer.Wins++; game.FirstPlayer.Losses++; break; case GameResult.Draw: game.State = GameState.Draw; break; default: break; } this.data.SaveChanges(); return(this.Ok(new GameInfoDataModel(game))); }