import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class r_square extends Applet implements Runnable{

   Thread th = null;
   Image os;
   Graphics og;
   int td[][] = {{0,0,1,1,0,0},{0,0,1,1,0,0},{1,1,1,1,1,1},{1,1,1,1,1,1},{0,0,1,1,0,0},{0,0,1,1,0,0}};
   int cd[][] = {{2,8,9,3},{8,14,15,9},{14,20,21,15},{20,26,27,21},{26,32,33,27},{12,18,19,13},{13,19,20,14},
                 {15,21,22,16},{16,22,23,17},{8,13,20,15},{9,14,21,16},{14,19,26,21},{15,20,27,22},{2,12,26,16},
                 {3,13,27,17},{8,18,32,22},{9,19,33,23},{8,19,27,16},{9,13,26,22},{2,18,33,17},{3,12,32,23}};
   int px,py,ch=0,no=6,sw=0;

   public void init(){
      os = createImage(240,270);
      og = os.getGraphics();

      addMouseListener(
         new MouseAdapter(){
            public void mousePressed(MouseEvent e){
               if((e.getX()>30)&&(e.getX()<90)&&(e.getY()>230)&&(e.getY()<250)){
                  if(ch == 0){
                     ch = 1;
                  }else{
                     ch = 0;
                  }
               }else if((e.getX()>150)&&(e.getX()<210)&&(e.getY()>230)&&(e.getY()<250)){
                  if(ch == 1)ch = 0;
                  for(int rx = 0;rx < 6;rx ++){
                     for(int ry = 0;ry < 6;ry ++){
                        td[ry][rx] = td[ry][rx]*td[ry][rx];
                     }
                  }
                  no = 6;
               }else{
                  if(ch == 1)ch = 0;
                  px = (e.getX() - 30) / 30;
                  py = (e.getY() - 30) / 30;
                  if(td[py][px] == 1){
                     if(no > 0){
                        td[py][px] = -1;
                        no --;
                     }
                  }else if(td[py][px] == -1){
                     td[py][px] = 1;
                     no ++;
                  }
               }
               repaint();
            }
         } 
      );

   }

   public void paint(Graphics g){
      og.setColor(Color.white);
      og.fillRect(0,0,240,270);

      for(int dx = 0;dx < 6;dx ++){
         for(int dy = 0; dy < 6;dy ++){
            if(td[dy][dx] == 1){
               for(int i = 0;i < 16;i++){
                  og.setColor(new Color(10,10,100+(int)(150*Math.sin(1.57*i/16))));
                  og.fillOval(dx*30+30+i,dy*30+30+i,32-2*i,32-2*i);
               }
            }else if(td[dy][dx] == -1){
               og.setColor(Color.black);
               og.fillOval(dx*30+42,dy*30+42,6,6);
            }
         }
      }
      og.setColor(Color.lightGray);
      og.fillRoundRect(30,230,60,20,5,5);
      og.fillRoundRect(150,230,60,20,5,5);
      og.setColor(Color.darkGray);
      og.drawRoundRect(30,230,60,20,5,5);
      og.drawRoundRect(150,230,60,20,5,5);
      og.setFont(new Font("",Font.BOLD,20));
      og.setColor(Color.black);
      og.drawString("check",34,246);
      og.drawString("reset",157,246);
      og.setColor(Color.lightGray);
      og.setFont(new Font("",Font.BOLD,30));
      og.drawString(""+no,115,250);
      og.setColor(Color.black);
      og.setFont(new Font("",Font.BOLD,30));
      og.drawString(""+no,113,249);
      if(ch == 1){
         og.setColor(Color.red);
         sw = 1;
         for(int s1 = 0;s1 < 21;s1 ++){
            if(td[cd[s1][0]/6][cd[s1][0]%6]+td[cd[s1][1]/6][cd[s1][1]%6]+td[cd[s1][2]/6][cd[s1][2]%6]+td[cd[s1][3]/6][cd[s1][3]%6] == 4){
               og.drawLine(cd[s1][0]%6*30+45,cd[s1][0]/6*30+45,cd[s1][1]%6*30+45,cd[s1][1]/6*30+45);
               og.drawLine(cd[s1][1]%6*30+45,cd[s1][1]/6*30+45,cd[s1][2]%6*30+45,cd[s1][2]/6*30+45);
               og.drawLine(cd[s1][2]%6*30+45,cd[s1][2]/6*30+45,cd[s1][3]%6*30+45,cd[s1][3]/6*30+45);
               og.drawLine(cd[s1][3]%6*30+45,cd[s1][3]/6*30+45,cd[s1][0]%6*30+45,cd[s1][0]/6*30+45);
               sw = 0;
            }
         }
      }
      if((sw == 1)&&(no == 0)&&(ch == 1)){
         og.setFont(new Font("",Font.BOLD,60));
         og.setColor(Color.black);
         og.drawString("clear!!",48,142);
         og.setColor(Color.red);
         og.drawString("clear!!",45,140);
      }

      g.drawImage(os,0,0,this);
     
   }

   public void start(){
      if(th == null){
         th = new Thread(this);
         th.start();
      }
   }

   public void stop(){
      th = null;
   }

   public void run(){
      while(th != null){
         try{
            Thread.sleep(100);
         }
         catch (InterruptedException e){
         }
      }
   }

   public void update( Graphics g ){
      paint( g ) ;
   }
}