import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class labyrinth extends Applet implements Runnable{
int td[][] = {{0,1,1,1,0,0},{1,0,1,0,1,1},{1,1,0,1,1,0},{1,0,1,0,1,1},{0,1,1,1,0,0},{0,1,0,1,0,0}};
int rn = 0,rs,kl,cs,fg = 0;
int pn[] = new int[4];
int px;
Image sky;
Button re = new Button(" reset ");
Thread th = null;
Image os;
Graphics og;
public void init(){
setLayout(new BorderLayout());
Panel pan = new Panel();
pan.setLayout(new FlowLayout());
pan.add(re);
add("South",pan);
os = createImage(510,190);
og = os.getGraphics();
setBackground(Color.white);
sky = getImage(getDocumentBase(),"Picture/sky.gif");
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
if(cs == -20){
fg = 1;
}else{
if(rs == 2){
px = (e.getX()-135)/120;
}else if(rs == 3){
px = (e.getX()-75)/120;
}else if(rs == 4){
px = (e.getX()-15)/120;
}
td[rn][pn[px]] = -1 * td[rn][pn[px]];
td[pn[px]][rn] = -1 * td[pn[px]][rn];
rn = pn[px];
}
repaint();
}
}
);
re.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
rn = 0;
fg = 0;
for(int s1 = 0;s1 < 6;s1 ++){
for(int s2 = 0;s2 < 6;s2 ++){
td[s2][s1] = td[s2][s1] * td[s2][s1];
}
}
repaint();
}
});
}
public void paint(Graphics g){
og.setColor(Color.white);
og.fillRect(0,0,510,190);
for(int cc = 0;cc < 255;cc ++){
og.setColor(new Color(255-cc/2,255-cc/2,255-cc/2));
og.drawLine(254-cc,0,254-cc,190);
og.drawLine(255+cc,0,255+cc,190);
}
cs = 0;
for(int s1 = 0;s1 < 6;s1 ++){
for(int s2 = 0;s2 < 6;s2 ++){
cs = cs + td[s2][s1];
}
}
if(fg == 0){
if(cs == -20){
door(210,30,-1);
}else{
rs = 0;
for(int tt = 0;tt < 6;tt ++)rs = rs + td[rn][tt] * td[rn][tt];
kl = 0;
if(rs == 2){
for(int dn = 0;dn < 6;dn ++){
if(td[rn][dn] != 0){
door(120 * kl + 150,30,dn);
pn[kl] = dn;
kl ++;
}
}
}else if(rs == 3){
for(int dn = 0;dn < 6;dn ++){
if(td[rn][dn] != 0){
door(120 * kl + 90,30,dn);
pn[kl] = dn;
kl ++;
}
}
}else if(rs == 4){
for(int dn = 0;dn < 6;dn ++){
if(td[rn][dn] != 0){
door(120 * kl + 30,30,dn);
pn[kl] = dn;
kl ++;
}
}
}
}
}else{
og.drawImage(sky,210,30,90,120,this);
og.setColor(Color.black);
og.drawRect(210,30,90,120);
}
g.drawImage(os,0,0,this);
}
public void door(int dx,int dy,int nn){
og.setColor(new Color(192,99,71));
og.fillRoundRect(dx,dy,90,120,10,10);
og.setColor(Color.black);
og.drawRoundRect(dx,dy,90,120,10,10);
og.setColor(new Color(250,235,215));
og.fillRoundRect(dx+10,dy+10,70,45,10,10);
og.fillRoundRect(dx+10,dy+65,70,45,10,10);
og.setColor(Color.black);
og.drawRoundRect(dx+10,dy+10,70,45,10,10);
og.drawRoundRect(dx+10,dy+65,70,45,10,10);
og.setColor(new Color(192,192,192));
og.fillOval(dx+76,dy+54,12,12);
og.setColor(Color.black);
og.drawOval(dx+76,dy+54,12,12);
og.setColor(Color.blue);
og.setFont(new Font("",Font.PLAIN,30));
if(nn == -1){
og.drawString("Exit",dx+20,dy+45);
}else{
og.drawString(""+(nn+1),dx+37,dy+45);
}
}
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 ) ;
}
}
