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

public class mobile extends Applet implements Runnable{

   Thread th = null;
   Image os;
   Graphics og;
   int px[] = new int[14];
   int py[] = new int[14];
   int wn[] = new int[3];
   int wd[] = new int[9];
   int cs[] = new int[9];
   int mx,my,cx,cy,sw,cd,ms;
   double s1,s2,sv1,sv2,ev1,ev2;

   public void init(){

      os = createImage(600,380);
      og = os.getGraphics();

      addMouseListener(
         new MouseAdapter(){
            public void mousePressed(MouseEvent e){
               cx = e.getX() ; cy = e.getY() ;
               if((Math.abs(cx-80)<40)&&(Math.abs(cy-35)<15)){
                  for(int r1 = 0;r1 < 9;r1 ++){
                     wd[r1] = 0;
                  }
                  s1 = 0 ; s2 = 0;
               }
               for(int nn = 0;nn < 3;nn ++){
                  for(int mm = 0;mm < 3;mm ++){
                     if((Math.abs(px[11+nn]+20+40*mm-cx)<20)&&(Math.abs(py[11+nn]+10-cy)<10)){
                        wd[mm+nn*3] ++;
                        if(wd[mm+nn*3] > 9)wd[mm+nn*3] = 9;
                     }
                     if((Math.abs(px[11+nn]+20+40*mm-cx)<20)&&(Math.abs(py[11+nn]+30-cy)<10)){
                        wd[mm+nn*3] --;
                        if(wd[mm+nn*3] < 0)wd[mm+nn*3] = 0;
                     }
                  }
               }
               for(int k1 = 0;k1 < 3;k1 ++)wn[k1] = 100 * wd[0+k1*3] + 10 * wd[1+k1*3] + wd[2+k1*3];
               sv1 = s1 ; sv2 = s2 ;
               if(wn[0] < 2*wn[1]){
                  ev2 = -0.1 ; ms = 1;
               }else if(wn[0] == 2*wn[1]){
                  ev2 = 0 ; ms = 1;
               }else{
                  ev2 = 0.1 ; ms = 1;
               }
               if(wn[0]+wn[1] < wn[2]){
                  ev1 = -0.1 ; ms = 1;
               }else if(wn[0]+wn[1] == wn[2]){
                  ev1 = 0 ; ms = 1;
               }else{
                  ev1 = 0.1 ; ms = 1;
               }
               repaint();
            }
         } 
      );

      addMouseMotionListener(
         new MouseMotionAdapter(){
            public void mouseMoved(MouseEvent e){
               mx = e.getX() ; my = e.getY() ;
               if(Math.abs(px[11]+60-mx)<60){
                  if(Math.abs(py[11]+10-my)<10){
                     sw = 1;
                  }else if(Math.abs(py[11]+30-my)<10){
                     sw = 2;
                  }else{
                     sw = 0;
                  }
               }else if(Math.abs(px[12]+60-mx)<60){
                  if(Math.abs(py[12]+10-my)<10){
                     sw = 1;
                  }else if(Math.abs(py[12]+30-my)<10){
                     sw = 2;
                  }else{
                     sw = 0;
                  }
               }else if(Math.abs(px[13]+60-mx)<60){
                  if(Math.abs(py[13]+10-my)<10){
                     sw = 1;
                  }else if(Math.abs(py[13]+30-my)<10){
                     sw = 2;
                  }else{
                     sw = 0;
                  }
               }else{
                  sw = 0;
               }
               repaint();
            }
         }
      );
   }

   public void paint(Graphics g){
      og.setColor(Color.white);
      og.fillRect(0,0,600,380);
      px[0] = 330                             ; py[0] = 40                              ;
      px[1] = px[0]                           ; py[1] = py[0] + 40                      ;
      px[2] = px[1] - (int)(160*Math.cos(s1)) ; py[2] = py[1] + (int)(160*Math.sin(s1)) ;
      px[3] = px[1] + (int)(160*Math.cos(s1)) ; py[3] = py[1] - (int)(160*Math.sin(s1)) ;
      px[4] = px[2]                           ; py[4] = py[2] + 40                      ;
      px[5] = px[4] - (int)(80*Math.cos(s2))  ; py[5] = py[4] + (int)(80*Math.sin(s2))  ;
      px[6] = px[4] + (int)(160*Math.cos(s2)) ; py[6] = py[4] - (int)(160*Math.sin(s2)) ;
      px[7] = px[4] + (int)(80*Math.cos(s2))  ; py[7] = py[4] - (int)(80*Math.sin(s2))  ;
      px[8] = px[5]                           ; py[8] = py[5] + 40                      ;
      px[9] = px[6]                           ; py[9] = py[6] + 40                      ;
      px[10] = px[3]                          ; py[10] = py[3] + 80                     ;
      px[11] = px[8] - 60                     ; py[11] = py[8]                          ;
      px[12] = px[9] - 60                     ; py[12] = py[9]                          ;
      px[13] = px[10] - 60                    ; py[13] = py[10]                         ;
      og.setColor(new Color(184,134,11));
      og.drawLine(px[0],py[0],px[1],py[1]);
      og.drawLine(px[0]+1,py[0],px[1]+1,py[1]);
      og.drawLine(px[2],py[2],px[3],py[3]);
      og.drawLine(px[2],py[2]-1,px[3],py[3]-1);
      og.drawLine(px[2],py[2],px[4],py[4]);
      og.drawLine(px[2]+1,py[2],px[4]+1,py[4]);
      og.drawLine(px[5],py[5],px[6],py[6]);
      og.drawLine(px[5],py[5]+1,px[6],py[6]+1);
      og.drawLine(px[5],py[5],px[8],py[8]);
      og.drawLine(px[5]+1,py[5],px[8]+1,py[8]);
      og.drawLine(px[6],py[6],px[9],py[9]);
      og.drawLine(px[6]+1,py[6],px[9]+1,py[9]);
      og.drawLine(px[3],py[3],px[10],py[10]);
      og.drawLine(px[3]+1,py[3],px[10]+1,py[10]);
      og.drawRoundRect(px[11],py[11],120,40,5,5);
      og.drawRoundRect(px[12],py[12],120,40,5,5);
      og.drawRoundRect(px[13],py[13],120,40,5,5);
      og.setColor(new Color(0,0,128));
      og.drawRoundRect(px[11]-2,py[11]-2,124,44,7,7);
      og.drawRoundRect(px[12]-2,py[12]-2,124,44,7,7);
      og.drawRoundRect(px[13]-2,py[13]-2,124,44,7,7);
      for(int d1 = 0;d1 < 11;d1 ++)og.fillOval(px[d1]-3,py[d1]-3,7,7);
      for(int d2 = 0;d2 < 9;d2 ++)cs[d2] = 0;
      for(int d3 = 0;d3 < 9;d3 ++){
         if(wd[d3] != 0)cs[wd[d3]-1] ++;
      }
      og.setColor(new Color(135,206,235));
      og.fill3DRect(40,20,90,30,true);
      og.setColor(Color.black);
      og.setFont(new Font("",Font.BOLD,30));
      og.drawString("reset",46,45);
      og.setFont(new Font("",Font.BOLD,42));
      for(int d4 = 0;d4 < 9;d4 ++){
         if(wd[d4] == 0){
            og.setColor(Color.lightGray);
         }else if(cs[wd[d4]-1] == 1){
            og.setColor(Color.blue);
         }else {
            og.setColor(Color.red);
         }
         og.drawString(""+wd[d4],px[d4/3+11]+(d4%3)*40+10,py[d4/3+11]+38);
      }
      og.setFont(new Font("",Font.BOLD,10));
      if(sw == 1){
         og.setColor(new Color(0,0,139));
         og.fillArc(mx-25,my-46,40,40,255,30);
         og.setColor(Color.black);
         og.drawString("up",mx-10,my);
      }else if(sw == 2){
         og.setColor(new Color(0,0,139));
         og.fillArc(mx-25,my,40,40,75,30);
         og.setColor(Color.black);
         og.drawString("down",mx-17,my);
      }
      cd = 1;
      for(int cc = 0;cc < 9;cc ++)cd = cd * cs[cc];
      if((s1 == 0)&&(s2 == 0)&&(cd == 1)){
         og.setColor(Color.black);
         og.setFont(new Font("",Font.BOLD,80));
         og.drawString("clear !!",205,144);
         og.setColor(Color.red);
         og.setFont(new Font("",Font.BOLD,80));
         og.drawString("clear !!",200,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{
            if(ms == 1){
               if(sv1 < ev1){
                  s1 = s1 + 0.01;
                  if(s1 > ev1){
                     s1 = ev1;
                  }
               }else if(sv1 > ev1){
                  s1 = s1 - 0.01;
                  if(s1 < ev1){
                     s1 = ev1;
                  }
               }
               if(sv2 < ev2){
                  s2 = s2 + 0.01;
                  if(s2 > ev2){
                     s2 = ev2;
                  }
               }else if(sv2 > ev2){
                  s2 = s2 - 0.01;
                  if(s2 < ev2){
                     s2 = ev2;
                  }
               }
               if((s1 == ev1)&&(s2 == ev2))ms = 0;
            }
            Thread.sleep(30);
         }
         catch (InterruptedException e){
         }
         repaint();
      }
   }

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