import java.applet.*;
import java.awt.*;
public class Dragon extends Applet {
   private int last_x=0;
   private int last_y=0;
   private Color current_color=Color.red;
   private Button clear_button;
   private Button draw_button;
private int xPart=160;
private int yPart=160;
private int jj;
private int step;
private int sign=-1;
private int curColor;
private int[] xAxis=new int[4099];
private int[] yAxis=new int[4099];
private int xDelt;
private int yDelt;

  

//init applet
   public void init(){

//set backgd color
    this.setBackground(Color.black);

//create a button
    clear_button=new Button("Clear");
    clear_button.setForeground(Color.black);
    clear_button.setBackground(Color.lightGray);
    this.add(clear_button);

//create a button
    draw_button=new Button("Draw the Dragon");
    draw_button.setForeground(Color.black);
    draw_button.setBackground(Color.lightGray);
    this.add(draw_button);
   }
//end init applet




//called when mouse click
    public boolean mouseDown(Event e, int x, int y){
          last_x=x; last_y=y;
           return true;
       }


//called when mouse moves
    public boolean mouseDrag(Event e, int x, int y){
          Graphics g=this.getGraphics();
          g.setColor(current_color);
          g.drawLine(last_x,last_y,x,y);
          last_x=x;
          last_y=y;
          return true;
      }


//user clicks button or chooses a color
     public boolean action(Event event, Object arg){

          if(event.target==clear_button){
               Graphics g=this.getGraphics();
               Rectangle r=this.bounds();
               g.setColor(this.getBackground());
               g.fillRect(r.x,r.y,r.width,r.height);
               return true;
              }
              //end clear

          // in case of click
         else if(event.target==draw_button){
               Graphics g=this.getGraphics();
               g.setColor(Color.blue);

         step=4096;        
        
        xAxis[1] = xPart;
        xAxis[4097] = 3*xPart;
        yAxis[1] = xPart;
        yAxis[4097] = yAxis[1];
        g.drawLine(xAxis[1],yAxis[1],xAxis[4097],yAxis[4097]);

// begin

  for(int i=1; i<13;i++){

// set color
 if(i==1){current_color=Color.green;}
 if(i==2){current_color=Color.yellow;}
 if(i==3){current_color=Color.red;}
 if(i==4){current_color=Color.magenta;}
 if(i==5){current_color=Color.blue;}
 if(i==6){current_color=Color.green;}
 if(i==7){current_color=Color.white;}
 if(i==8){current_color=Color.yellow;}
 if(i==9){current_color=Color.green;}
 if(i==10){current_color=Color.magenta;}
 if(i==11){current_color=Color.lightGray;}
 if(i==12){current_color=Color.blue;}
 g.setColor(current_color);
// end set color

   jj=step/2;
    for(int ii=1; ii<4097;ii+=step){

        xDelt=xAxis[step+ii] - xAxis[ii];
        yDelt=yAxis[step+ii] - yAxis[ii];
        sign=sign*(-1);

        xAxis[ii+jj]= xAxis[ii] + (xDelt + yDelt*sign)/2;
        yAxis[ii+jj]= yAxis[ii] + (yDelt - xDelt*sign)/2;

g.drawLine( xAxis[ii], yAxis[ii]+100, xAxis[ii+jj], yAxis[ii+jj]+100);
g.drawLine( xAxis[ii+jj], yAxis[ii+jj]+100, xAxis[ii+step], yAxis[ii+step]+100);
            
               }
               //end for ii
           step =step/2;
          }
          // end  for i
               return true;
        }

           // Otherwise let the superclass handle it.
           else return super.action(event, arg);
     }
     // end action method
}
//end Applet

