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