A mini-turtle program.

<..turtle..>

       import java.applet.*;
       import java.awt.*;
       public class turtle extends Applet
       {
       
          Graphics g;
          <.vars.>
          <.turtle functions.>
          public void init()
          {
            <.initial state.>
            <.draw interface.>
          }
          public void paint(Graphics g) {
            this.g = g;
            <.execute commands.>
          }
          public boolean action(Event e,Object o)
          {
            <.get command.>
            repaint();
            return true;
          }
       
       }
       -_-_-
The turtle can move forward without trace, move forward while tracing its path, and rotate.

<..turtle functions..>

          void Move(int x, int y){ this.x += x;  this.y -= y; }
       
          void Move(int r){ x += (int) (r * Math.cos(d));
                            y -= (int) (r * Math.sin(d)); }
       
          void Line(int x, int y){
             g.drawLine( this.x, this.y,  this.x+x, this.y-y );
             Move(x,y);
          }
          void Line(int r){
           Line(   (new Double(r * Math.cos(d))).intValue(),
                   (new Double( r * Math.sin(d) )).intValue() ); }
       
          void Rotate(int d){
             this.d += d * 3.14  / 180;
             while( 6.28 < this.d ){ this.d -= 6.28; }
             while( this.d < 0 ){ this.d += 6.28; }
          }
       
       -_-_-
The text field may be modified by the users.

<..vars..>

       Button moveButton,
              lineButton,
              clearButton,
              rotateButton;
       TextField in;
       -_-_-

<..draw interface..>

       clearButton  = new Button("Clear");   add(clearButton);
       moveButton   = new Button("Move");    add(moveButton);
       lineButton   = new Button("Line");    add(lineButton);
       rotateButton = new Button("Rotate");  add(rotateButton);
       in           = new TextField(3);      add(in);
       in.setText( "50" );
       -_-_-

<..execute commands..>

             int i;
         x = 150; y = 150; d = 0;
         for( i=0; i<N; i+=2 ){
       
            switch( command[i] ) {
       
       case   <.Line op.>:{    Line( command[i+1] ); break; }
       case   <.Move op.>:{    Move( command[i+1] ); break; }
       case <.Rotate op.>:{  Rotate( command[i+1] ); break; }
       
       }
       }
       -_-_-

<..get command..>

       if("Clear".equals(o)) {  <.initial state.>  }
       else{
       
          if(  "Line".equals(o)){  command[N]=<.Line op.>;   }
          if(  "Move".equals(o)){  command[N]=<.Move op.>;   }
          if("Rotate".equals(o)){  command[N]=<.Rotate op.>; }
       
          String s =  new String( in.getText() );
          Integer i = new  Integer(     s  );
          command[N+1]=   i.intValue();
          N+=2;
       
       }
       -_-_-

<..vars..>+

       int command[] = new int[300];
       -_-_-

<..Line op..>

       1
       -_-_-

<..Move op..>

       2
       -_-_-

<..Rotate op..>

       3
       -_-_-

<..initial state..>

       N = 0;
       -_-_-

<..vars..>+

       int N;
       int x, y;
       double d;
       -_-_-