public IHttpActionResult PlayTurn(PlayTurnBindingModel model) { if (model == null) { this.ModelState.AddModelError("model", "The model is empty"); } if (!ModelState.IsValid) { return(this.BadRequest(this.ModelState)); } var guidGameId = new Guid(model.GameId); var game = this.Data.Games .All() .FirstOrDefault(x => x.Id == guidGameId); if (game == null) { return(this.NotFound()); } var userId = this.userIdProvider.GetUserId(); if (game.PlayerOneId != userId && game.PlayerTwoId != userId) { return(this.BadRequest("You can't make turn in this game!")); } if ((game.PlayerOneId == userId && game.State == GameState.TurnTwo) || (game.PlayerTwoId == userId && game.State == GameState.TurnOne)) { return(this.BadRequest("It's not your turn!")); } var fieldSideLength = (int)Math.Sqrt(game.Field.Length); if (model.PositionX >= fieldSideLength || model.PositionY >= fieldSideLength) { return(this.BadRequest("Invalid position!")); } var fieldPosition = model.PositionX + (model.PositionY * fieldSideLength); if (game.Field[fieldPosition] == 'X') { return(this.BadRequest("Position already bombed!")); } var field = new StringBuilder(game.Field); field[fieldPosition] = 'X'; game.Field = field.ToString(); game.State = game.State == GameState.TurnOne ? GameState.TurnTwo : GameState.TurnOne; this.Data.SaveChanges(); return(this.Ok()); }
public IHttpActionResult Playturn(PlayTurnBindingModel model) { if (model == null) { return(this.BadRequest("You have to specify game id!")); } this._currentUserId = this._userIdProvider.GetUserId(); var game = this._data.Games.Find(model.Id); if (game.State == GameState.FirstPlayerTurn && game.SecondPlayerId == _currentUserId || game.State == GameState.SecondPlayerTurn && game.FirstPlayerId == _currentUserId) { return(this.BadRequest("It's not your turn!")); } //var fieldLenght = (int)Math.Sqrt(game.Field.Length); //var positionHit = model.X + (model.Y * fieldLenght); var field = new StringBuilder(game.Field); if (field[model.Position] != '0') { return(this.BadRequest("You cannot place there!")); } field[model.Position] = game.State == GameState.FirstPlayerTurn ? 'O' : 'X'; game.Field = field.ToString(); var winner = CheckForWinner(game.Field); if (winner == GameState.WinFirstPlayer) { game.State = GameState.WinFirstPlayer; this._data.SaveChanges(); return(this.Ok("First player win!")); } if (winner == GameState.WinSecondPlayer) { game.State = GameState.WinSecondPlayer; this._data.SaveChanges(); return(this.Ok("Second player win!")); } if (winner == GameState.Draw) { game.State = GameState.Draw; this._data.SaveChanges(); return(this.Ok("Draw!")); } game.State = game.State == GameState.FirstPlayerTurn ? GameState.SecondPlayerTurn : GameState.FirstPlayerTurn; this._data.SaveChanges(); return(this.Ok()); }
public IHttpActionResult PlayTurn(PlayTurnBindingModel model) { if (model == null) { this.ModelState.AddModelError("model", "The model is empty"); } if (!ModelState.IsValid) { return(this.BadRequest(this.ModelState)); } var gameIdGuid = new Guid(model.GameId); var game = this.Data.Games .All() .Where(g => g.Id == gameIdGuid) .FirstOrDefault(); if (game == null) { return(this.NotFound()); } var userId = this.User.Identity.GetUserId(); if (game.PlayerOneId != userId && game.PlayerTwoId != userId) { return(this.BadRequest("You cannot take turn in this game.")); } if ((game.PlayerOneId == userId && game.State == GameState.TurnTwo) || (game.PlayerTwoId == userId && game.State == GameState.TurnOne)) { return(this.BadRequest("It's not your turn!")); } // TODO: add checks for valid positions - if outside the field and if already hitted var fieldPosition = model.PositionX + model.PositionY * 8; //magical number var field = new StringBuilder(game.Field); field[fieldPosition] = 'X'; game.Field = field.ToString(); game.State = game.State == GameState.TurnOne ? GameState.TurnTwo : GameState.TurnOne; this.Data.SaveChanges(); return(this.Ok(game.Field)); }
public IHttpActionResult PlayTurn(PlayTurnBindingModel model) { if (model == null) { ModelState.AddModelError("model", "The model is empty"); } if (!ModelState.IsValid) { return BadRequest(ModelState); } var guidGameId = new Guid(model.GameId); var game = Data.Games .All() .FirstOrDefault(x => x.Id == guidGameId); if (game == null) { return NotFound(); } var userId = userIdProvider.GetUserId(); if (game.PlayerOneId != userId && game.PlayerTwoId != userId) { return BadRequest("You can't make turn in this game!"); } if ((game.PlayerOneId == userId && game.State == GameState.TurnTwo) || (game.PlayerTwoId == userId && game.State == GameState.TurnOne)) { return BadRequest("It's not your turn!"); } var fieldSideLength = (int)Math.Sqrt(game.Field.Length); if (model.PositionX >= fieldSideLength || model.PositionY >= fieldSideLength) { return BadRequest("Invalid position!"); } var fieldPosition = model.PositionX + (model.PositionY * fieldSideLength); if (game.Field[fieldPosition] == 'X') { return BadRequest("Position already bombed!"); } var field = new StringBuilder(game.Field); field[fieldPosition] = 'X'; game.Field = field.ToString(); game.State = game.State == GameState.TurnOne ? GameState.TurnTwo : GameState.TurnOne; Data.SaveChanges(); return Ok(); }
public IHttpActionResult Play(PlayTurnBindingModel model) { if (model == null) { this.ModelState.AddModelError("model", "The model is empty"); } if (!this.ModelState.IsValid) { return(this.BadRequest(this.ModelState)); } var guidGameId = new Guid(model.GameId); var game = this.Data.Games.FirstOrDefault(x => x.Id == guidGameId); if (game == null) { return(this.NotFound()); } var userId = this.userIdProvider.GetUserId(); if (game.PlayerOneId != userId && game.PlayerTwoId != userId) { return(this.BadRequest("You do not play in this game.")); } if ((game.PlayerOneId == userId && game.State == GameState.WonByOne) || game.PlayerTwoId == userId && game.State == GameState.WonByTwo) { return(this.BadRequest("You already won this game.")); } if ((game.PlayerOneId == userId && game.State == GameState.WonByTwo) || game.PlayerTwoId == userId && game.State == GameState.WonByOne) { return(this.BadRequest("You lost this game.")); } if ((game.PlayerOneId == userId && game.State == GameState.TurnTwo) || (game.PlayerTwoId == userId && game.State == GameState.TurnOne)) { return(this.BadRequest("It's not your turn.")); } var fieldSideLength = (int)Math.Sqrt(game.Field.Length); if (model.PositionX >= fieldSideLength || model.PositionY >= fieldSideLength) { return(this.BadRequest("Invalid position.")); } var fieldPosition = model.PositionX + (model.PositionY * fieldSideLength); if (game.Field[fieldPosition] == 'X') { return(this.BadRequest("Position already bombed.")); } var response = "You didn't hit anything."; if (game.Field[fieldPosition] == 'S') { if (game.PlayerOneId == userId) { game.PlayerOnePoints++; } else { game.PlayerTwoPoints++; } response = "You hit a ship. You get one point."; } var field = new StringBuilder(game.Field); field[fieldPosition] = 'X'; game.Field = field.ToString(); game.State = game.State == GameState.TurnOne ? GameState.TurnTwo : GameState.TurnOne; if (!game.Field.Contains('S')) { game.State = game.PlayerOnePoints > game.PlayerTwoPoints ? GameState.WonByOne : GameState.WonByTwo; response = "You Won."; } this.Data.SaveChanges(); return(this.Ok(response)); }