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

public class t_spin extends Applet implements Runnable{

   Thread th = null;
   Image os;
   Image ar_l,ar_r;
   Graphics og;
   int cR = 78 , cr = 24 , sp = 20 ;
   double tr = 3.141592/6 *0;
   double pi = 3.141592 ;
   int td[] = new int[20]; 
   int dx,dy;
   int px,py;
   int rs;

   public void init(){
      os = createImage(12*cr+2*cR+2*sp,5*cr+2*cR+2*sp);
      og = os.getGraphics();
      setBackground(new Color(230,230,250));
      ar_l = getImage(getDocumentBase(),"Picture/ar5.gif");
      ar_r = getImage(getDocumentBase(),"Picture/ar6.gif");
      for(int in = 0;in < 20;in ++){
         td[in] = in + 1;
      }

      addMouseListener(
         new MouseAdapter(){
            public void mousePressed(MouseEvent e){
               dx = e.getX();
               dy = e.getY();
               if((dx>90)&&(dx<132)&&(dy>50)&&(dy<93)){
                  rs = td[0];
                  for(int ri = 0;ri < 19;ri ++){
                     td[ri] = td[ri+1];
                  }
                  td[19] = rs;
                  repaint();
               }else if((dx>350)&&(dx<392)&&(dy>50)&&(dy<93)){
                  rs = td[19];
                  for(int ri = 0;ri < 19;ri ++){
                     td[19-ri] = td[18-ri];
                  }
                  td[0] = rs;
                  repaint();
               }else if((dx-242)*(dx-242)+(dy-116)*(dy-116) < 9000){
                  th.resume();
               }
            }
         }
      );
   }

   public void paint(Graphics g){
      og.setColor(new Color(230,230,250)); 
      og.fillRect(0,0,12*cr+2*cR+2*sp,5*cr+2*cR+2*sp);
      og.drawImage(ar_l,90,50,this);
      og.drawImage(ar_r,350,50,this);
      og.setColor(Color.black);
      og.setFont(new Font("Century",Font.ITALIC,30));
      og.setColor(new Color(255,255,255));
      og.fillOval(2*cr+cR+sp,sp,8*cr,8*cr);
      for(int dn = 0;dn < 4;dn ++){
         px = 5 * cr + cR + (int)((dn*2-3)*cr*Math.cos(tr)) + sp;
         py = 3 * cr + (int)((dn*2-3)*cr*Math.sin(tr)) + sp;
         for(int cn = 0;cn < 25;cn ++){
            if(td[dn] % 2 == 0){
               og.setColor(new Color(250,cn*10,0));
            }else{
               og.setColor(new Color(0,100+cn*6,0));
            }
            og.drawOval(px+cn,py+cn,2*cr-2*cn,2*cr-2*cn);
         }
         og.setColor(new Color(50,0,150));
         if(td[dn] < 10){
            og.drawString(""+td[dn],px+12,py+32);
         }else{
            og.drawString(""+td[dn],px+4,py+32);
         }
      }
      for(int dn = 0;dn < 6;dn ++){
         px = 10 * cr + cR + (int)((double)cR * Math.cos(dn*pi/5-pi/2)) + sp;
         py = 3 * cr + cR + (int)((double)cR * Math.sin(dn*pi/5-pi/2)) + sp;
         for(int cn = 0;cn < 25;cn ++){
            if(td[dn+4] % 2 == 0){
               og.setColor(new Color(250,cn*10,0));
            }else{
               og.setColor(new Color(0,100+cn*6,0));
            }
            og.drawOval(px+cn,py+cn,2*cr-2*cn,2*cr-2*cn);
         }
         og.setColor(new Color(50,0,150));
         if(td[dn+4] < 10){
            og.drawString(""+td[dn+4],px+12,py+32);
         }else{
            og.drawString(""+td[dn+4],px+4,py+32);
         }
      }
      for(int dn = 0;dn < 4;dn ++){
         px = 8 * cr + cR - dn * 2 * cr + sp;
         py = 3 * cr + 2 * cR + sp;
         for(int cn = 0;cn < 25;cn ++){
            if(td[dn+10] % 2 == 0){
               og.setColor(new Color(250,cn*10,0));
            }else{
               og.setColor(new Color(0,100+cn*6,0));
            }
            og.drawOval(px+cn,py+cn,2*cr-2*cn,2*cr-2*cn);
         }
         og.setColor(new Color(50,0,150));
         if(td[dn+10] < 10){
            og.drawString(""+td[dn+10],px+12,py+32);
         }else{
            og.drawString(""+td[dn+10],px+4,py+32);
         }
      }
      for(int dn = 0;dn < 6;dn ++){
         px = cR + (int)((double)cR * Math.cos(dn*pi/5-3*pi/2)) + sp;
         py = 3 * cr + cR + (int)((double)cR * Math.sin(dn*pi/5-3*pi/2)) + sp;
         for(int cn = 0;cn < 25;cn ++){
            if(td[dn+14] % 2 == 0){
               og.setColor(new Color(250,cn*10,0));
            }else{
               og.setColor(new Color(0,100+cn*6,0));
            }
            og.drawOval(px+cn,py+cn,2*cr-2*cn,2*cr-2*cn);
         }
         og.setColor(new Color(50,0,150));
         if(td[dn+14] < 10){
            og.drawString(""+td[dn+14],px+12,py+32);
         }else{
            og.drawString(""+td[dn+14],px+4,py+32);
         }
      }
      g.drawImage(os,0,0,this);
   }

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

   public void stop(){
      th = null;
   }

   public void run(){
      while (th != null){
         try {
            tr = tr + pi/10;
            if(tr > pi){
               rs = td[0] ; td[0] = td[3] ; td[3] = rs;
               rs = td[1] ; td[1] = td[2] ; td[2] = rs;
               tr = 0;
               th.suspend();
            }                   
            Thread.sleep(30);
         }         
         catch (InterruptedException e){ }
         repaint();
      }
   }

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

}