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

public class K_tour extends Applet{

    Image pic,pic1,pic2,pic4,pic5,pic7,pic8,pic10,pic11;
    int kx,ky;
    int px,py;
    int dx,dy;
    int mx,my;
    int rx,ry;
    int cx,cy;
    int md[][]={{1,1,1,1,1,1,1,1,1,1,1,1},
                {1,1,1,1,1,1,1,1,1,1,1,1},
                {1,1,0,0,0,0,0,0,0,0,1,1},
                {1,1,0,0,0,0,0,0,0,0,1,1},
                {1,1,0,0,0,0,0,0,0,0,1,1},
                {1,1,0,0,0,0,0,0,0,0,1,1},
                {1,1,0,0,0,0,0,0,0,0,1,1},
                {1,1,0,0,0,0,0,0,0,0,1,1},
                {1,1,0,0,0,0,0,0,0,0,1,1},
                {1,1,0,0,0,0,0,0,0,0,1,1},
                {1,1,1,1,1,1,1,1,1,1,1,1},
                {1,1,1,1,1,1,1,1,1,1,1,1}};
    int mdc[][]={{1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1}};
    int md1[][]={{1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,-1,0,0,0,0,0,0,0,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1}};
    int md1x = 2 , md1y = 2;
    int md2[][]={{1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,0,0,0,1,1,1,1},
                 {1,1,1,1,-1,0,0,0,1,1,1,1},
                 {1,1,1,1,0,0,0,0,1,1,1,1},
                 {1,1,1,1,1,0,0,0,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1}};
    int md2x = 5 , md2y = 4;
    int md3[][]={{1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,-1,0,0,0,0,0,1,1,1},
                 {1,1,1,0,1,0,0,1,0,1,1,1},
                 {1,1,1,0,0,0,0,0,0,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1}};
    int md3x = 5 , md3y = 3;
    int md4[][]={{1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,0,0,1,1,1,1,1},
                 {1,1,1,1,1,0,0,1,1,1,1,1},
                 {1,1,1,-1,0,0,0,0,0,1,1,1},
                 {1,1,1,0,0,0,0,0,0,1,1,1},
                 {1,1,1,1,1,0,0,1,1,1,1,1},
                 {1,1,1,1,1,0,0,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1}};
    int md4x = 5 , md4y = 3;
    int md5[][]={{1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,1,1,0,1,1,0,1,1,1,1},
                 {1,1,-1,0,0,0,0,0,0,0,1,1},
                 {1,1,1,1,0,1,1,0,1,1,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,1,1,0,1,1,0,1,1,1,1},
                 {1,1,0,0,0,0,0,0,0,0,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1},
                 {1,1,1,1,1,1,1,1,1,1,1,1}};
    int md5x = 4 , md5y = 2;
    Choice sel = new Choice();
    Button rep = new Button("  replay  ");

  public void init(){
   setBackground(Color.white);
   pic1 = getImage(getDocumentBase(),"Picture/k-1.gif");
   pic2 = getImage(getDocumentBase(),"Picture/k-2.gif");
   pic4 = getImage(getDocumentBase(),"Picture/k-4.gif");
   pic5 = getImage(getDocumentBase(),"Picture/k-5.gif");
   pic7 = getImage(getDocumentBase(),"Picture/k-7.gif");
   pic8 = getImage(getDocumentBase(),"Picture/k-8.gif");
   pic10 = getImage(getDocumentBase(),"Picture/k-10.gif");
   pic11 = getImage(getDocumentBase(),"Picture/k-11.gif");
   pic = pic1;
   kx = md1x;
   ky = md1y;
   cx = kx;
   cy = ky;
     for(int i1= 2;i1 < 10;i1 ++){
        for(int i2 = 2;i2 < 10;i2 ++){
           mdc[i1][i2] = md1[i1][i2];
           md[i1][i2] = mdc[i1][i2];
        }
     }
   setLayout(new BorderLayout());
   Panel pan = new Panel();
   pan.setLayout(new FlowLayout());
    sel.addItem("Convex");
    sel.addItem("Eight");
    sel.addItem("Plus");
    sel.addItem("Net");
    sel.addItem("Chess Board");
   pan.add(sel);
   pan.add(rep);
   add("South",pan);
  }

  public void paint(Graphics g){
     g.setColor(Color.black);
     for(int k = 0;k < 9;k ++){
        g.drawLine(20,20+40*k,20+40*8,20+40*k);
        g.drawLine(20+40*k,20,20+40*k,20+40*8);
     }

     for(int i1 = 2;i1 < 10;i1 ++){
        for(int i2 = 2;i2 < 10;i2 ++){
             rx = (i1 - 2) * 40;
             ry = (i2 - 2) * 40;
             if(md[i1][i2] == -1){
                       g.setColor(Color.pink);
                       g.fillRect(rx + 21,ry + 21,39,39);
             }else if(md[i1][i2] == 1){
                       g.setColor(Color.lightGray);
                       g.fillRect(rx + 21,ry + 21,39,39);
             }
        }
     }
   px = (kx - 2) * 40 - 5;
   py = (ky - 2) * 40 - 8;
   g.drawImage(pic,px,py,this);

  }

  public boolean mouseMove(Event e,int x,int y){
    mx = px + 45;
    my = py + 36;
         if((x - mx > 0)&&(y - my < 0)&&(x - mx < my - y))pic = pic1;
    else if((x - mx > 0)&&(y - my < 0)&&(x - mx > my - y))pic = pic2;
    else if((x - mx > 0)&&(y - my > 0)&&(x - mx > y - my))pic = pic4;
    else if((x - mx > 0)&&(y - my > 0)&&(x - mx < y - my))pic = pic5;
    else if((x - mx < 0)&&(y - my > 0)&&(mx - x < y - my))pic = pic7;
    else if((x - mx < 0)&&(y - my > 0)&&(mx - x > y - my))pic = pic8;
    else if((x - mx < 0)&&(y - my < 0)&&(mx - x > my - y))pic = pic10;
    else if((x - mx < 0)&&(y - my < 0)&&(mx - x < my - y))pic = pic11;

    repaint();
    return true;
  }

  public boolean mouseDown(Event e,int x,int y){
     dx = (x - 20) / 40 + 2;
     dy = (y - 20) / 40 + 2;
     if(((dx == kx + 1) && (dy == ky - 2) && (md[dx][dy] == 0)) ||
        ((dx == kx + 2) && (dy == ky - 1) && (md[dx][dy] == 0)) ||
        ((dx == kx + 2) && (dy == ky + 1) && (md[dx][dy] == 0)) ||
        ((dx == kx + 1) && (dy == ky + 2) && (md[dx][dy] == 0)) ||
        ((dx == kx - 1) && (dy == ky + 2) && (md[dx][dy] == 0)) ||
        ((dx == kx - 2) && (dy == ky + 1) && (md[dx][dy] == 0)) ||
        ((dx == kx - 2) && (dy == ky - 1) && (md[dx][dy] == 0)) ||
        ((dx == kx - 1) && (dy == ky - 2) && (md[dx][dy] == 0))){
          kx = dx;
          ky = dy;
          md[dx][dy] = -1;
     }
    repaint();
    return true;
  }

  public boolean action(Event e,Object o){
     if(e.target == sel){
        if(o == "Chess Board"){
          for(int i = 2;i < 10;i ++){
            for(int j = 2;j < 10;j ++){
              md[i][j] = md1[i][j];
              mdc[i][j] = md[i][j];
              kx = md1x;
              ky = md1y;
              cx = kx;
              cy = ky;
            }
          }
        }else if(o == "Convex"){
          for(int i = 2;i < 10;i ++){
            for(int j = 2;j < 10;j ++){
              md[i][j] = md2[i][j];
              mdc[i][j] = md[i][j];
              kx = md2x;
              ky = md2y;
              cx = kx;
              cy = ky;
            }
          }
        }else if(o == "Eight"){
          for(int i = 2;i < 10;i ++){
            for(int j = 2;j < 10;j ++){
              md[i][j] = md3[i][j];
              mdc[i][j] = md[i][j];
              kx = md3x;
              ky = md3y;
              cx = kx;
              cy = ky;
            }
          }
        }else if(o == "Plus"){
          for(int i = 2;i < 10;i ++){
            for(int j = 2;j < 10;j ++){
              md[i][j] = md4[i][j];
              mdc[i][j] = md[i][j];
              kx = md4x;
              ky = md4y;
              cx = kx;
              cy = ky;
            }
          }
        }else if(o == "Net"){
          for(int i = 2;i < 10;i ++){
            for(int j = 2;j < 10;j ++){
              md[i][j] = md5[i][j];
              mdc[i][j] = md[i][j];
              kx = md5x;
              ky = md5y;
              cx = kx;
              cy = ky;
            }
          }
        }
       repaint();
       return true;
      }

     if(e.target == rep){
        for(int i = 2;i < 10;i ++){
          for(int j = 2;j < 10;j ++){
            md[i][j] = mdc[i][j];
          }
        }
      kx = cx;
      ky = cy;
      repaint();
      return true;
     } 
    return false;
  }

}