/*
	A basic extension of the java.applet.Applet class
 */

import java.awt.*;
import java.lang.Math.*; 
import java.applet.*;

public class Taikakusen extends Applet
{
	public void init()
	{
		//{{INIT_CONTROLS
		setLayout(null);
		setSize(512,373);
		button1.setLabel("３");
		add(button1);
		button1.setBackground(java.awt.Color.lightGray);
		button1.setBounds(15,120,35,26);
		button2.setLabel("４");
		add(button2);
		button2.setBackground(java.awt.Color.lightGray);
		button2.setBounds(15,147,35,26);
		button3.setLabel("５");
		add(button3);
		button3.setBackground(java.awt.Color.lightGray);
		button3.setBounds(15,174,35,26);
		button4.setLabel("６");
		add(button4);
		button4.setBackground(java.awt.Color.lightGray);
		button4.setBounds(15,201,35,26);
		button5.setLabel("７");
		add(button5);
		button5.setBackground(java.awt.Color.lightGray);
		button5.setBounds(15,228,35,26);
		button6.setLabel("８");
		add(button6);
		button6.setBackground(java.awt.Color.lightGray);
		button6.setBounds(15,255,35,26);
		button7.setLabel("９");
		add(button7);
		button7.setBackground(java.awt.Color.lightGray);
		button7.setBounds(15,282,35,26);
		button8.setLabel("１０");
		add(button8);
		button8.setBackground(java.awt.Color.lightGray);
		button8.setBounds(15,309,35,26);
		button9.setLabel("対角線");
		add(button9);
		button9.setBackground(java.awt.Color.lightGray);
		button9.setBounds(9,87,48,27);
		add(textField1);
		textField1.setFont(new Font("Dialog", Font.PLAIN, 16));
		textField1.setBounds(9,339,42,27);
		label1.setText("数を入れて下さい");
		add(label1);
		label1.setBounds(54,339,99,24);
		button10.setLabel("もどす");
		add(button10);
		button10.setBackground(java.awt.Color.lightGray);
		button10.setBounds(9,57,48,27);
		button11.setLabel("消す");
		add(button11);
		button11.setBackground(java.awt.Color.lightGray);
		button11.setBounds(9,27,48,27);
		//}}
		tyoutenKeisan();
	
		//{{REGISTER_LISTENERS
		SymMouse aSymMouse = new SymMouse();
		button1.addMouseListener(aSymMouse);
		button2.addMouseListener(aSymMouse);
		button3.addMouseListener(aSymMouse);
		button4.addMouseListener(aSymMouse);
		button5.addMouseListener(aSymMouse);
		button6.addMouseListener(aSymMouse);
		button7.addMouseListener(aSymMouse);
		button8.addMouseListener(aSymMouse);
		button9.addMouseListener(aSymMouse);
		SymText lSymText = new SymText();
		textField1.addTextListener(lSymText);
		this.addMouseListener(aSymMouse);
		SymMouseMotion aSymMouseMotion = new SymMouseMotion();
		this.addMouseMotionListener(aSymMouseMotion);
		
		line = new int[100][2][2];
		button10.addMouseListener(aSymMouse);
		button11.addMouseListener(aSymMouse);
		//}}
	}
	
	//{{DECLARE_CONTROLS
	java.awt.Button button1 = new java.awt.Button();
	java.awt.Button button2 = new java.awt.Button();
	java.awt.Button button3 = new java.awt.Button();
	java.awt.Button button4 = new java.awt.Button();
	java.awt.Button button5 = new java.awt.Button();
	java.awt.Button button6 = new java.awt.Button();
	java.awt.Button button7 = new java.awt.Button();
	java.awt.Button button8 = new java.awt.Button();
	java.awt.Button button9 = new java.awt.Button();
	java.awt.TextField textField1 = new java.awt.TextField();
	java.awt.Label label1 = new java.awt.Label();
	java.awt.Button button10 = new java.awt.Button();
	java.awt.Button button11 = new java.awt.Button();
	//}}
    int henL=250;
    int tyoutenSu=6;
    int[][] iti; 
    public void tyoutenKeisan()
    {
        do
        { henL=henL-1;
            
            tyoutenKeisan1();
            
        }while( iti[1][tyoutenSu/2]<20 );//////////////////////////
        repaint();
    }
        
        
    public void tyoutenKeisan1()    
    {
        iti=new int[2][tyoutenSu+1];
        double kaku = java.lang.Math.PI*2/(double)tyoutenSu;
        
        for( int i=0;i<tyoutenSu;i++)
        {
            iti[0][i]= (int)(henL*Math.cos(kaku * (double)i) ) ;  //1 x
            iti[1][i]=-(int)(henL*Math.sin(kaku * (double)i) ) ;  //0 y 
            if(i==0)
            {
                iti[0][i]=  ( this.getSize().width + henL )/2+30;
                iti[1][i]=  ( this.getSize().height - 20  );
            }else if(i>0 )
            {
                iti[0][i]=iti[0][i]+iti[0][i-1];   
                iti[1][i]=iti[1][i]+iti[1][i-1];   
            }
        }
        iti[0][tyoutenSu]=iti[0][0];////////////////////////
        iti[1][tyoutenSu]=iti[1][0];////////////////////////
    }

    public void paint( Graphics g )
    {
        g.setColor(Color.yellow);
        g.fillPolygon(iti[0], iti[1], tyoutenSu );
        g.setColor(Color.black);
        for(int i=0;i<tyoutenSu;i++)
        {
            if( i==0)
            {
                g.setColor(Color.red);
            }else
            {
                g.setColor(Color.black);
            }
            g.drawLine(iti[0][i], iti[1][i], iti[0][i+1], iti[1][i+1]);
        }
        //対角線描画
        if(taikakusen.equals("on"))
        {
            taikakusen="off";
            for( int i=0;i<tyoutenSu;i++)
            {
                for(int i1=0;i1<tyoutenSu;i1++)
                {
                    g.drawLine(iti[0][i], iti[1][i], iti[0][i1], iti[1][i1]);
                }
            }
        }else
        {
            for( int i = 0;i<=lineMax;i++)
            {
                g.drawLine( line[i][0][0],line[i][0][1],line[i][1][0],line[i][1][1] );    
            }
        }
    }


	class SymMouse extends java.awt.event.MouseAdapter
	{
		public void mousePressed(java.awt.event.MouseEvent event)
		{
			Object object = event.getSource();
			if (object == Taikakusen.this)
				Taikakusen_MousePressed(event);
		}

		public void mouseReleased(java.awt.event.MouseEvent event)
		{
			Object object = event.getSource();
			if (object == button1)
				button1_MouseReleased(event);
			else if (object == button2)
				button2_MouseReleased(event);
			else if (object == button3)
				button3_MouseReleased(event);
			else if (object == button4)
				button4_MouseReleased(event);
			else if (object == button5)
				button5_MouseReleased(event);
			else if (object == button6)
				button6_MouseReleased(event);
			else if (object == button7)
				button7_MouseReleased(event);
			else if (object == button8)
				button8_MouseReleased(event);
			else if (object == button9)
				button9_MouseReleased(event);
			else if (object == Taikakusen.this)
				Taikakusen_MouseReleased(event);
			else if (object == button10)
				button10_MouseReleased(event);
			else if (object == button11)
				button11_MouseReleased(event);
		}
	}

	void button1_MouseReleased(java.awt.event.MouseEvent event)
	{
	    henL=400;
		tyoutenSu=3;
		tyoutenKeisan();
	}

	void button2_MouseReleased(java.awt.event.MouseEvent event)
	{
	    henL=400;
		tyoutenSu=4;
		tyoutenKeisan();
	}

	void button3_MouseReleased(java.awt.event.MouseEvent event)
	{
	    henL=400;
		tyoutenSu=5;
		tyoutenKeisan();
	}

	void button4_MouseReleased(java.awt.event.MouseEvent event)
	{
	    henL=250;
		tyoutenSu=6;
		tyoutenKeisan();
	}

	void button5_MouseReleased(java.awt.event.MouseEvent event)
	{
	    henL=250;
		tyoutenSu=7;
		tyoutenKeisan();
	}

	void button6_MouseReleased(java.awt.event.MouseEvent event)
	{
	    henL=400;
		tyoutenSu=8;
		tyoutenKeisan();
	}

	void button7_MouseReleased(java.awt.event.MouseEvent event)
	{
	    henL=400;
		tyoutenSu=9;
		tyoutenKeisan();
	}

	void button8_MouseReleased(java.awt.event.MouseEvent event)
	{
	    henL=400;
		tyoutenSu=10;
		tyoutenKeisan();
	}
	
    //対角線描画
    String taikakusen="off";
	void button9_MouseReleased(java.awt.event.MouseEvent event)
	{
		taikakusen="on";
		lineMax = -1;
		repaint();
	}

	class SymText implements java.awt.event.TextListener
	{
		public void textValueChanged(java.awt.event.TextEvent event)
		{
			Object object = event.getSource();
			if (object == textField1)
				textField1_TextValueChanged(event);
		}
	}

	void textField1_TextValueChanged(java.awt.event.TextEvent event)
	{
		String su = textField1.getText();
		try{
		        tyoutenSu = Integer.parseInt( su );
		        if( tyoutenSu>10 )
		        {
		            henL=200;
		            tyoutenKeisan();
		            repaint();   
		        }
		}catch( NumberFormatException e)
		{
		}
	}
    

	class SymMouseMotion extends java.awt.event.MouseMotionAdapter
	{
		public void mouseDragged(java.awt.event.MouseEvent event)
		{
			Object object = event.getSource();
			if (object == Taikakusen.this)
				Taikakusen_MouseDragged(event);
		}
	}
	
	int lineMax=-1;
	int line[][][];
	String draw="off";
    //近くの頂点を探して線を引く
	void Taikakusen_MousePressed(java.awt.event.MouseEvent event)
	{
	    draw="off";
	    int x = event.getPoint().x;
	    int y = event.getPoint().y;
	    for( int i= 0;i<tyoutenSu;i++)
	    {
	        if( (iti[0][i]-x)*(iti[0][i]-x) + (iti[1][i]-y)*(iti[1][i]-y) <  henL*henL/2  )
	        {
	            lineMax = lineMax + 1;
	            line[lineMax][0][0]=iti[0][i];
	            line[lineMax][0][1]=iti[1][i];
	            
	            line[lineMax][1][0]=x;
	            line[lineMax][1][1]=y;
	            draw="on";
	            repaint();
	        }
	    }
	}
	
    //線を引く
	void Taikakusen_MouseDragged(java.awt.event.MouseEvent event)
	{
	    if (draw.equals("on") )
	    {
	        int x = event.getPoint().x;
	        int y = event.getPoint().y;
	        line[lineMax][1][0]=x;
	        line[lineMax][1][1]=y;
	        
	        repaint();
	    }
	}
	
    //対角線を引く
	void Taikakusen_MouseReleased(java.awt.event.MouseEvent event)
	{
	    draw="off";//頂点の付近判定用に借用
	    int x = event.getPoint().x;
	    int y = event.getPoint().y;
	    for( int i= 0;i<tyoutenSu;i++)
	    {
	        if( (iti[0][i]-x)*(iti[0][i]-x) + (iti[1][i]-y)*(iti[1][i]-y) <  henL*henL/2  )
	        {
	            line[lineMax][1][0]=iti[0][i];
	            line[lineMax][1][1]=iti[1][i];
	            draw="on";
	            repaint();
	        }
	 	}
	 	if( !draw.equals("on") )
	 	{
	 	    lineMax=lineMax-1;
	 	    if( lineMax<= -1 )lineMax=-1;
	 	}
	 	draw="off";//ドラッグでない
	}
    //線を戻す
	void button10_MouseReleased(java.awt.event.MouseEvent event)
	{
		lineMax--;
		if( lineMax<=-1) lineMax=-1;
		repaint();
	}
    //線を消す
	void button11_MouseReleased(java.awt.event.MouseEvent event)
	{
		lineMax=-1;
		repaint();
	}
}
