@Override
    public ArrayList<BoardPosition> getPossibleMoves(Board board, BoardPosition startingPosition) {
        ArrayList<BoardPosition> possibleMoves = new ArrayList<BoardPosition>();
        DiagonalMove toTopLeft = new DiagonalMove();
        DiagonalMove toTopRight = new DiagonalMove();
        DiagonalMove toBottomLeft = new DiagonalMove();
        DiagonalMove toBottomRight = new DiagonalMove();

        int x = startingPosition.getColumn();
        int y = startingPosition.getRow();

        BoardPosition topLeftDest = x > y
                                    ? new BoardPosition(x-y, y-y)
                                    : new BoardPosition(x-x, y-x);

        BoardPosition topRightDest = y < 7 - x
                                     ? new BoardPosition(x + y, y - y)
                                     : new BoardPosition(x + (7-x), y - (7-x));

        BoardPosition bottomLeftDest = y < 7 - x
                                       ? new BoardPosition(x - x, y + x)
                                       : new BoardPosition(x - (7-y), y + (7-y));

        BoardPosition bottomRightDest = x > y
                                        ? new BoardPosition(x + (7-x), y + (7-x))
                                        : new BoardPosition(x + (7-y), y + (7-y));


        toTopLeft.setDestination(startingPosition, topLeftDest, getColor());
        toTopRight.setDestination(startingPosition, topRightDest, getColor());
        toBottomLeft.setDestination(startingPosition, bottomLeftDest, getColor());
        toBottomRight.setDestination(startingPosition, bottomRightDest, getColor());

        possibleMoves.addAll(toTopLeft.getPossibleDestinations(board));
        possibleMoves.addAll(toTopRight.getPossibleDestinations(board));
        possibleMoves.addAll(toBottomLeft.getPossibleDestinations(board));
        possibleMoves.addAll(toBottomRight.getPossibleDestinations(board));
        return possibleMoves;
    }