//
/* ----------------------------------------------------------------------------------------------
stars.java GIFアニメ ver. 1.10 (JDK 1.02)
ueyama@infonet.co.jp 2002.02.25
update: 2009.11.12
---------------------------------------------------------------------------------------------- */
import java.applet.*;
import java.awt.*;
import java.util.*;
public class stars extends Applet implements Runnable
{
int Xs=304, Ys=170; // スクロールバー表示位置
int Xb=378, Yb=193; // Run/Stop ボタン表示位置
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;
Graphics gr;
public void init()
{
String Bg=getParameter("bgcolor");
int 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 m, int n, int c) // 画像の表示
{
int w=0, h=0, ox=0, oy=0;
Graphics gx=gr.create();
switch(c)
{
case 0: w=48; h=59; ox= 0; oy= 0; break; // 踊る人
case 1: w=48; h= 9; ox= 0; oy=59; break; // フレーム No.
case 2: w=16; h=15; ox=820; oy= 0; break; // <| & |>
case 3: w=16; h=13; ox=820; oy=30; break; // スクロールバーつまみ
case 4: w=26; h=23; ox=768; oy= 0; break; // Run/Stop
}
gx.clipRect(x,y,w,h);
if(c==1) gx.clearRect(x, y, w, h);
gx.drawImage(Img,x-(ox+m*w),y-(oy+n*h),this);
gx.dispose();
}
public void dsp_anm() // アニメ画像表示
{
gr.setColor(new Color(0xe5e5de)); // スクロールバーの色
gr.fillRect(Xs+20, Ys+1, 136, 13); // スクロールバーの表示
dsp_img(367, 102, Fn, 0, 0); // 踊る人の表示
dsp_img(Xs+20+Fn*8, Ys+1, 0, 0, 3); // スクロールバーつまみの表示
dsp_img(415, 152, Fn, 0, 1); // フレーム No. の表示
}
public void paint(Graphics g)
{
int i;
for(i=0;i<16;i++)
{
dsp_img(i*49, 0, i, 0, 0); // 踊る人の表示
dsp_img(i*49, 61, i, 0, 1); // フレーム No. の表示
}
dsp_img(Xs, Ys, (Fn>0)?0:2, 1, 2); // <| ボタンの表示
dsp_img(Xs+160, Ys, (Fn<15)?0:2, 0, 2); // |> ボタンの表示
dsp_img(Xb, Yb, 0, (Run)?1:0, 4); // Run/Stop ボタンの表示
dsp_anm(); // アニメ画像表示
}
public void run()
{
while(th!=null)
{
if(Run) dsp_anm(); // 画像の表示
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, Xs+28, Xs+148))
{
Fn=(mx-(Xs+28))/8; // フレーム No.
dsp_img(Xs, Ys, (Fn>0)?0:2, 1, 2); // <| ボタンの表示
dsp_img(Xs+160, Ys, (Fn<15)?0:2, 0, 2); // |> ボタンの表示
dsp_anm(); // アニメ画像の表示
}
return true;
}
public boolean mouseDown(Event e, int mx, int my)
{
if(inside(my, Ys, Ys+15) && inside(mx, Xs, Xs+176)) // <| or |> ボタンをクリック
{
if(inside(mx, Xs, Xs+16) && Fn>0) // <| ボタンをクリック
{
Fn--;
dsp_img(Xs, Ys, 1, 1, 2); // <| ボタンの表示
}
if(inside(mx, Xs+160, Xs+176) && Fn<15) // |> ボタンをクリック
{
Fn++;
dsp_img(Xs+160, Ys, 1, 0, 2); // |> ボタンの表示
}
dsp_anm(); // アニメ画像の表示
}
if(inside(mx, Xb, Xb+26) && inside(my, Yb, Yb+23)) // Run/Stop ボタンをクリック
{
dsp_img(Xb, Yb, 1, (Run)?1:0, 4); // Run/Stop ボタンの表示
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))) // <| or |> ボタン
{
dsp_img(Xs, Ys, (Fn>0)?0:2, 1, 2); // <| ボタンの表示
dsp_img(Xs+160, Ys, (Fn<15)?0:2, 0, 2); // |> ボタンの表示
}
if(inside(mx, Xb, Xb+26) && inside(my, Yb, Yb+23)) // Run/Stop ボタン
{
dsp_img(Xb, Yb, 0, (Run)?1:0, 4); // Run/Stop ボタンの表示
if(!Run) dsp_anm();
}
return true;
}
}
//戻る