 |
| 文件: |
Image.rar |
| 大小: |
7KB |
| 下载: |
下载 | |
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.math.*;
import java.awt.event.*;
//窗体
public class migong extends JFrame
{
public migong(String s)
{
super(s);
this.getContentPane().add(new Table(),BorderLayout.CENTER);
}
public static void main(String args[])
{
migong nf=new migong("迷宫");
nf.setSize(370,315);
//使窗体无法改变大小
nf.setResizable(false);
//设置窗体在屏幕的中心
nf.setLocation(200,100);
nf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
nf.setVisible(true);
}
}
//面板
class Table extends JPanel implements ActionListener
{
int way=0; ////路
int wall=1; ///墙
int east=2; ///方向东
int south=3; ///方向南
int west=4; ////方向西
int north=5; ////方向北
int no_way=6; ///没有路
int have_way=7;///有路
boolean end=true;//表示能够走通
static int x=0;
int record_way[]=new int[100];
//int map[][]=new int[15][15];
int map[][]={{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,1,1,1,1,0,0,0,0,1,1,1},
{1,1,0,1,1,1,1,1,0,1,1,0,1,1,1},
{1,1,0,1,1,1,1,1,1,1,1,0,1,1,1},
{1,1,0,0,0,0,0,0,0,0,0,0,1,1,1},
{1,1,1,1,1,0,1,1,1,1,1,0,1,1,1},
{1,1,1,1,1,0,0,1,1,1,0,0,1,1,1},
{1,1,1,1,1,1,0,0,1,1,0,1,1,1,1},
{1,1,1,1,1,1,1,0,1,1,0,1,1,1,1},
{1,1,1,1,0,0,0,0,1,1,0,1,1,1,1},
{1,1,1,1,1,1,1,0,1,1,0,1,1,1,1},
{1,1,1,1,0,1,1,0,1,1,1,1,1,1,1},
{1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
};
//new三个按钮
JButton btnStart=new JButton("Start"); //开始
JButton btnExit=new JButton("Exit"); //退出
static int i;
static int j;
Image imgwall,imgeast,imgsouth,imgwest,imgno_way,imgnorth;
//构造函数
public Table()
{
//空布局
this.setLayout(null);
//设置背景色(雪色)
this.setBackground(new Color(255,250,250));
btnStart.setBounds(270,40,80,20); //开始按钮
btnExit.setBounds(270,80,80,20); //退出按钮
add(btnStart);
btnStart.addActionListener(this);
add(btnExit);
btnExit.addActionListener(this);
String imgwallname="Image/wall.jpg";//
String imgeastname="Image/east.jpg";
String imgsouthname="Image/south.jpg";
String imgwestname="Image/west.jpg";
String imgno_wayname="Image/no_way.jpg";
String imgnorthname="Image/north.jpg";
imgwall=Toolkit.getDefaultToolkit().getImage(imgwallname);
imgeast=Toolkit.getDefaultToolkit().getImage(imgeastname);
imgsouth=Toolkit.getDefaultToolkit().getImage(imgsouthname);
imgwest=Toolkit.getDefaultToolkit().getImage(imgwestname);
imgno_way=Toolkit.getDefaultToolkit().getImage(imgno_wayname);
imgnorth=Toolkit.getDefaultToolkit().getImage(imgnorthname);
//加提示
btnStart.setToolTipText("开始");
btnExit.setToolTipText("退出");
}
//绘画
public void paint(Graphics g)
{
super.paint(g); //必须重写父类的这个方法,否则图形无法消除
g.setColor(Color.pink);
for(i=0;i<15;i++)
{
for(j=0;j<15;j++)
{
switch(map[j][i]) //根据标志画图
{
case 0:
break;
case 1:
g.drawImage(imgwall,10+i*(15+2)+2,15+j*(15+2)+2,this);
break;
case 2:
g.drawImage(imgeast,10+i*(15+2)+2,15+j*(15+2)+2,this);
break;
case 3:
g.drawImage(imgsouth,10+i*(15+2)+2,15+j*(15+2)+2,this);
break;
case 4:
g.drawImage(imgwest,10+i*(15+2)+2,15+j*(15+2)+2,this);
break;
case 5:
g.drawImage(imgnorth,10+i*(15+2)+2,15+j*(15+2)+2,this);
break;
case 6:
g.drawImage(imgno_way,10+i*(15+2)+2,15+j*(15+2)+2,this);
break;
default:break;
}
}
}
}
//定时器的监听事件
public void actionPerformed(ActionEvent e)
{
//如果是开始按钮
if(e.getSource()==btnStart)
{
start();
for(int jj=0;jj<99;jj++) ///打印结果!!
{
System.out.print(record_way[jj]+" ");
System.out.println(record_way[jj++]);
}
}
if (e.getActionCommand()=="Exit") ///退出
{
System.exit(0);
}
}
public void start()
{
go(1,1,east);
}
public int go(int n,int m,int direction) //坐标位置(n,m)
{
int record_noway=0;
int back;
if(n==13&&m==13)
{
end=false;
return have_way;
}
else
{////////////////////////////////////////////////东方向
if(map[n][m+1]==way&&direction!=west&&end)
{
map[n][m+1]=east;
repaint();
back=go(n,m+1,east);
record_noway+=direction(n,m+1,back);
}
else
{
record_noway++;
}
///////////////////////////////////////////南方向
if(map[n+1][m]==way&&direction!=north&&end)
{
map[n+1][m]=south;
repaint();
back=go(n+1,m,south);
record_noway+=direction(n+1,m,back);
}
else
{
record_noway++;
}
////////////////////////////////////////////////////////西方向
if(map[n][m-1]==way&&direction!=east&&end)
{
map[n][m-1]=west;
repaint();
back=go(n,m-1,west);
record_noway+=direction(n,m-1,back);
}
else
{
record_noway++;
}
/////////////////////////////////////////////////////北方向
if(map[n-1][m]==way&&direction!=south&&end)
{
map[n-1][m]=north;
repaint();
back=go(n-1,m,north);
record_noway+=direction(n-1,m,back);
}
else
{
record_noway++;
}
//////////////////////////////////////////////////////////
return record_noway>=3?no_way:have_way;
}
}
public int direction(int n,int m,int back) //
{
if(back==no_way)
{
map[n][m]=no_way;
repaint();
return 1;
}
else
{
record_way[x]=n;
record_way[x+1]=m;
x=x+2;
return -2;///有路与 return record_noway>=3?no_way:have_way;相应
}
}
}