public class MyTurtleobn3 extends Turtle {
  
  /** Draw a sprite image walking across the room, using:
    
        x= new MyTurtleobn3();
        x.fighter(10);

      Argument 10 is the height of the fighter. */
  int p; // Don't know what it is for
  
   
    
    

  
  /** Draws sprite image, fills it in with white, then repeats so as to produce the image
  * of Fighter from Final Fantasy walking across the screen from right to left. The size
  * of the sprite's "pixels" is int p, which must be positive and even. */
 public void fighter(int p) {
     // Check for a bad p and give an error if needed...
   if (p%2 != 0 || p < 2) {
     System.out.println("badpixelsize");
   }
     // ...otherwise continue the animation
   else {
         // store p in a variable outside the method (so it is available for the
     // use of the private methods later.
     this.p= p;
         // Move the top left point of the sprite outside the window at the bottom right
     moveTo((getWidth()+8*p), (getHeight()-24*p), 0);
         // Loop to draw, erase, and redraw fighter until he is out of the window on the left
     while (getX() > -16*p) {
       // Draw fighter's upper body
       fighterUpper();
       // Draw fighter's closed legs
       fighterLowerClosed();          // Pause, then cover fighter in white (erase)
       pause(120);
       tColor(12);
       fillRectangle(16*p, 24*p);
       // Move turtle to upper left corner of 'sprite' and over -4*p to simulate walking
       moveTo(getX()-11*p-p/2, getY()-11*p-p/2, 0);          // Redraw fighter's upper body
       fighterUpper();
       // Draw fighter's open legs
       fighterLowerOpen();          // Pause, then cover fighter in white (erase)
       pause(120);
       tColor(12);
       fillRectangle(16*p, 24*p);
       // Move turtle to upper left corner of 'sprite' and over -4*p to simulate walking
       moveTo(getX()-11*p-p/2, getY()-11*p-p/2, 0);
     }
   }
 }
 //** Draw fighter's upper body (used within fighter(). */
 private void fighterUpper() {
   // white dots
   tColor(12);
   moveTo(getX()+7*p+p/2, getY()+10*p, 0);
   fillRectangle(12*p, p);
     //black lines
   tColor(1);
   fillRectangle(8*p, 11*p);
   moveTo(getX()-5*p-p/2, getY()+3*p, 0);
   fillRectangle(3*p, 3*p);
     //red parts
   tColor(11);
   moveTo(getX(), getY()-13*p, 0);
   fillRectangle(p, p);
   moveTo(getX()+2*p, getY(), 0);
   fillRectangle(p, p);
   moveTo(getX()+5*p+p/2, getY(), 0);
   fillRectangle(8*p, p);
   moveTo(getX()-2*p-p/2, getY()+2*p+p/2, 0);
   fillRectangle(9*p, 4*p);
   moveTo(getX()-6*p, getY()-p, 0);
   fillRectangle(p, 2*p);
   moveTo(getX()+p, getY()+p+p/2, 0);
   fillRectangle(p, 3*p);
   moveTo(getX()-p, getY()+2*p, 0);
   fillRectangle(p, 3*p);
   moveTo(getX()+2*p, getY()+p/2, 0);
   fillRectangle(p, 2*p);
   moveTo(getX()+2*p, getY()-p/2, 0);
   fillRectangle(p, p);
   moveTo(getX()+3*p, getY()+p, 0);
   fillRectangle(p, 3*p);
   moveTo(getX()+p, getY()+p/2, 0);
   fillRectangle(p, 4*p);
   moveTo(getX()+p+p/2, getY()-p, 0);
   fillRectangle(2*p, 2*p);
   moveTo(getX()+2*p, getY()-p/2, 0);
   fillRectangle(2*p, 7*p);
   moveTo(getX()+2*p, getY()-3*p, 0);
   fillRectangle(2*p, p);
   moveTo(getX(), getY()+3*p, 0);
   fillRectangle(2*p, p);
   moveTo(getX()-p/2, getY()-p, 0);
   fillRectangle(p, p);
   moveTo(getX(), getY()+3*p, 0);
   fillRectangle(p, p);
   moveTo(getX()-3*p-p/2, getY()+2*p, 0);
   fillRectangle(2*p, p);
   moveTo(getX()+p, getY()+p, 0);
   fillRectangle(2*p, p);
   moveTo(getX()+2*p+p/2, getY(), 0);
   fillRectangle(p, p);
   moveTo(getX()-p-p/2, getY()+p+p/2, 0);
   fillRectangle(6*p, 2*p);
   moveTo(getX()-11*p-p/2, getY()-p/2, 0);
   fillRectangle(p, p);
   moveTo(getX()+p, getY()+p, 0);
   fillRectangle(p, 3*p);
   moveTo(getX()+p, getY()-p/2, 0);
   fillRectangle(p, 4*p);
   moveTo(getX()+p, getY()+2*p+p/2, 0);
   fillRectangle(p, 3*p);
   moveTo(getX()+4*p, getY()-2*p, 0);
   fillRectangle(p, p);
   moveTo(getX(), getY()+p, 0);
   fillRectangle(3*p, p);
   moveTo(getX()-p-p/2, getY()+p, 0);
   fillRectangle(4*p, p);
   moveTo(getX()+5*p+p/2, getY(), 0);
   fillRectangle(p, p);
   moveTo(getX()+p/2, getY()+p, 0);
   fillRectangle(2*p, p);
   moveTo(getX(), getY()+p, 0);
   fillRectangle(4*p, p);
   moveTo(getX()-11*p, getY()-p, 0);
   fillRectangle(2*p, p);
   moveTo(getX()+5*p+p/2, getY(), 0);
   fillRectangle(p, p);
   moveTo(getX()-p, getY()+p, 0);
   fillRectangle(3*p, p);
     // pink parts
   tColor(10);
   moveTo(getX()-5*p, getY()+p/2, 0);
   fillRectangle(3*p, 2*p);
   moveTo(getX(), getY()-3*p, 0);
   fillRectangle(p, 2*p);
   moveTo(getX()+p, getY()+p/2, 0);
   fillRectangle(p, p);
   moveTo(getX()+p, getY()+p, 0);
   fillRectangle(p, p);
   moveTo(getX()+6*p, getY()+p, 0);
   fillRectangle(3*p, p);
   moveTo(getX()+p/2, getY()-p, 0);
   fillRectangle(4*p, p);
   moveTo(getX(), getY()-p, 0);
   fillRectangle(2*p, p);
   moveTo(getX()+4*p, getY(), 0);
   fillRectangle(2*p, p);
   moveTo(getX()+p/2, getY()+p, 0);
   fillRectangle(p, p);
   moveTo(getX()-2*p, getY()-2*p, 0);
   fillRectangle(3*p, p);
   moveTo(getX()-8*p, getY()-8*p, 0);
   fillRectangle(p, p);
   moveTo(getX(), getY()+3*p+p/2, 0);
   fillRectangle(p, 4*p);
   moveTo(getX()+3*p, getY(), 0);
   fillRectangle(p, 6*p);
   moveTo(getX()-p, getY()+p/2, 0);
   fillRectangle(p, 5*p);
   moveTo(getX()+2*p, getY(), 0);
   fillRectangle(p, 3*p);
   moveTo(getX()+p, getY(), 0);
   fillRectangle(p, p);
   moveTo(getX()-4*p, getY()+p, 0);
   fillRectangle(p, 3*p);
   moveTo(getX()+5*p+p/2, getY()-2*p-p/2, 0);
   fillRectangle(2*p, 2*p);
 }
 //** Draw fighter's lower body with legs closed (used within fighter(). */
 private void fighterLowerClosed() {
   // red parts
   tColor(11);
   moveTo(getX()-3*p, getY()+10*p, 0);
   fillRectangle(4*p, 2*p);
   moveTo(getX()+p/2, getY()+4*p, 0);
   fillRectangle(5*p, 4*p);
   moveTo(getX()-3*p, getY()+p+p/2, 0);
   fillRectangle(p, p);
   moveTo(getX(), getY()-6*p, 0);
   fillRectangle(p, p);
     // white band
   tColor(12);
   moveTo(getX()+3*p, getY()+2*p, 0);
   fillRectangle(5*p, p);
     // place turtle in a standard position in the center of fighter's image
   // (fighterLowerOpen() must use the same place)
   moveTo(getX()-p/2, getY()-7*p-p/2, 0);
 }
 //** Draw fighter's lower body with legs open (used within fighter()). */
 private void fighterLowerOpen() {
   // red parts
   tColor(11);
   moveTo(getX()-7*p-p/2, getY()+8*p+p/2, 0);
   fillRectangle(p, p);
   moveTo(getX()+5*p+p/2, getY()+p+p/2, 0);
   fillRectangle(10*p, 2*p);
   moveTo(getX()-5*p-p/2, getY()+5*p+p/2, 0);
   fillRectangle(p, p);
   moveTo(getX(), getY()-p, 0);
   fillRectangle(3*p, p);
   moveTo(getX(), getY()-p, 0);
   fillRectangle(5*p, p);
   moveTo(getX(), getY()-p, 0);
   fillRectangle(7*p, p);
   moveTo(getX()+p, getY()-p, 0);
   fillRectangle(5*p, p);
   moveTo(getX()+7*p+p/2, getY(), 0);
   fillRectangle(6*p, p);
   moveTo(getX()+p, getY()+p, 0);
   fillRectangle(6*p, p);
   moveTo(getX()-p, getY()+2*p, 0);
   fillRectangle(4*p, p);
   moveTo(getX()+p/2, getY()-p, 0);
   fillRectangle(5*p, p);
   moveTo(getX()-p, getY()+2*p, 0);
   fillRectangle(3*p, p);
     //white bands
   tColor(12);
   moveTo(getX()-p/2, getY()-4*p, 0);
   fillRectangle(2*p, p);
   moveTo(getX()+p+p/2, getY()-p, 0);
   fillRectangle(p, p);
   moveTo(getX()-9*p, getY(), 0);
   fillRectangle(p, p);
   moveTo(getX()+p, getY()+p, 0);
   fillRectangle(p, p);
   moveTo(getX()+p, getY()+p, 0);
   fillRectangle(p, p);
     //black dot
   tColor(1);
   moveTo(getX()+5*p, getY()-3*p, 0);
   fillRectangle(p, p);
     // place turtle in a standard position in the center of fighter's image
   // (fighterLowerClosed() must use the same place)
   moveTo(getX()-2*p-p/2, getY()-5*p-p/2, 0);
 }

}

