import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Image;
public class RectanguloAnimadoBuffer extends Applet implements Runnable {
  private int locX1,locY1,locX2,locY2;//coordenadas de los rectangulos
  private int elAncho,elLargo;
  private int direccionR1x=1,direccionR1y=1,direccionR2x=1,direccionR2y=1;
  private int retardo = 5; //en milisegundos
  private boolean fin=false;
  private Graphics elBuffer;
  private Image laImagenBuffer;
  public void init() {
    elAncho = super.getBounds().width; elLargo= super.getBounds().height;
    this.locX1=80; this.locY1=100; this.locX2=160; this.locY2=200;
    this.laImagenBuffer = super.createImage(this.elAncho,this.elLargo);
    this.elBuffer = this.laImagenBuffer.getGraphics();
  }
  public void paint(Graphics g) {
     //limpiar pantalla
     this.elBuffer.setColor(Color.white);this.elBuffer.fillRect(0,0,elAncho,elLargo);
     elBuffer.setColor(Color.yellow); elBuffer.fillRect(80,10,90,90); //rectangulo fijo
     elBuffer.setColor(Color.blue); elBuffer.fillRect(locX1,locY1,60,40);//rectangulo movil 1
     elBuffer.setColor(Color.orange); elBuffer.fillRect(locX2,locY2,40,60);//rectangulo movil 2
     g.drawImage(this.laImagenBuffer,0,0,this);
  }
  public void update(Graphics g){this.paint(g);}//la actualizacion es controlada por el applet
  public void start() {
     Thread th = new Thread(this); th.start();
  }
  public void run() {
      while (!fin) {
          this.actualizarRectangulo();
          repaint();
          try { Thread.sleep(retardo);} catch (Exception ex) {} 
      }
  }
  public void actualizarRectangulo() {
     int dX1=20,dX2=30,dY1=50,dY2=40;
     if (this.locX1 > this.elAncho ) direccionR1x=-1;
     if (this.locX2 > this.elAncho ) direccionR2x=-1;
     if (this.locY1 > this.elLargo ) direccionR1y = -1;
     if (this.locY2 > this.elLargo ) direccionR2y = -1;
     if (this.locX1 <0) direccionR1x =1;
     if (this.locX2 <0) direccionR2x =1;
     if (this.locY1 <0) direccionR1y =1;
     if (this.locY2 <0) direccionR2y =1;
     dX1*=direccionR1x;dX2*=direccionR2x;dY1*=direccionR1y;dY2*=direccionR2y;
     this.locX1+=dX1; this.locX2+=dX2;this.locY1+=dY1; this.locY2+=dY2;  
  }
}




