/*
Programa para construir un caracol con forma, pero cun multiples funciones
*/

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Vector;
import java.lang.Math;

public class m0104477_05 extends Applet{
   Panel pnl_1;
   Panel pnl_2 = new Panel ();
   Panel pnl_3 = new Panel ();

   Label lbl_1 = new Label ("穂の数");
   Label lbl_2 = new Label ("長さ");

   TextField tf_1 = new TextField ("50");
   TextField tf_2 = new TextField ("7");

   Choice color = new Choice ();

   Button boton_1 = new Button ("ok");

   int nn1 = Integer.parseInt(tf_1.getText());
   int nn2 = Integer.parseInt(tf_2.getText());

	public void init (){
		setBackground (Color.white);
		setLayout (new BorderLayout ());

		add ("North", pnl_1 = new Panel ());
		pnl_1.setBackground (Color.pink);
		pnl_1.setLayout (new GridLayout (2,3));

		pnl_2.add (lbl_1);
		pnl_2.add (tf_1);
		pnl_1.add (pnl_2);
		pnl_3.add (lbl_2);
		pnl_3.add (tf_2);
		pnl_3.add (boton_1);
		pnl_1.add (pnl_3);
	}

  double scale=0.95;
  int n=7;
  int angle=30;
  int w,h;
  int loop = 50;
  double ang=70.0;
  double len=70.0;

  public void paint(Graphics g){
    w=getSize().width;
    h=getSize().height;
    double x0,y0;

    //原点の指定
    x0=w/2;
    y0=0+55;

    //背景を白で塗りつぶし
    g.setColor(Color.white);
    g.fillRect(0,0,w,h);

    //ベース色設定
    g.setColor(new Color(145,42,42));

	//描画開始
	for(int re=0;re<loop;re++){
	    rtree(g,n,x0+Math.random()*500-250,y0+Math.random()*60-30,len,ang);
	}

	//ボタン動作
	boton_1.addActionListener ( new java.awt.event.ActionListener (){
		public void actionPerformed (ActionEvent e){
			loop = Integer.parseInt(tf_1.getText());
			n = Integer.parseInt(tf_2.getText());
			repaint ();
		}
	});
  }

  public void rtree(Graphics g,int nn,double x0,double y0, double len,double ang){
	//現在のループ回数で色を変更
    if(nn<=0){
      return;
    }if(nn==1){
	    g.setColor(new Color(195,122,122));
    }if(nn==2){
	    g.setColor(new Color(185,102,102));
    }if(nn==3){
	    g.setColor(new Color(175,82,82));
    }if(nn==4){
	    g.setColor(new Color(165,62,62));
    }

	//
    double x,y;
    final double RAD=Math.PI/180.0;
    x=len*Math.cos(RAD*ang)+x0;
    y=len*Math.sin(RAD*ang)+y0;

    g.drawLine((int)x0,(int)(h-y0),(int)x,(int)(h-y));
    int ang_r1=(int)(Math.random()*20);
    int ang_r2=(int)(Math.random()*20);
    int ang_r3=(int)(Math.random()*20);
    double sca_r1=(Math.random()/2)+0.5;
    double sca_r2=(Math.random()/2)+0.5;
    double sca_r3=(Math.random()/2)+0.5;

    //再帰
    rtree(g,nn-1,x,y,len*sca_r1,ang+ang_r1);
    rtree(g,nn-1,x,y,len*sca_r2,ang+ang_r2);
    rtree(g,nn-1,x,y,len*sca_r3,ang+ang_r3);
    //ベース色再設定
    g.setColor(new Color(145,42,42));
  }
}


