@Override
    public ArrayList<BoardPosition> getPossibleMoves(Board board, BoardPosition startingPosition) {

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

        ArrayList<BoardPosition> possibleMoves = new ArrayList<BoardPosition>();
        //"long" move first
        LMove topRight = new LMove();
        LMove rightTop = new LMove();
        LMove topLeft = new LMove();
        LMove leftTop = new LMove();
        LMove bottomRight = new LMove();
        LMove rightBottom = new LMove();
        LMove bottomLeft = new LMove();
        LMove leftBottom = new LMove();

        try {
            topRight.setDestination(startingPosition, new BoardPosition(x+1, y-2), getColor());
            possibleMoves.addAll(topRight.getPossibleDestinations(board));
        } catch (ArrayIndexOutOfBoundsException e) {}

        try {
            rightTop.setDestination(startingPosition, new BoardPosition(x+2, y-1), getColor());
            possibleMoves.addAll(rightTop.getPossibleDestinations(board));
        } catch (ArrayIndexOutOfBoundsException e) {}

        try {
            topLeft.setDestination(startingPosition, new BoardPosition(x-1, y-2), getColor());
            possibleMoves.addAll(topLeft.getPossibleDestinations(board));
        } catch (ArrayIndexOutOfBoundsException e) {}

        try {
            leftTop.setDestination(startingPosition, new BoardPosition(x-2, y-1), getColor());
            possibleMoves.addAll(leftTop.getPossibleDestinations(board));
        } catch (ArrayIndexOutOfBoundsException e) {}

        try {
            bottomRight.setDestination(startingPosition, new BoardPosition(x+1, y+2), getColor());
            possibleMoves.addAll(bottomRight.getPossibleDestinations(board));
        } catch (ArrayIndexOutOfBoundsException e) {}

        try {
            rightBottom.setDestination(startingPosition, new BoardPosition(x+2, y+1), getColor());
            possibleMoves.addAll(rightBottom.getPossibleDestinations(board));
        } catch (ArrayIndexOutOfBoundsException e) {}

        try {
            bottomLeft.setDestination(startingPosition, new BoardPosition(x-1, y+2), getColor());
            possibleMoves.addAll(bottomLeft.getPossibleDestinations(board));
        } catch (ArrayIndexOutOfBoundsException e) {}

        try {
            leftBottom.setDestination(startingPosition, new BoardPosition(x-2, y+1), getColor());
            possibleMoves.addAll(leftBottom.getPossibleDestinations(board));
        } catch (ArrayIndexOutOfBoundsException e) {}

        return possibleMoves;
    }