Beispiel #1
0
        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());
        }
Beispiel #2
0
        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));
        }