import java.awt.*;
import java.applet.*;
import java.util.Vector;

public class ImageAnimator extends Applet implements Runnable {
    
    protected MediaTracker tracker;
    
    // イメージを保持するための Vector
    protected Vector images;

    // イメージ枚数
    protected int number = 0;

    // ダブルバッファリング用イメージ
    protected Image buffer;
    protected Graphics g2;

    // 現在、表示しているイメージの番号
    protected int index = 0;

    // アプレットのサイズ
    protected int width;
    protected int height;

    public void init(){
        tracker = new MediaTracker(this);
        images = new Vector();

        // HTML からパラメータを読み込む
        number = Integer.parseInt(getParameter("number"));
        String filename = getParameter("filename");
        String suffix = getParameter("suffix");

        // イメージの読み込み
        Image image;
        for(int i = 0 ; i < number ; i++){
            image = getImage(getDocumentBase(), filename + i + "." + suffix);
            images.add(image);
            tracker.addImage(image, 0);
        }
    }

    public void start(){
        // アニメーション用のスレッドをスタートさせる
        Thread thread = new Thread(this);
        thread.start();
    }

    public void run(){
        try{
            // イメージがロードされるまで待つ
            tracker.waitForID(0);
        }catch(InterruptedException e){
            return;
        }

        while(true){
            // 再描画
            repaint();
	    
            // 表示するイメージの更新
            index++;
            if(index >= number){      // index がイメージの枚数より多くなった場合、
                index = 0;            // 0 に戻す
            }

            // スリープ
            try{
                Thread.sleep(100);
            }catch(Exception ex){
                return;
            }
        }
    }

    public void update(Graphics g){
        // ちらつき防止のため、クリアは行わない
        paint(g);
    }

    public void paint(Graphics g){

        // buffer が生成されていなければ生成する
        if(buffer == null){
            // アプレットのサイズをえる
            Dimension size = getSize();
            width = size.width;
            height = size.height;

            // バッファイメージの生成
            buffer = createImage(getSize().width, getSize().height);
            g2 = buffer.getGraphics();
        }

        // バッファにイメージを描画
        g2.clearRect(0, 0, width, height);
        g2.drawImage((Image)images.elementAt(index), 0, 0, this);

        // バッファイメージの描画
        g.drawImage(buffer, 0, 0, this);
    }
}