import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class f_maze extends Applet implements Runnable{
Thread th = null;
Image os;
Graphics og;
int td[][][] = new int[5][13][13];
int mx,my,x0,y0,x1,y1;
int wd,sw;
Button mk;
public void init(){
os = createImage(450,450);
og = os.getGraphics();
c_maze();
setLayout(new BorderLayout());
Panel pan = new Panel();
pan.setLayout(new FlowLayout());
pan.add(mk = new Button(" make "));
add("South",pan);
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
x0 = e.getX();
y0 = e.getY();
repaint();
}
}
);
addMouseMotionListener(
new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
x1 = e.getX();
y1 = e.getY();
if((x1-x0) > 15){
if(td[0][my][mx+1] != 1)mx ++;
x0 = x0 + 15;
}else if((x1-x0) < -15){
if(td[0][my][mx-1] != 1)mx --;
x0 = x0 - 15;
}else if((y1-y0) > 15){
if(td[0][my+1][mx] != 1)my ++;
y0 = y0 + 15;
}else if((y1-y0) < -15){
if(td[0][my-1][mx] != 1)my --;
y0 = y0 - 15;
}
repaint();
}
}
);
mk.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
c_maze();;
repaint();
}
});
}
public void paint(Graphics g){
og.setColor(Color.white);
og.fillRect(0,0,450,450);
for(int i1 = 0;i1 < 13;i1 ++){
for(int i2 = 0;i2 < 13;i2 ++){
if(td[1][i2][i1]==1)w_draw(i1*15+20,i2*15+20);
if(td[2][i2][i1]==1)w_draw(i1*15+235,i2*15+20);
if(td[3][i2][i1]==1)w_draw(i1*15+20,i2*15+235);
if(td[4][i2][i1]==1)w_draw(i1*15+235,i2*15+235);
}
}
og.setColor(Color.blue);
og.fillOval(mx*15+20,my*15+20,15,15);
og.fillOval(mx*15+235,my*15+20,15,15);
og.fillOval(mx*15+20,my*15+235,15,15);
og.fillOval(mx*15+235,my*15+235,15,15);
og.setColor(Color.red);
og.setFont(new Font("",Font.BOLD,15));
og.drawString("G",167+20,178+20);
og.drawString("G",167+235,178+20);
og.drawString("G",167+20,178+235);
og.drawString("G",167+235,178+235);
if((mx == 11)&&(my == 11)){
og.setFont(new Font("",Font.BOLD,54));
og.setColor(Color.black);
og.drawString("GOAL !!",152,252);
og.setColor(Color.red);
og.drawString("GOAL !!",150,250);
}
g.drawImage(os,0,0,this);
}
public void c_maze(){
mx = 1 ; my = 1 ;
for(int i1 = 0;i1 < 13;i1 ++){
for(int i2 = 0;i2 < 13;i2 ++){
for(int tn = 0;tn < 5;tn ++){
td[tn][i2][i1] = 0;
}
if((i1%2 == 0)&&(i2%2 == 0))td[0][i2][i1] = 1;
if((i1 == 0)||(i1 == 12)||(i2 == 0)||(i2 == 12)){
for(int tn = 0;tn < 5;tn ++){
td[tn][i2][i1] = 1;
}
}
}
}
for(int m1 = 1;m1 < 6;m1 ++){
wd = (int)(4*Math.random());
switch(wd){
case 0 : td[0][m1*2][2-1] = 1 ; break ;
case 1 : td[0][m1*2-1][2] = 1 ; break ;
case 2 : td[0][m1*2][2+1] = 1 ; break ;
case 3 : td[0][m1*2+1][2] = 1 ; break ;
}
}
for(int mx = 2;mx < 6;mx ++){
for(int my = 1;my < 6;my ++){
sw = 0;
while(sw == 0){
wd = (int)(3*Math.random());
switch(wd){
case 0 : if(td[0][my*2-1][mx*2] != 1){td[0][my*2-1][mx*2] = 1 ; sw = 1 ;} ; break ;
case 1 : if(td[0][my*2][mx*2+1] != 1){td[0][my*2][mx*2+1] = 1 ; sw = 1 ;} ; break ;
case 2 : if(td[0][my*2+1][mx*2] != 1){td[0][my*2+1][mx*2] = 1 ; sw = 1 ;} ; break ;
}
}
}
}
for(int mx = 1;mx < 12;mx ++){
for(int my = 1;my < 12;my ++){
if(td[0][my][mx] == 1){
wd = (int)(4*Math.random());
td[wd+1][my][mx] = 1;
wd = (int)(4*Math.random());
td[wd+1][my][mx] = 1;
}
}
}
}
public void w_draw(int dx,int dy){
og.setColor(new Color(218,165,32));
og.fillRect(dx,dy,15,15);
og.setColor(new Color(139,0,0));
og.drawLine(dx,dy,dx+14,dy);
og.drawLine(dx,dy+7,dx+14,dy+7);
og.drawLine(dx,dy+15,dx+14,dy+15);
og.drawLine(dx+7,dy,dx+7,dy+7);
og.drawLine(dx,dy+7,dx,dy+15);
}
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 ) ;
}
}
