📄 mazeframe.java
字号:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextPane;
import javax.swing.JToolBar;
import javax.swing.border.BevelBorder;
public class MazeFrame extends JFrame implements Runnable{
private JComboBox comboBox_1;
private JComboBox comboBox;
public Maze maze;
public String[] mazestr;
public Stack pass = new Stack();
public MazePanel panel;
public JTextPane textPane;
public JButton ClearButton;
public JButton StartButton;
public long time=500;
static MazeFrame frame = new MazeFrame();
/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
try {
frame.setVisible(true);
frame.panel.init();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the frame
*/
public MazeFrame() {
super();
setResizable(false);
setTitle("走迷宫");
setBounds(100, 100, 600, 580);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); //获取屏幕分辨率
setLocation((screenSize.width - getWidth()) / 2, (screenSize.height - getHeight()) / 2); //使窗口居中
final JToolBar toolBar = new JToolBar();
getContentPane().add(toolBar, BorderLayout.NORTH);
ClearButton = new JButton();
ClearButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
panel.clear();
textPane.setText("堆栈内容:");
StartButton.setEnabled(true);
}
});
ClearButton.setText("清空");
toolBar.add(ClearButton);
StartButton = new JButton();
StartButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Thread thread = new Thread(frame);
thread.start();
}
});
StartButton.setText("开始");
toolBar.add(StartButton);
final JLabel label = new JLabel();
label.setText("运行速度:");
toolBar.add(label);
comboBox = new JComboBox();
comboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
switch(comboBox.getSelectedIndex()){
case 0 : time=100;break;
case 1 : time=500;break;
case 2 : time=1000;break;
}
}
});
comboBox.setModel(new DefaultComboBoxModel(new String[] {"快速", "中速", "慢速"}));
comboBox.setMaximumSize(new Dimension(60, 25));
comboBox.setSelectedIndex(1);
toolBar.add(comboBox);
final JLabel label_1 = new JLabel();
label_1.setText("迷宫:");
toolBar.add(label_1);
comboBox_1 = new JComboBox();
comboBox_1.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
switch(comboBox_1.getSelectedIndex()){
case 0 : {
mazestr = new String[]{"1111111111","1001000101","1001000101","1000011001","1011100001","1000100001","1010001001","1011101101","1100000001","1111111111"};
break;
}
case 1 : {
mazestr = new String[]{"1111111111","1010010001","1010010101","1000010101","1011100101","1000101101","1011001001","1011101101","1000001001","1111111111"};
break;
}
case 2 : {
mazestr = new String[]{"1111111111","1001000101","1001000101","1000011001","1011100001","1000100001","1010001001","1011101111","1100000101","1111111111"};
break;
}
}
maze = new Maze(mazestr);
panel.setMaze(maze);
textPane.setText("堆栈内容:");
StartButton.setEnabled(true);
}
});
comboBox_1.setModel(new DefaultComboBoxModel(new String[] {"1", "2", "3"}));
comboBox_1.setMaximumSize(new Dimension(60, 25));
toolBar.add(comboBox_1);
mazestr = new String[]{"1111111111","1001000101","1001000101","1000011001","1011100001","1000100001","1010001001","1011101101","1100000001","1111111111"};
maze = new Maze(mazestr);
panel = new MazePanel(maze);
panel.setPreferredSize(new Dimension(510, 510));
panel.setMinimumSize(new Dimension(510, 510));
panel.setMaximumSize(new Dimension(510, 510));
panel.setBorder(new BevelBorder(BevelBorder.LOWERED));
getContentPane().add(panel, BorderLayout.CENTER);
textPane = new JTextPane();
textPane.setBorder(new BevelBorder(BevelBorder.LOWERED));
textPane.setEditable(false);
textPane.setFont(new Font("", Font.PLAIN, 16));
textPane.setText("堆栈内容:");
getContentPane().add(textPane, BorderLayout.EAST);
//
}
public void run(){
pass.Clear();
maze.reset();
ClearButton.setEnabled(false);
StartButton.setEnabled(false);
comboBox_1.setEnabled(false);
Posetion pos = new Posetion(1,1);
maze.FoodPrint(pos.x, pos.y);
panel.visit(pos.x, pos.y);
//pass.Push(pos);
textPane.setText("堆栈内容:\n"+pass.toString());
try {
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
while(true){
if(pos.x == 8 && pos.y == 8){
pass.Push(pos);
textPane.setText("堆栈内容:\n"+pass.toString());
JOptionPane.showMessageDialog(null, "完成迷宫", "完成",JOptionPane.INFORMATION_MESSAGE);
break;
}
else if(!(maze.GetElement(pos.x+1, pos.y).iswall||maze.GetElement(pos.x+1, pos.y).visited)){
pass.Push(pos);
pos = new Posetion(pos.x+1,pos.y);
maze.FoodPrint(pos.x, pos.y);
panel.visit(pos.x, pos.y);
}
else if(!(maze.GetElement(pos.x, pos.y+1).iswall||maze.GetElement(pos.x, pos.y+1).visited)){
pass.Push(pos);
pos = new Posetion(pos.x,pos.y+1);
maze.FoodPrint(pos.x, pos.y);
panel.visit(pos.x, pos.y);
}
else if(!(maze.GetElement(pos.x-1, pos.y).iswall||maze.GetElement(pos.x-1, pos.y).visited)){
pass.Push(pos);
pos = new Posetion(pos.x-1,pos.y);
maze.FoodPrint(pos.x, pos.y);
panel.visit(pos.x, pos.y);
}
else if(!(maze.GetElement(pos.x, pos.y-1).iswall||maze.GetElement(pos.x, pos.y-1).visited)){
pass.Push(pos);
pos = new Posetion(pos.x,pos.y-1);
maze.FoodPrint(pos.x, pos.y);
panel.visit(pos.x, pos.y);
}
else{
panel.unvisit(pos.x, pos.y);
if(pass.isEmpty()){
JOptionPane.showMessageDialog(null, "此迷宫不能走出", "警告",JOptionPane.WARNING_MESSAGE);
break;
}
else{
pos = pass.Pop();
}
}
textPane.setText("堆栈内容:\n"+pass.toString());
try {
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
ClearButton.setEnabled(true);
comboBox_1.setEnabled(true);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -