//
/* ---------------------------------------------------------------------------------------------- adder.java 半加算器 ver. 2.00 (JDK 1.02) ueyama@infonet.co.jp 1999.02.18 update: 2007.07.28 ---------------------------------------------------------------------------------------------- */ import java.applet.Applet; import java.awt.*; public class adder extends Applet { int A=0, B=0, C=0, S=0; // 入出力値 int Tt[][]={{0,0,0,0},{0,1,0,1},{1,0,0,1},{1,1,1,0}}; // 真理値表 int Sx[]={28, 28,385,385}; // 入出力値表示X座標 int Sy[]={10,114, 62,176}; // 入出力値表示Y座標 int Dx[]={113,113,185,185,185,185,185,185,283,283}; // データ表示 X座標 int Dy[]={ 50, 78, 0, 50, 78,128,154,204, 40, 88}; // データ表示 Y座標 int Tx[]={462,486,519,543}; // 真理値表 表示X座標 int Dv[][]={{0,0,0,1,1,0,0,0,0,0},{1,0,0,0,1,1,0,1,0,1}, // データ値表 {0,1,1,1,0,0,1,0,1,0},{1,1,1,0,0,1,1,1,0,0}}; Image Img; 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")); // gif ファイルの読み込み mt.addImage(Img, 0); try { mt.waitForID(0); } catch(InterruptedException e){}; } 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_b(int x, int y, int n, int c) // 0 or 1 の表示 { int w=0, h=0, ox=0, oy=0; switch(c) { case 0: w=15; h=21; ox=565; oy= 0; break; // '0' '1' (black) case 1: w=12; h=16; ox=565; oy=42; break; // '0' '1' (gray or red) } Graphics gx=getGraphics(); gx.clipRect(x,y,w,h); gx.clearRect(x,y,w,h); gx.drawImage(Img,x-ox,y-(oy+n*h),this); gx.dispose(); } public void dsp_d() // データの表示 { int i,j; dsp_b(Sx[0],Sy[0],A,0); // 入出力値 dsp_b(Sx[1],Sy[1],B,0); dsp_b(Sx[2],Sy[2],S,0); dsp_b(Sx[3],Sy[3],C,0); for(i=0; i<10; i++) dsp_b(Dx[i],Dy[i],Dv[A*2+B][i],1); // ゲート入力値 for(i=0; i<4; i++) for(j=0; j<4; j++) dsp_b(Tx[j],79+i*25,Tt[i][j]+((i==A*2+B)?2:0),1); // 真理値表 } public void paint(Graphics g) { g.clearRect(0,0,size().width,size().height); g.drawImage(Img,0,0,this); dsp_d(); } public boolean mouseDown(Event e, int x, int y) { if(inside(x,0,50)) // 入力信号をクリック { if(inside(y, 5, 40)) A=(A==0)?1:0; if(inside(y,108,143)) B=(B==0)?1:0; } if(inside(x,452,564) && inside(y,74,174)) // 真理値表をクリック { int m=(y-74)/25; A=m/2; B=m%2; } C=Tt[A*2+B][2]; S=Tt[A*2+B][3]; dsp_d(); return true; } } //戻る