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 ) ; } }