int dx=0, dy=0;
if (Greenfoot.isKeyDown("up")) dy--;
if (Greenfoot.isKeyDown("down")) dy++;
if (Greenfoot.isKeyDown("right")) dx++;
if (Greenfoot.isKeyDown("left")) dx--;
if (dx != 0 || dy != 0)
{
turnTowards(getX()+dx*3, getY()+dy*3);
setLocation(getX()+dx*3, getY()+dy*3);
if (isTouching(Fence.class) || isTouching(FenceUp.class)) //I don't believe you need a separate FenceUp class
{
setLocation(getX()-dx*3, getY()-dy*3);
}
if (shield.getWorld() == null) getWorld().addObject(shield, getX()+30*dx, getY()+30*dy);
else shield.setLocation(getX()+2*dx, getY()+2*dy);
shield.setRotation(getRotation());
}
else getWorld().removeObject(shield);

