//
/* ----------------------------------------------------------------------------------------------
stars.java GIFアニメ ver. 1.00 (JDK 1.02)
ueyama@infonet.co.jp 2002.02.25
---------------------------------------------------------------------------------------------- */
import java.applet.*;
import java.awt.*;
import java.util.*;
public class stars extends Applet implements Runnable
{
int Xs=304,Ys=170, Xb=378,Yb=193, Xm=Xs+20, Xc=0; // 表示座標値
int Fn=0; // フレーム No.
int Wt[]={200, 100, 100, 300, 100, 100, 100, 100, 100, 100, 100, 100, 700, 100, 100, 100};
boolean Run=false;
Image Img;
Thread th=null;
int bgc;
Graphics gr;
public void init()
{
String Bg=getParameter("BgColor");
bgc=Integer.valueOf(Bg,16).intValue();
setBackground(new Color(bgc));
MediaTracker mt=new MediaTracker(this);
Img=getImage(getCodeBase(), getParameter("figure"));
mt.addImage(Img, 0);
try
{
mt.waitForID(0);
}
catch(InterruptedException e){};
gr=getGraphics();
}
public void start()
{
if(th==null)
{
th=new Thread(this);
th.start();
}
}
public boolean inside(int x, int a, int b)
{
return (x<=Math.max(a,b) && x>=Math.min(a,b)) ? true:false;
}
public void dsp_img(int x, int y, int n, int c) // 画像の表示
{
int w=0, h=0, ox=0, oy=0;
Graphics gx=gr.create();
switch(n)
{
case 0: w=16; h=15; ox= 0; oy= 0; break; // |>
case 1: w=16; h=15; ox= 0; oy=15; break; // <|
case 2: w=26; h=23; ox= 0; oy=30; break; // Run
case 3: w=26; h=23; ox= 0; oy=53; break; // Stop
case 4: w=48; h=70; ox= 64; oy= 0; break; // Stars & Data
case 5: w=48; h=59; ox= 64; oy= 0; break; // Stars のみ
case 6: w=16; h=13; ox= 48; oy= 0; break; // スクロールバー
case 7: w=48; h= 9; ox= 64; oy=61; // フレーム No.
gr.clearRect(x, y, w, h); break;
}
gx.clipRect(x,y,w,h);
gx.drawImage(Img,x-(ox+c*w),y-oy,this);
gx.dispose();
}
public void dsp_anm(int x) // アニメーション画像表示
{
gr.setColor(new Color(0xe5e5de));
gr.fillRect(Xs+20, Ys+1, 136, 13);
dsp_img(367, 102, 5, Fn);
dsp_img(x, Ys+1, 6, 0); // スクロールバーの表示
dsp_img(415, 152, 7, Fn);
Xm=Xs+20+Fn*8;
}
public void paint(Graphics g)
{
int i;
for(i=0;i<16;i++) dsp_img(i*49, 0, 4, i);
dsp_img(Xs, Ys, 1, (Fn>0)?0:2);
dsp_img(Xs+160, Ys, 0, (Fn<15)?0:2);
dsp_img(Xb, Yb, (Run)?3:2, 0);
dsp_anm(Xs+20+Fn*8);
}
public void run()
{
while(th!=null)
{
if(Run) dsp_anm(Xs+20+Fn*8);
try
{
th.sleep((Run)?Wt[Fn]:256);
}
catch (InterruptedException e){}
if(Run) { Fn++; Fn%=16; }
}
}
public void stop()
{
if(th!=null)
{
th.stop();
th=null;
}
}
public boolean mouseDrag(Event e, int mx, int my) // スクロールバーの操作
{
if(inside(my, Ys-10, Ys+25) && inside(mx, Xm-16, Xm+32))
{
if(inside(mx-Xc-20, Xs, Xs+120))
{
dsp_img(Xs, Ys, 1, (Fn>0)?0:2);
dsp_img(Xs+160, Ys, 0, (Fn<15)?0:2);
Fn=(mx-Xc-(Xs+20)+4)/8;
dsp_anm(mx-Xc);
Xm=mx-Xc;
}
}
return true;
}
public boolean mouseDown(Event e, int mx, int my)
{
if(inside(my, Ys, Ys+15))
{
if(inside(mx, Xs, Xs+16) && Fn>0) // |>
{
Fn--;
dsp_img(Xs, Ys, 1, 1);
dsp_anm(Xs+20+Fn*8);
}
if(inside(mx, Xs+160, Xs+176) && Fn<15) // <|
{
Fn++;
dsp_img(Xs+160, Ys, 0, 1);
dsp_anm(Xs+20+Fn*8);
}
if(inside(mx, Xm, Xm+16)) Xc=mx-Xm; // スクロールバー
}
if(inside(mx, Xb, Xb+26) && inside(my, Yb, Yb+23))
{
dsp_img(Xb, Yb, (Run)?3:2, 1);
Run=!Run;
}
return true;
}
public boolean mouseUp(Event e, int mx, int my)
{
if(inside(my, Ys, Ys+15) && (inside(mx, Xs, Xs+16) || inside(mx, Xs+160, Xs+184)))
{
dsp_img(Xs+160, Ys, 0, (Fn<15)?0:2);
dsp_img(Xs, Ys, 1, (Fn>0)?0:2);
}
if(inside(mx, Xb, Xb+26) && inside(my, Yb, Yb+23))
{
dsp_img(Xb, Yb, (Run)?3:2, 0);
if(!Run) dsp_anm(Xs+20+Fn*8);
}
return true;
}
}
//戻る