private boolean legalMove(int from_x,int from_y,int to_x, int to_y)
  {
     int dir_x, dir_y;
     int dist;
 
     dir_x=(int)Math.signum(to_x-from_x);
     dir_y=(int)Math.signum(to_y-from_y);
     if ((dir_x==0) && (dir_y==0)) return false;
     dist=computeDistance(from_x,from_y,dir_x,dir_y);
     if (dir_x==0) return (dist==Math.abs(to_y-from_y));
     if (dir_y==0) return (dist==Math.abs(to_x-from_x));
     if (Math.abs(to_y-from_y)!=Math.abs(to_x-from_x)) return false;
     return (dist==Math.abs(to_y-from_y));
  }