//
/* ----------------------------------------------------------------------------------------------
lamp.java 2進数 ver. 2.00 (JDK 1.02)
ueyama@infonet.co.jp 1999.08.30
update: 2008.03.21
---------------------------------------------------------------------------------------------- */
import java.applet.Applet;
import java.awt.*;
public class lamp extends Applet
{
int Dec=13; // 10進数値
Image Img;
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); // GIF ファイルの読み込み
Img=getImage(getCodeBase(), getParameter("figure"));
mt.addImage(Img, 0);
try
{
mt.waitForID(0);
}
catch(InterruptedException e){};
gr=getGraphics();
}
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_p(int x, int y, int m, int n, int c)
{
Graphics gx=gr.create();
int w=0, h=0, ox=0, oy=0;
switch(c)
{
case 0: w=35; h=61; ox= 0; oy= 0; break; // 電球
case 1: w=17; h=24; ox= 70; oy= 0; break; // 10進数
case 2: w=23; h=27; ox=115; oy=24; break; // 2進数
case 3: w=45; h=11; ox= 70; oy=24; break; // (2進数)
}
gx.clipRect(x,y,w,h);
gx.clearRect(x,y,w,h);
gx.drawImage(Img,x-(ox+m*w),y-(oy+n*h),this);
gx.dispose();
}
public void dsp_s() // 電球、数値の表示
{
int i,j,m;
for(j=8, i=0; i<4; i++,j/=2)
{
m=((Dec & j)==0)?0:1;
dsp_p(60*i,0,m,0,0); // 電球の表示
dsp_p(283+24*i,18,m,0,2); // 2進数の表示
}
dsp_p(240,18,2,0,2); // = の表示
dsp_p(390,19,10,0,1); // = の表示
m=Dec/10; dsp_p(420,19,(m>0)? m:11,0,1); // 10進数の表示
m=Dec%10; dsp_p(440,19,m,0,1); // 10進数の表示
dsp_p(306,50,0,0,3); // "(2進数)" の表示
dsp_p(418,50,0,1,3); // "(10進数)" の表示
}
public void paint(Graphics g)
{
dsp_s();
}
public boolean mouseDown(Event e, int x, int y)
{
int m,n,i,j=1;
if((x<215 && x%60<35) || (inside(x,283,374) && inside(y,18,45) && (x-283)%24<19))
{
n=(x<215)? 0:4;
m=(x<215)? 3-x/60: 3-(x-283)/24;
for(i=0; i< m; i++) j*=2;
if((Dec & j) ==0) Dec+=j;
else Dec-=j;
dsp_s();
}
return true;
}
}
//戻る