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

public class E_queen extends Applet implements Runnable{

  int mx,my;
  int px,py;
  int rx,ry;
  int cx,cy;
  int cn[] = {0,0,0,0,0,0,0,0};
  int ce[] = {0,0,0,0,0,0,0,0};
  int cr[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  int cl[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  int td[][] = {{0,0,0,0,0,0,0,0},
                {0,0,0,0,0,0,0,0},
                {0,0,0,0,0,0,0,0},
                {0,0,0,0,0,0,0,0},
                {0,0,0,0,0,0,0,0},
                {0,0,0,0,0,0,0,0},
                {0,0,0,0,0,0,0,0},
                {0,0,0,0,0,0,0,0}};
  int sd = 8;
  int fg = 0;
  Image pic,mp;
  Thread th = null;
  Image os;
  Graphics og;

  public void init(){
        setBackground(Color.white);
        os = createImage(460,380);
        og = os.getGraphics();
        pic = getImage(getDocumentBase(),"Picture/queen.gif");
        addMouseListener(
            new MouseAdapter(){
                 public void mousePressed(MouseEvent e){
                      px = (e.getX() - 20) / 40;
                      py = (e.getY() - 40) / 40;
                      cx = px;
                      cy = py;
                      if((px < 8) && (py < 8)){
                          if(td[py][px] == 1){
                              mp = getImage(getDocumentBase(),"Picture/queen.gif");
                              mx = e.getX() - 20;
                              my = e.getY() - 60;
                              td[py][px] = 0;
                              cn[px] = 0;
                              ce[py] = 0;
                              cr[px + py] = 0;
                              cl[px - py + 7] = 0;
                              fg = 1;
                           }
                       }else if((px > 7) && (sd > 0)){
                              mp = getImage(getDocumentBase(),"Picture/queen.gif");
                              mx = e.getX() - 20;
                              my = e.getY() - 60;
                              sd = sd - 1;
                              fg = 1;
                          }
                       repaint();
                 }
                 public void mouseReleased(MouseEvent e){
                      rx = (e.getX() - 20) / 40;
                      ry = (e.getY() - 40) / 40;
                      if((rx < 8) && (ry < 8)){
                          if((td[ry][rx] == 0) && (cn[rx] == 0) && (ce[ry] == 0) && 
                             (cr[rx + ry] == 0) && (cl[rx - ry + 7] == 0) &&(fg == 1)){
                              td[ry][rx] = 1;
                              cn[rx] = 1;
                              ce[ry] = 1;
                              cr[rx + ry] = 1;
                              cl[rx - ry + 7] = 1;
                              mx = rx * 40 + 20;
                              my = ry * 40;
                              fg = 0;
                          }else{
                            if((cx < 8) && (fg == 1)){
                               td[cy][cx] = 1;
                               cn[cx] = 1;
                               ce[cy] = 1;
                               cr[cx + cy] = 1;
                               cl[cx - cy + 7] = 1;
                               mx = cx * 40 + 20;
                               my = cy * 40;
                               fg = 0;
                            }else if(cx > 7){
                               mx = cx * 40 + 360;
                               my = cy * 40 + 20;
                               mp = getImage(getDocumentBase(),"");
                               sd = sd + 1;
                               fg = 0;
                            }
                          }
                      }else if(rx > 7){
                          mp = getImage(getDocumentBase(),"");
                          sd = sd + 1;
                          fg = 0;
                      }
                      repaint();                     
                 }
            }
        );
        addMouseMotionListener(
            new MouseMotionAdapter(){
                 public void mouseDragged(MouseEvent e){
                    if(fg == 1){
                        mx = e.getX() - 20;
                        my = e.getY() - 60;
                    }
                    repaint();
                 }
            }
        );
  }

  public void paint(Graphics g){
     og.setColor(Color.white); 
     og.fillRect(0,0,460,380);
     og.setColor(Color.black); 

     for(int k = 0;k < 9;k ++){
        og.drawLine(20,40 + 40 * k,20 + 40 * 8,40 + 40 * k);
        og.drawLine(20 + 40 * k,40,20 + 40 * k,40 + 40 * 8);
     }
     for(int x = 0;x < 8;x ++){
        for(int y = 0;y < 8;y ++){
           og.setColor(Color.blue);
           if((cn[x] == 1) || (ce[y] == 1) ||
              (cr[x + y] == 1) || (cl[x - y + 7] == 1))og.fillRect(x * 40 + 22,y * 40 + 42,37,37);
        }
     }
     for(int x = 0;x < 8;x ++){
        for(int y = 0;y < 8;y ++){
           if(td[y][x] == 1)og.drawImage(pic,x * 40 + 20,y * 40,40,80,this);
        }
     }
     for(int n = 0;n < sd;n ++){
          og.drawImage(pic,(n % 2) * 40 + 360,(n / 2) * 80 + 20,40,80,this);
     }
     og.drawImage(mp,mx,my,40,80,this);
     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 ) ;
   }
}