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

public class crush extends Applet implements Runnable{

    int mtd[][] = new int[5][5];
    Button rep;
    Color bg = new Color(30,30,30);
    Color gl = new Color(200,200,200);
    Image img[] = new Image[2];
    int sx = 4,sy = 0;
    int px,py,cn;
    Thread th = null;
    Image os;
    Graphics og;

    public void init(){

        setBackground(Color.white);
        os = createImage(340,360);
        og = os.getGraphics();
        img[0] = getImage(getDocumentBase(),"Picture/knight_g.gif");
        img[1] = getImage(getDocumentBase(),"Picture/knight_s.gif");
        for(int ix = 0;ix < 5;ix ++){
            for(int iy = 0;iy < 5;iy ++){
                mtd[iy][ix] = 2;
            }
        }
        mtd[0][4] = 0 ; mtd[4][0] = 1;

        setLayout(new BorderLayout());
        Panel pan = new Panel();
        pan.setLayout(new FlowLayout());
        pan.add(rep = new Button("  replay  "));
        add("South",pan);
        rep.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                for(int ix = 0;ix < 5;ix ++){
                     for(int iy = 0;iy < 5;iy ++){
                        mtd[iy][ix] = 2;
                     }
                }
                mtd[0][4] = 0 ; mtd[4][0] = 1;
                sx = 4;sy = 0;
                repaint();
            }
        });

        addMouseListener(
            new MouseAdapter(){
                public void mousePressed(MouseEvent e){
                    px = (e.getX() - 20) / 60;
                    py = (e.getY() - 20) / 60;
                    if((Math.abs(sx - px) + Math.abs(sy - py)) == 3){
                        if((sx != px) && (sy  != py)){
                            mtd[sy][sx] = mtd[py][px];
                            mtd[py][px] = 0;
                            repaint(1,px * 60 + 20,py * 60 + 20,60,60);
                            repaint(1,sx * 60 + 20,sy * 60 + 20,60,60);
                            sx = px ; sy = py ;
                        }
                    }
                }
            }
        );

    }

    public void paint(Graphics g){
        og.setColor(Color.white); 
        og.fillRect(0,0,340,360);
        for(int ix = 0;ix < 5;ix ++){
            for(int iy = 0;iy < 5;iy ++){
                og.setColor(bg);
                og.fill3DRect(ix * 60 + 20,iy * 60 + 20,59,59,true);
            }
        }
        og.setColor(gl);
        og.fill3DRect(4 * 60 + 20,0 * 60 + 20,59,59,true);
        og.setColor(Color.black);
        og.drawString("GOAL",4 * 60 + 35,0 * 60 + 55);
        for(int ix = 0;ix < 5;ix ++){
            for(int iy = 0;iy < 5;iy ++){
                if(mtd[iy][ix] == 1){
                    og.drawImage(img[0],ix * 60 + 25,iy * 60 + 25,this);
                }else if(mtd[iy][ix] == 2){
                    og.drawImage(img[1],ix * 60 + 25,iy * 60 + 25,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 ) ;
    }
}