//
/* ---------------------------------------------------------------------------------------------- card.java 数当てカード ver. 1.10 (JDK 1.02) ueyama@infonet.co.jp 1999.04.18 update: 2008.08.06 ---------------------------------------------------------------------------------------------- */ import java.applet.Applet; import java.awt.*; public class card extends Applet { int N=0; // 正解の値 int Q=0; // 選択カード数 int Card[][][]={{{57,59,61,63},{49,51,53,55},{41,43,45,47},{33,35,37,39}, {25,27,29,31},{17,19,21,23},{ 9,11,13,15},{ 1, 3, 5, 7}}, {{58,59,62,63},{50,51,54,55},{42,43,46,47},{34,35,38,39}, {26,27,30,31},{18,19,22,23},{10,11,14,15},{ 2, 3, 6, 7}}, {{60,61,62,63},{52,53,54,55},{44,45,46,47},{36,37,38,39}, {28,29,30,31},{20,21,22,23},{12,13,14,15},{ 4, 5, 6, 7}}, {{60,61,62,63},{56,57,58,59},{44,45,46,47},{40,41,42,43}, {28,29,30,31},{24,25,26,27},{12,13,14,15},{ 8, 9,10,11}}, {{60,61,62,63},{56,57,58,59},{52,53,54,55},{48,49,50,51}, {28,29,30,31},{24,25,26,27},{20,21,22,23},{16,17,18,19}}, {{60,61,62,63},{56,57,58,59},{52,53,54,55},{48,49,50,51}, {44,45,46,47},{40,41,42,43},{36,37,38,39},{32,33,34,35}}}; boolean Cs[]={false,false,false,false,false,false,false,false}; // true: 選択されたカード boolean A=false; 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 m, int n, int c) { int w=0, h=0, ox=0, oy=0; switch(c) { case 0: w=13; h=16; ox= 0; oy= 0; break; // 数字の表示 case 1: w=26; h=23; ox=130; oy= 0; break; // ボタンの表示 } Graphics gx=getGraphics(); 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_c(int n, int c) // カード(数字)の表示 { int i,j,k,x=n%3 *167,y=n/3 *208; for(j=0; j<8; j++) { for(i=0; i<4; i++) { k=Card[n][j][i]; if(k>9) dsp_b(x+i*39+9, y+j*24+8, k/10, (A && k==N)?2:c, 0); dsp_b(x+i*39+13+9, y+j*24+8, k%10, (A && k==N)?2:c, 0); } } } public void paint(Graphics g) { int i; g.clearRect(0,0,size().width,size().height); for(i=0; i<6; i++) g.drawRect(i%3 *167,i/3 *208,159,200); // カードの枠の表示 for(i=0; i<6; i++) dsp_c(i,(Cs[i])?1:0); // カードの数字の表示 dsp_b(500,385,(N>0)?0:2,0,1); // クリアボタンの表示 dsp_b(530,385,(Q>1)?0:2,1,1); // ?ボタンの表示 } public boolean mouseDown(Event e, int mx, int my) { int m,n; if(mx%167<159 && my%208<200 && mx<493) // カードをクリック { if(A) { N=0; Q=0; for(m=0; m<6; m++) {Cs[m]=false; dsp_c(m,0);} // カードのクリアと表示 } m=my/208*3 + mx/167; // クリックされたカード番号 Cs[m]=!Cs[m]; dsp_c(m,(Cs[m])?1:0); // カードの表示 A=false; Q++; } if(inside(mx,500,526) && inside(my,385,408) && N>0) // クリアボタン { A=false; N=0; Q=0; dsp_b(500,385,1,0,1); for(m=0; m<6; m++) {Cs[m]=false; dsp_c(m,0);} // カードのクリアと表示 } if(inside(mx,530,556) && inside(my,385,408) && Q>0) // ?ボタン { A=true; dsp_b(530,385,1,1,1); for(m=0; m<6; m++) dsp_c(m,(Cs[m])?1:0); // カードの表示 } for(N=0,n=1,m=0; m<6; m++,n*=2) if(Cs[m]) N+=n; return true; } public boolean mouseUp(Event e, int mx, int my) { dsp_b(500,385,(N>0)?0:2,0,1); // クリアボタンの表示 dsp_b(530,385,(Q>0)?0:2,1,1); // ?ボタンの表示 return true; } } //戻る