import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.lang.Math;
public class passage extends Applet implements Runnable{
int opdb[][] = {{4,0,3},{0,5,0},{2,0,1}};
int tcdb[][] = {{1,0,2},{0,5,0},{3,0,4}};
int opd[][] = new int[3][3],tcd[][] = new int[3][3];
Color cd[] = new Color[6];
int sw = 0,sc = 0,fg = 0;
int mx,my,mcx,mcy;
Button rep;
Thread th = null;
Image os;
Graphics og;
public void init(){
setBackground(Color.white);
os = createImage(220,240);
og = os.getGraphics();
cd[0] = new Color(220,220,220);
cd[1] = new Color(255, 0, 0);
cd[2] = new Color( 0, 0,255);
cd[3] = new Color( 0,255, 0);
cd[4] = new Color(255,255, 0);
cd[5] = new Color( 0,255,255);
for(int px = 0;px < 3;px ++){
for(int py = 0;py < 3;py ++){
opd[py][px] = opdb[py][px];
tcd[py][px] = tcdb[py][px];
}
}
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 px = 0;px < 3;px ++){
for(int py = 0;py < 3;py ++){
opd[py][px] = opdb[py][px];
tcd[py][px] = tcdb[py][px];
}
}
repaint();
}
});
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
mx = (e.getX() - 20) / 60;
my = (e.getY() - 20) / 60;
if(opd[my][mx] != 0){
sw = 1 ; sc = opd[my][mx] ; opd[my][mx] = 0;
repaint();
}
}
public void mouseReleased(MouseEvent e){
sw = 0 ; opd[my][mx] = sc ; sc = 0 ;
repaint();
}
}
);
addMouseMotionListener(
new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
mcx = (e.getX() - 20) / 60;
mcy = (e.getY() - 20) / 60;
if((mx != mcx) || (my != mcy)){
if(opd[mcy][mcx] == 0){
if((Math.abs(mx - mcx) + Math.abs(my - mcy)) < 2){
if((mx == 0) && (my == 0) && (mcy == 1)){fg = 1;}
if((mx == 0) && (my == 1) && (mcy == 0)){fg = 1;}
if((mx == 0) && (my == 1) && (mcx == 1)){fg = 1;}
if((mx == 1) && (my == 1) && (mcx == 0)){fg = 1;}
if((mx == 1) && (my == 1) && (mcx == 2)){fg = 1;}
if((mx == 2) && (my == 1) && (mcx == 1)){fg = 1;}
if((mx == 2) && (my == 1) && (mcy == 2)){fg = 1;}
if((mx == 2) && (my == 2) && (mcy == 1)){fg = 1;}
if(fg == 0){
mx = mcx ; my =mcy;
repaint();
}else{
fg = 0;
}
}
}
}
}
}
);
}
public void paint(Graphics g){
og.setColor(Color.white);
og.fillRect(0,0,220,240);
for(int ix = 0;ix < 3;ix ++){
for(int iy = 0;iy < 3;iy ++){
og.setColor(cd[tcd[iy][ix]]);
og.fill3DRect(ix * 60 + 20,iy * 60 + 20,59,59,true);
og.setColor(cd[opd[iy][ix]]);
og.fillOval(ix * 60 + 30,iy * 60 + 30,40,40);
if(opd[iy][ix] > 0){
og.setColor(Color.lightGray);
og.drawOval(ix * 60 + 30,iy * 60 + 30,40,40);
}
}
}
og.setColor(Color.darkGray);
og.fill3DRect(0 * 60 + 20,1 * 60 + 17,61,6,true);
og.fill3DRect(1 * 60 + 17,1 * 60 + 19,6,61,true);
og.fill3DRect(2 * 60 + 17,1 * 60 + 19,6,61,true);
og.fill3DRect(2 * 60 + 19,2 * 60 + 17,61,6,true);
if(sw == 1){
og.setColor(cd[sc]);
og.fillOval(mx * 60 + 30,my * 60 + 30,40,40);
og.setColor(Color.lightGray);
og.drawOval(mx * 60 + 30,my * 60 + 30,40,40);
}
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(20);
}
catch (InterruptedException e){ }
}
}
public void update( Graphics g )
{
paint( g ) ;
}
}
