//
/* ----------------------------------------------------------------------------------------------
logic.java 論理回路 ver. 1.01 (JDK 1.02)
ueyama@infonet.co.jp 1999.08.31
update: 2008.01.02
---------------------------------------------------------------------------------------------- */
import java.applet.*;
import java.awt.*;
public class logic extends Applet
{
int Dt[]={1,1,0,0,0,1,0,0}; // データ
int Bx[]={95,95,95, 95,219,219,219,374}; // データ表示 X 座標
int By[]={14,59,83,111, 2, 59, 99, 71}; // データ表示 Y 座標
Image Img;
AudioClip Ac;
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){};
Ac=getAudioClip(getCodeBase(), getParameter("audioclip")); // ブザー音ファイルの読み込み
}
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_g(int x, int y, int m, int n, int c) // 図、文字の表示
{
Graphics gx=getGraphics();
int w=0, h=0, ox=0, oy=0;
switch(c)
{
case 0: w=248; h=120; ox= 0; oy= 0; break; // 回路図
case 1: w= 50; h= 11; ox=248; oy= 0; break; // エンジン, キー, ライト, ドア, ブザー
case 2: w= 26; h= 11; ox=248; oy=55; break; // 停止/回転, 抜く/挿入, 消灯/点灯, 閉/開
case 3: w= 12; h= 16; ox=248; oy=99; break; // 0,1 (黒)
case 4: w= 12; h= 16; ox=272; oy=99; break; // 0,1 (灰)
}
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;
Dt[4]=(Dt[0]==0)?1:0; // エンジンの NOT 回路出力
Dt[5]=(Dt[1]+Dt[2]==0)? 0:1; // OR 回路出力
Dt[6]=Dt[3]; // ドア と同じデータ
Dt[7]=(Dt[4]+Dt[5]+Dt[6]==3)? 1:0; // ブザー
for(i=0;i<8;i++) dsp_g(Bx[i],By[i],Dt[i],0,(inside(i,4,6))?4:3); // データの表示
for(i=0;i<4;i++) dsp_g(60,By[i]+2,Dt[i],i,2); // 状態の表示
}
public void paint(Graphics g)
{
int i;
g.clearRect(0,0,size().width,size().height);
dsp_g(113,0,0,0,0); // 回路図の表示
for(i=0;i<4;i++) dsp_g(0,By[i]+2,0,i,1); // 名称の表示
dsp_g(362,54,0,i,1); // "ブザー" の表示
dsp_s(); // データを表示
}
public boolean mouseDown(Event e, int x, int y)
{
int i;
if(x<130)
{
for(i=0;i<4;i++) if(inside(y,By[i]-2,By[i]+18)) Dt[i]=(Dt[i]==0)? 1:0; // データの反転
if(Dt[1]==0 && Dt[0]==1) Dt[0]=0; // キーを挿入しないとエンジンはかからない
dsp_s(); // データを表示
if(Dt[7]==1) Ac.loop(); // ブザーを鳴らす
else Ac.stop(); // ブザーを止める
}
return true;
}
}
//戻る