import java.awt.Graphics;
import java.awt.Color;
import java.awt.Image;

public class CheckersDouble extends java.applet.Applet implements Runnable
{
   Thread runner;
   int xpos;
   int ux1, ux2;
   Image offscreenImg;
   Graphics offscreenGraphics;

   public void init()
   {
      offscreenImg = createImage(this.size().width, this.size().height);
      offscreenGraphics = offscreenImg.getGraphics();
   }

   public void start()
   {
      if (runner == null)
      { runner = new Thread(this);  runner.start();  }
   }

   public void stop()
   {
      if (runner != null)
      {  runner.stop();  runner = null;  }
   }

   public void run()
   {
      setBackground(Color.blue);
      while (true)
      {
         for (xpos=5 ; xpos <=105; xpos+=4)
         {
            ux2 = xpos + 90;
            repaint();
            try
            {
               Thread.sleep(50);
            }
            catch (InterruptedException e) {}
            if (ux1 == 0) ux1 = xpos;
         }
         for (xpos=105 ; xpos > 5; xpos -= 4)
         {
            ux1 = xpos;
            repaint();
            try
            {
               Thread.sleep(50);
            }
            catch (InterruptedException e) {}
            if (ux2 == 0) ux2 = xpos + 90;
         }
      }
   }

   public void update(Graphics g)
   {
      g.clipRect(ux1, 5, ux2-ux1, 95);
      paint(g);
   }

   public void paint(Graphics g)
   {
      offscreenGraphics.setColor(Color.black);
      offscreenGraphics.fillRect(0,0,100,100);
      offscreenGraphics.setColor(Color.white);
      offscreenGraphics.fillRect(101,0,100,100);

      offscreenGraphics.setColor(Color.red);
      offscreenGraphics.fillOval(xpos,5,90,90);

      g.drawImage(offscreenImg, 0,0,this);
      ux1 = ux2 = 0;
   }
}