code: private boolean tryMove(float x, float y) {
  		float newx = playerX + x;
  		float newy = playerY + y;
  		
  		// first we try the real move, if that doesn't work
  		// we try moving on just one of the axis (X and then Y) 
  		// this allows us to slide against edges
  		if (blocked(newx,newy)) {
  			if (blocked(newx, playerY)) {
  				if (blocked(playerX, newy)) {
  					// can't move at all!
  					return false;
  				} else {
  					playerY = newy;
  					return true;
  				}
  			} else {
  				playerX = newx;
  				return true;
  			}
  		} else {
  			playerX = newx;
  			playerY = newy;
  			return true;
  		}
  	}
docs: Try to move in the direction specified. If it's blocked, try sliding. If that
  doesn't work just don't bother
  
  @param x The amount on the X axis to move
  @param y The amount on the Y axis to move
  @return True if we managed to move