{TrackEater - The robot eats the track as it follows it}

.......

type
  TForm1 = class(TForm)
    .
    .
    .
   
   public
    { Public declarations }
    Drawing:boolean; {Flag set by mousedown, tested by Mousemove, reset by Mouseup}
    saved:array of TPoint; {saved track points}
    count:integer; {Current nbr of points}
  end;


implementation
const
  maxpoints=1000;   {maximum track length}


procedure TForm1.FormActivate(Sender: TObject);
{Initialization}
begin
  drawing:=false;
  setlength(saved,maxpoints);
  count:=0;
  doublebuffered:=true;  {to prevent flicker}
end;

procedure TForm1.Paintbox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
{User pushed mouse button}
begin
  Drawing:=true;  {Set flag}
  canvas.moveto(x,y);   {move pen position to the point}
  canvas.pen.width:=8;  {make a fairly wide track}
  inc(count);           {save the starting point}    
  saved[count]:=point(x,y);
end;

procedure TForm1.Paintbox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
{Called when mouse moves}
begin
  If drawing then
  begin
    canvas.lineto(x,y);  {draw a line segment}
    sleep(10);           {wait 10 ms}
    inc(count);          {save the new point}
    saved[count]:=point(x,y);
  end;
end;

procedure TForm1.Paintbox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
{Called when mouse button is released}
begin
  Drawing:=false;  {stop drawing}
  Robo.left:=saved[1].x-Robo.Width div 2;  {move robot to start point}
  Robo.top:=saved[1].y-Robo.Height div 2;
end;

procedure TForm1.StartBtnClick(Sender: TObject);
{The Robot Master clicked the start button}
var
  i:integer;
begin
  {Move the robot around the path}
  for i:= 2 to count do
  begin
    Robo.left:=saved[i].x-Robo.width div 2;
    Robo.top:=saved[i].y-Robo.height div 2;
    application.processmessages;  {let windows show the move}
    sleep(10);  {and wait a bit}
  end;
  count:=0; {Track has disappeared anyway, might as well forget the points}
end;

end.