⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mazeframe.java

📁 java写的一个用堆栈进行迷宫求解的算法演示
💻 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 + -