import java.awt.*;
import java.awt.List;
import java.awt.event.*;
import java.util.*;
import javax.swing.JOptionPane;
//驱动类
public class tanchishe
{
public static void main(String[] args)
{
new MainFrame("迷宫破解").addWindowListener(new WindowAdapter() //添加窗口关闭处理函数
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}});
}
}
//路径对象
class Rect{
int wx;
int wy;
int NowValue;
int PointerTo;
public Rect(int wx,int wy){
this.wx = wx;
this.wy = wy;
}
public int GetX() {
//获得x坐标
return wx;
}
public int Gety() {
//获得y坐标
return wy;
}
public int GetNowValue() {
//获得当前路径下的数组中的值
return NowValue;
}
public void SetNowValue(int NowValue) {
//5代表已走过的路径
//4代表无法走通的路径
//3代表当表终点
this.NowValue = NowValue;
}
public int GetPointerTo() {
//获得此路径的方向
return PointerTo;
}
public void SetPointerTo(int PointerTo) {
//设置当前路径的方向值
this.PointerTo = PointerTo;
}
public String toString() {
//输出路径各个属性
return ("wx is:" + wx + "wy is:" + wy + "NowValue is:"
+ NowValue + "PointerTo is:" + PointerTo);
}
}
//此线程负责操作栈中的数据
/*
class stack_thread implements Runnable
{
@Override
public void run() {
// TODO Auto-generated method stub
}
}
***/
//游戏界面
class MainFrame extends Frame
{
private static final long serialVersionUID = 1L;
Map map = new Map(2); //默认进入游戏的第二关
//绘制游戏界面
//开始,暂停,选关标签,输入关卡的文本编辑框,游戏画面
Button a = new Button("开始");
Button b = new Button("暂停");
Button c = new Button("退出");
Button l = new Button("进入");
Label ll = new Label("关卡");
TextField t = new TextField(15);
List lst = new List(4, false);
List lll = new List(4);
Rectangle r = new Rectangle(60,10);
Init_GameArea init = new Init_GameArea(this,t,map); //初始化游戏界面
Paint st = new Paint() ; //实现了绘图的线程
Thread Painter = new Thread(st); //继承了runnable接口
boolean flag = true;
boolean gameflag; //判断游戏是否结束的标志
int Nowx; //探索迷宫出口的起始x坐标
int Nowy; //探索迷宫出口的起始y坐标
Stack<Rect> stack = new Stack<Rect>(); //保存路径对象的栈
MainFrame(String s){
//窗口的布局
super(s);
setLayout(new FlowLayout());
Panel p = new Panel();
p.setLayout(new FlowLayout());
a.setBounds(r);
b.setBounds(r);
c.setBounds(r);
l.setBounds(r);
ll.setBounds(r);
lst.setBounds(r);
p.add(ll);
p.add(t);
p.add(l);
p.add(lst);
p.add(a);
p.add(b);
p.add(c);
lst.add("第一关",1);
lst.add("第二关",2);
lst.add("第三关",3);
lst.add("第四关",4);
add(p);
lst.addItemListener(new ItemMonitor());
lst.addActionListener(new ItemActionMonitor());
a.addActionListener(new Monitor());
b.addActionListener(new Monitor());
c.addActionListener(new Monitor());
l.addActionListener(new Monitor());
a.setForeground(Color.PINK);
b.setForeground(Color.PINK);
c.setForeground(Color.PINK);
l.setForeground(Color.CYAN);
ll.setBackground(Color.CYAN);
setBounds(200,200,670,678);
this.setBackground(Color.BLUE);
this.setBackground(new Color(41,36,33));
setVisible(true);
setResizable(true);
this.setFocusableWindowState(true);
}
//画图函数,每次数据的改变都依赖于此函数的重新绘制
public void paint(Graphics g){
Color tempColor; //颜色对象
tempColor = g.getColor(); //获得画笔的颜色
g.setColor(Color.green); //设置画笔的颜色
g.drawRect(20, 130, 627, 533); //画游戏的边框
tempColor = g.getColor();
g.setColor(Color.blue); //恢复画笔的初始颜色
for(int i = 0 ; i < 11 ; i++)
for(int j = 0 ; j < 13 ; j++)
{
//如果是墙体
if(map.readMap(i, j) == 1)
{
g.setColor(Color.red);
g.fillRect(23+j*48,133+i*48,47,47);
}
//符合条件的下一个位置作为当前路径
if(map.readMap(i , j) == 2)
{
g.setColor(Color.yellow);
g.fillRect(23+j*48,133+i*48,47,47);
Nowx = 23+j*48; //修改当前路径的x值
Nowy = 133+i*48; //修改当前路径的y值
stack.push(new Rect(Nowx,Nowy)); //路径入栈