public void Setup()
 {
     boardRotaterMapper = new BoardRotaterMapper();
 }
Beispiel #2
0
        public IActionResult PlayTurn([FromBody] MoveRequest moveRequest)
        {
            HumanPlayer player;

            if (!humanPlayers.TryGetValue(moveRequest.PlayerId, out player))
            {
                return(NotFound($"Player with ID {moveRequest.PlayerId} not found."));
            }

            var match = player.GameMatch;

            GameState gameState = match.GameState;

            if (match.CurrentTurn == player.PieceColour)
            {
                var transformedMoveRequest = moveRequest;
                if (player.PieceColour == Service.PieceColour.Black)
                {
                    transformedMoveRequest = new BoardRotaterMapper().Rotate(moveRequest, gameState.XLength, gameState.YLength);
                }

                var moves      = match.GameState.CalculateAvailableMoves(player.PieceColour);
                var moveToPlay = moves.FirstOrDefault(m =>
                                                      m.StartGamePiece.Xcoord == transformedMoveRequest.StartX &&
                                                      m.StartGamePiece.Ycoord == transformedMoveRequest.StartY &&
                                                      m.EndGamePiece.Xcoord == transformedMoveRequest.EndX &&
                                                      m.EndGamePiece.Ycoord == transformedMoveRequest.EndY);

                if (moveToPlay != null)
                {
                    player.SelectedMove = moveToPlay;
                    match.CompleteTurn();

                    gameState = match.GameState;
                }
                else
                {
                    return(Conflict("The given move is not playable."));
                }
            }

            var gameBoard = new GameBoardMapper().Map(match, player.PieceColour);

            IGamePlayer opponent;

            if (player.PieceColour == Service.PieceColour.White)
            {
                opponent = match.BlackGamePlayer;
            }
            else
            {
                opponent = match.WhiteGamePlayer;
            }

            if (!(opponent is HumanPlayer))
            {
                match.CompleteTurn();
            }

            return(Ok(gameBoard));
        }