//
import java.awt.Graphics;
import java.awt.Rectangle;

class Actif1 extends Thread {
   private Rectangle r1;
   boolean stop = false;
    
      Actif1(Rectangle r){
        r1=r;
      }
      public void run() {
        while (true) {  
          for (int i=0;i<80;++i){
            r1.x=i;
            try {Thread.sleep((int)Math.random()*40+5);}
            catch(InterruptedException signal) {}
          } 
          for (int i=80;i>0;--i){
            r1.x=i;
            try {Thread.sleep((int)Math.random()*40+5);}
            catch(InterruptedException signal) {}
          } 
        }
      }
      public void arret() {stop = true;}
}

class Actif2 extends Thread {
   private Rectangle r1;
   boolean stop = false;
   
      Actif2(Rectangle r){
        r1=r;
      }
      public void run() {
        while (true) {  
          for (int i=0;i<80;++i){
            r1.y=i;
            try {Thread.sleep((int)Math.random()*40+5);}
            catch(InterruptedException signal) {}
          } 
          for (int i=80;i>0;--i){
            r1.y=i;
            try {Thread.sleep((int)Math.random()*40+5);}
            catch(InterruptedException signal) {}
          } 
        }
      }
      public void arret() {stop = true;}
}

public class Animation extends java.applet.Applet 
    implements Runnable {
    boolean stop=false;    
    Thread actif;
    Actif1 a1,b1,c1;
    Actif2 a2,b2,c2;
    Rectangle ra= new Rectangle(0,0,20,20);
    Rectangle rb= new Rectangle(0,0,10,10);
    Rectangle rc= new Rectangle(0,0,5,5);
    
    public void start() {
      if (actif==null); {
        actif = new Thread(this);
        actif.start();
      }
    }
        
     public void stop() {
      if (actif!=null); {
        stop=true; 
        if(a1!=null) a1.arret();
        if(a1!=null) b1.arret();
        if(a1!=null) c1.arret();
        if(a1!=null) a2.arret();
        if(a1!=null) b2.arret();
        if(a1!=null) c2.arret();
        actif = null;
        
      }
    }

    public void run() {
       a1=new Actif1(ra);a1.start();
       a2=new Actif2(ra); a2.start();
       b1=new Actif1(rb);b1.start();
       b2=new Actif2(rb); b2.start();
       c1=new Actif1(rc);c1.start();
       c2=new Actif2(rc); c2.start();
       while (!stop) {
          repaint();
          try {Thread.sleep(10);}
          catch(InterruptedException signal) {}
       }
    }
      
    public void paint(Graphics g) {
  		  g.fillRect(ra.x,ra.y,ra.width,ra.height);
  		  g.fillRect(rb.x,rb.y,rb.width,rb.height);
  		  g.fillRect(rc.x,rc.y,rc.width,rc.height);

	  	}
}