SimpleAnimationTest.html<title>SimpleAnimation Test</title>
<hr>
<applet code="SimpleAnimationTest.class" width=450 height=250>
</applet>
<hr>SimpleAnimationTest.javaimport java.applet.Applet;
import java.net.URL;import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Label;
import java.awt.Panel;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;public class SimpleAnimationTest extends Applet
{
    public void init()
    {
        setLayout(new BorderLayout());
        add(new Label("Simple Animation - Mouse Down Starts/Stops"),"North");
        add(new SimpleAnimationTestPanel(this),"Center");
    }
}class SimpleAnimationTestPanel extends Panel
{
    public SimpleAnimationTestPanel(Applet applet)
    {
        setLayout(new BorderLayout());
        add(new SimplePlayfield(applet),"Center");
    }    public void update(Graphics g)
    {
        paint(g);
    }
}class SimplePlayfield extends Playfield
{
    private Applet applet;
    private URL cb;
    private Sprite javaDrinker;
    private Sequence spinSequence;    public SimplePlayfield(Applet applet)
    {
        this.applet = applet;
        cb = applet.getCodeBase();        makeSequencesAndSprites();        setWallpaperImage(applet.getImage(cb,"Gifs/background.gif"));        addMouseListener(new MouseAdapter()
        {
            public void mousePressed(MouseEvent event)
            {
                if(running() == true)
                {
                    stop();
                }
                else
                {
                    start();
                }
            }
        });
    }    public void edgeCollision(Sprite sprite,Orientation orientation)
    {
        if(orientation == Orientation.RIGHT || orientation == Orientation.LEFT)
        {
            sprite.reverseX();
        }
        else
        {
            sprite.reverseY();
        }
    }    private void makeSequencesAndSprites()
    {
        String file;
        Point startLoc = new Point(10,10);
        Image[] spinImages = new Image[19];        for(int i = 0;i < spinImages.length;++i)
        {
            file = "Gifs/spin";            if(i < 10)
            {
                file += "0" + i + ".gif";
            }
            else
            {
                file += i + ".gif";
            }
            spinImages[i] = applet.getImage(cb,file);
        }
        spinSequence = new Sequence(this,spinImages);
        javaDrinker = new Sprite(this,spinSequence,startLoc);        javaDrinker.setMoveVector(new Point(1,1));
        add(javaDrinker);
    }
}
Playfield.javaimport java.util.Vector;import java.awt.Component;public class Playfield extends DoubleBufferedContainer implements Runnable,CollisionArena
{
    private boolean running = false;
    private Thread animationThread;
    private CollisionDetector spriteDetector,edgeDetector;    public Playfield()
    {
        edgeDetector = new EdgeCollisionDetector(this);
        spriteDetector = new SpriteCollisionDetector(this);
        setLayout(new BulletinLayout());
    }    public void spriteCollision(Sprite sprite,Sprite other)
    {}    public void edgeCollision(Sprite sprite,Orientation o)
    {}    public void stop()
    {
        running = false;
    }    public boolean running()
    {
        return running;
    }    public void start()
    {
        animationThread = new Thread(this);
        running = true;
        animationThread.start();
    }    public void run()
    {
        while(running == true)
        {
            edgeDetector.detectCollisions();
            spriteDetector.detectCollisions();            animateSprites();
            try
            {
                Thread.currentThread().sleep(50);
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
        animationThread = null;
    }    public Vector getSprites()
    {
        int ncomps = getComponentCount();
        Component comp;
        Vector vector = new Vector();        for(int i = 0;i < ncomps;++i)
        {
            if((comp = getComponent(i))instanceof Sprite)
            {
                vector.addElement(comp);
            }
        }
        return vector;
    }    protected void animateSprites()
    {
        int ncomps = getComponentCount();
        Component comp;        for(int i = 0;i < ncomps;++i)
        {
            if((comp = getComponent(i))instanceof Sprite)
            {
                ((Sprite)comp).animate();
            }
        }
    }
}