/*
 * NumberMagic.java
 * copyright (c) since 2004 "Kimmy" all right reserved.
 */

/*
<applet code="NumberMagic.class" width=400 height=530>
</applet>
*/
 
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class NumberMagic extends Applet implements MouseListener{

    public Dimension d;
    public Image bi;
    public Graphics bg;
    public Button check;
    public int mode;
    public int size, next;
    public Color key;

    //初期化メソッド
    public void init(){
	this.setBackground(Color.white);
	d = getSize();
        bi = createImage(d.width, d.height);
        bg = bi.getGraphics();
	mode = 1;
	size = 40;
	next = 6*size/2 + 10;
	key = num2color((int)(9*Math.random()));

        this.addMouseListener(this);
    }

    //数字を色に変換するメソッド
    public Color num2color(int n){
	switch(n){
	case 0:
	    return Color.red;
	case 1:
	    return Color.green;
	case 2:
	    return Color.blue;
	case 3:
	    return Color.yellow;
	case 4:
	    return Color.magenta;
	case 5:
	    return Color.cyan;
	case 6:
	    return Color.gray;
	case 7:
	    return Color.orange;
	default:
	    return Color.pink;
	}
    }

    public void mouseClicked(MouseEvent e){
	int x = e.getX();
	int y = e.getY();
	if(mode==1){
	    if(0<x && x<size){
		if(next<y && y<next+size){
		    mode = 0;
		    repaint();
		}
	    }
	}else{
	    mode = 1;
	    key = num2color((int)(9*Math.random()));
	    repaint();
	}
    }
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mousePressed(MouseEvent e){}
    public void mouseReleased(MouseEvent e){}

    //描画メソッド
    public void paint(Graphics g){
	bg.clearRect(0, 0, d.width, d.height);
	switch(mode){
	case 1:
	    bg.setColor(Color.black);
	    String txt[] = {"2桁の数 n を想像して下さい。", 
			    "1の位の数字と10の位の数字の和 m を求めて下さい。",
			    "最初に想像した数 n と求めた数 m の差 n-m を求めて下さい。",
			    "下の表を参照して、求めた数 n-m に対応する色を確認して下さい。",
			    "ここでは既にあなたの選んだ色を予言しています。",
			    "check ボタンを押してみて下さい。"};
	    for(int l=0; l<6; l++){
		bg.drawString(txt[l], 0, size*(l+1)/2);
	    }
	    
	    for(int i=0; i<10; i++){
		for(int j=0; j<10; j++){
		    Color c;
		    int n;
		    String num;
		    if(i==0 && j==0){
			bg.drawString("check", 3, next+25);
			bg.drawRect(2, next+10, size-4, size-20);
			continue;
		    }
		    if(i+j==9 && i<9){
			c = key;
		    }else{
			c = num2color((int)(10*Math.random()));
		    }
		    n = 10*i+j;
		    if(n<10){
			num = " " + n;
		    }else{
			num = "" + n;
		    }
		    bg.setColor(c);
		    bg.fillRect(size*i, next+size*j, size, size);
		    bg.setColor(Color.black);
		    bg.drawString(num, size*i+12, next+size*j+25);
		}
	    }
	    for(int i=0; i<11; i++){
		bg.drawLine(size*i, next, size*i, next+10*size);
	    }
	    for(int j=0; j<11; j++){
		bg.drawLine(0, next+size*j, 10*size, next+size*j);
	    }
	    break;
	default:
	    bg.setColor(key);
	    bg.fillRect(0, 0, d.width, d.height);
	    bg.setColor(Color.black);
	    String txt1 = "これがあなたの選んだ色です。";
	    String txt2 = "画面をクリックすると戻ります。";
	    bg.drawString(txt1, 0, 100);
	    bg.drawString(txt2, 0, 200);
	}
	
	g.drawImage(bi, 0, 0, this);
    }

    //更新メソッド
    public void update(Graphics g){
	paint(g);
    }

}
