コード例 #1
0
ファイル: Turtle.java プロジェクト: jwang93/SLogo
  /**
   * Recursive helper for move. Uses its own helper methods, overrunsTop, Bottom, Right, and Left to
   * calculate next move. Calls itself recursively when turtle hits the edge of the screen
   * (overruns).
   *
   * @param pixels changes every time with recursive call until it is less than 0 (because of
   *     possible rounding errors with trig functions)
   */
  protected void moveRecursiveHelper(double pixels) {
    // Checkstyle and clean-up rules conflict on brackets - this is a recurring problem
    // throughout our code
    if (pixels <= 0 + PRECISION_LEVEL) return;

    Location currentLocation = getLocation();
    Location nextLocation = getLocation();
    Location nextCenter = nextLocation;
    nextLocation.translate(new Vector(getHeading(), pixels));
    Location[] replacements = {nextLocation, nextCenter};

    if (nextLocation.getY() < 0) {
      // top
      replacements = overrunsTop();
    } else if (nextLocation.getY() > myCanvasBounds.getHeight()) {
      // bottom
      replacements = overrunBottom();
    } else if (nextLocation.getX() > myCanvasBounds.getWidth()) {
      // right
      replacements = overrunRight();
    } else if (nextLocation.getX() < 0) {
      // left
      replacements = overrunLeft();
    }

    nextLocation = replacements[0];
    nextCenter = replacements[1];

    setCenter(nextCenter);
    double newPixels = pixels - (Vector.distanceBetween(currentLocation, nextLocation));
    if (myPenDown) {
      myLine.addLineSegment(currentLocation, nextLocation);
    }
    moveRecursiveHelper(newPixels);
  }
コード例 #2
0
ファイル: Turtle.java プロジェクト: jwang93/SLogo
 /**
  * Moves turtle to location **AS IN VIEW'S COORDINATES**
  *
  * @param location to move to
  * @return distance of move
  */
 protected int setLocation(Location location) {
   double heading = getHeading();
   towards(location);
   int distance =
       (int) Vector.distanceBetween(getLocation(), convertFromViewCoordinates(location));
   move(distance);
   setHeading(heading);
   return distance;
 }