import java.applet.*;
import java.awt.*;
import java.awt.event.*;
//import java.io.*;
//import java.util.Vector;

public class Lotus extends Applet
{	
	private static final long serialVersionUID = 1L;

	miCanvas mc;
	
	Panel pnl_1;
	Panel pnl_2 = new Panel();
	Panel pnl_3 = new Panel();
	Panel pnl_4 = new Panel();

	Label lbl_1 = new Label("色");
	Label lbl_2 = new Label("花弁");
	Label lbl_3 = new Label("花の大きさ");

	TextField tf_petal = new TextField("6");
	TextField tf_radio = new TextField("100");

	Choice color_petal = new Choice();

	Button bottonPetal = new Button ("Change");
	Button bottonRadio = new Button ("Change");

	int petal = Integer.parseInt(tf_petal.getText());
	int radio = Integer.parseInt(tf_radio.getText());
	
	int division = 360;
   
	Point[] p = new Point[division + 1];
	Point[] p2 = new Point[division + 1];
	Point[] p3 = new Point[division + 1];
	Point[] p4 = new Point[division + 1];
	Point[] pc = new Point[division + 1];
	

	public void init()
	{
		setBackground(Color.white);

		setLayout(new BorderLayout());

		add("Center", mc = new miCanvas());
		add("North", pnl_1 = new Panel());
		
		pnl_1.setBackground(Color.pink);
		pnl_2.add(lbl_1);
		
		color_petal.add("桃");
		color_petal.add("赤");
		color_petal.add("青");
		color_petal.add("緑");
		color_petal.add("黄");
		color_petal.add("水");
		color_petal.add("橙");
		color_petal.add("黒");
		
		pnl_2.add(color_petal);
		pnl_3.add(lbl_2);
		pnl_3.add(tf_petal);
		pnl_3.add(bottonPetal);
		pnl_4.add(lbl_3);
		pnl_4.add(tf_radio);
		pnl_4.add(bottonRadio);
		pnl_1.add(pnl_2);
		pnl_1.add(pnl_3);
		pnl_1.add(pnl_4);
		

		color_petal.addItemListener(new java.awt.event.ItemListener()
				{
			public void itemStateChanged(ItemEvent e)
			{
				mc.set_color(color_petal.getSelectedIndex());
				
			}
				});
		bottonPetal.addActionListener(new java.awt.event.ActionListener()
				{
			public void actionPerformed (ActionEvent e)
			{
				mc.set_petal(Integer.parseInt(tf_petal.getText()));
				
			}
				});
		bottonRadio.addActionListener(new java.awt.event.ActionListener()
				{
			public void actionPerformed (ActionEvent e)
			{
				mc.set_radio(Integer.parseInt(tf_radio.getText()));
				
			}
				});
	}
	
	
	class miCanvas extends Canvas {
		private static final long serialVersionUID = 1L;
		
		// 初期設定
		int color_petal = 0;
		int petal=6;
		
		//miCanvas(){super ();}
		
		public void paint(Graphics g){
			int i,j;
			int C = 400;

			int Rn = ((int)(Math.random()*100))%10;

			for(i=0; i<division+1; i++){
				double ang = 2.0*Math.PI*i/(division);
				p[i] = new Point(
						(int)(radio * (0.5+Math.sin(petal*ang)) * (Math.cos(ang))),
						(int)(radio * (0.5+Math.sin(petal*ang)) * (Math.sin(ang))));
				p2[i] = new Point(
						(int)((radio*0.8) * (0.5+Math.cos(petal*ang)) * (Math.cos(ang))),
						(int)((radio*0.8) * (0.5+Math.cos(petal*ang)) * (Math.sin(ang))));
				p3[i] = new Point(
						(int)((radio) * (0.5+Math.sin(-1*petal*ang)) * (Math.cos(ang))),
						(int)((radio) * (0.5+Math.sin(-1*petal*ang)) * (Math.sin(ang))));
				p4[i] = new Point(
						(int)((radio*0.9) * (Math.cos(petal*ang)) * (Math.cos(ang))),
						(int)((radio*0.9) * (Math.cos(petal*ang)) * (Math.sin(ang))));
		
			} 
			
			for(j=0; j<Rn; j++){
				int Rx = (int)(Math.random()*800);
				int Ry = (int)(Math.random()*800);
				int Rs = (int)(Math.random()*100);
				
				for(i=0; i<division+1; i++){
					double ang2 = 2.0*Math.PI*i/(division);
					pc[i] = new Point(
							(int)(Rs * (1*(1+Math.cos(ang2))) * (Math.cos(ang2))),
							(int)(Rs * (1+Math.cos(ang2)) * (Math.sin(ang2))));
				} 
				for(i=1; i<division+1; i++){
					g.setColor(Color.green);
					g.drawLine(pc[i-1].x+Rx, pc[i-1].y+Ry, pc[i].x+Rx, pc[i].y+Ry);
				}
			}
			
			
		    switch (color_petal) {
		      case 0 : g.setColor(Color.pink);
		               break;
		      case 1 : g.setColor(Color.red);
		               break;
		      case 2 : g.setColor(Color.blue);
		               break;
		      case 3 : g.setColor(Color.green);
		               break;
		      case 4 : g.setColor(Color.yellow);
		               break;
		      case 5 : g.setColor(Color.cyan);
		               break;
		      case 6 : g.setColor(Color.orange);
		               break;
		      case 7 : g.setColor(Color.black);
		               break;
		    }
			for(i=1; i<division+1; i++){
				g.drawLine(p[i-1].x+C, p[i-1].y+C, p[i].x+C, p[i].y+C);
				g.drawLine(p2[i-1].x+C, p2[i-1].y+C, p2[i].x+C, p2[i].y+C);
				g.drawLine(p3[i-1].x+C, p3[i-1].y+C, p3[i].x+C, p3[i].y+C);
				g.drawLine(p4[i-1].x+C, p4[i-1].y+C, p4[i].x+C, p4[i].y+C);
			}	
			
		}
		
		public void set_color(int A)
		{
			color_petal = A;
			repaint();
		}
		
		void set_petal(int B)
		{
			petal = B;
			repaint();
		}
		
		void set_radio(int C)
		{
			radio = C;
			repaint();
		}
	}
}
