literate code
Date: 2001-02-28 17:06:00

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;
           -_-_-

”javac turtle.java”