数据结构课程设计迷宫算法的实现-JAVA.doc_第1页
数据结构课程设计迷宫算法的实现-JAVA.doc_第2页
数据结构课程设计迷宫算法的实现-JAVA.doc_第3页
数据结构课程设计迷宫算法的实现-JAVA.doc_第4页
数据结构课程设计迷宫算法的实现-JAVA.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计走迷宫 学号: 姓名: 日期:6月16日一、题目说明.分别用以下算法实现。并设计图形用户界面提供迷宫大小、入口及出口位置和初始状态等,演示走迷宫的过程和结果。 1.递归算法。 2.使用栈作为辅助结构。 3.使用队列作为辅助结构。二、总体设计方案以及细节设计为实现上述程序功能,主要使用的JAVA AWT和JAVA SWING包import java.awt.*;import javax.swing.*;import hartech.ui.*;3. 本程序包含四个模块:1) 主程序模块:package mg;import java.awt.*;import javax.swing.*;/* * Title: maze Global class * * Description: * * Date: 2006-08-31 */public class Main / _reset 变量用于reset时用static int rows = 12, cols = 14;static int speed_reset = 50, speed = speed_reset;static JToggleButton buttons;static Walking walking;static boolean brick, brick_reset = true, true, true, true, true, false, true, true, true, true,true, true, true, true, , true, false, false, false, true, false, true, true, true, true,false, false, false, true, , true, false, true, false, true, false, false, false, false, true,true, false, true, true, , true, false, true, false, true, false, true, true, true, false,true, false, true, false, , true, true, true, false, false, false, true, false, true, false,true, false, true, true, , true, false, true, true, true, true, true, false, true, false,true, false, false, true, , true, false, true, true, true, true, true, false, true, false,true, false, true, true, , true, false, false, false, false, false, true, true, true, false,true, false, true, false, , true, false, true, true, true, false, false, false, false, false,true, false, true, true, , true, false, true, false, true, false, true, true, true, true,true, false, false, true, , true, false, true, false, true, false, true, false, false, false,false, false, true, true, , true, true, true, false, true, true, true, true, true, true,true, false, true, true, ;static JFrame jFrame;static UI ui;public static void main(String args) /启动新线程,创建一个窗口javax.swing.SwingUtilities.invokeLater(new Runnable() public void run() /J.setLookAndFeel(Metal);jFrame = new JFrame(is there any way to go? Maze - );/建立一个Swing窗体jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/单击关闭图标后,程序退出并关闭/ addMain.ui = new UI();jFrame.add(ui, BorderLayout.CENTER);jFrame.setSize(700, 400);/J.goCenter(jFrame);Main.drawButtons();Main.reset();jFrame.setVisible(true););/ 用于重置到软件开始public static void reset() if (walking != null) walking.timer.stop();clean();brick = copyBoolean(brick_reset);speed = speed_reset;UI.jSlider.setValue(speed);setBricks();/ 用于清楚已标记上的数字public static void clean() if (walking != null) walking.timer.stop();for (int i = 0; i rows; i+) for (int j = 0; j cols; j+) buttonsij.setText();/清除按钮的数字,设置名字为空buttonsij.setForeground(null);UI.jLabel_state.setText( Move now?);/ 去掉全部砖public static void blank() if (walking != null) walking.timer.stop();for (int i = 0; i rows; i+) for (int j = 0; j cols; j+) buttonsij.setText();buttonsij.setForeground(null);buttonsij.setSelected(true);UI.jLabel_state.setText( Move now?);/ 重画按钮图,根据rows、colspublic static JPanel drawButtons() buttons = new JToggleButtonrowscols;UI.jPanel_map = new JPanel(new GridLayout(rows, cols);for (int i = 0; i rows; i+) for (int j = 0; j cols; j+) buttonsij = new JToggleButton();UI.jPanel_map.add(buttonsij);Main.ui.add(UI.jPanel_map, BorderLayout.CENTER);Main.ui.setVisible(true);return UI.jPanel_map;/ 根据brick设置按钮障碍public static void setBricks() for (int i = 0; i rows; i+) for (int j = 0; j cols; j+) buttonsij.setSelected(brickij);/ 根据现在按钮情况设置brick数组,用于move()内前面public static void readBricks() for (int i = 0; i rows; i+) for (int j = 0; j cols; j+) brickij = buttonsij.isSelected();/ 开始走public static void move() if (walking != null) walking.timer.stop();clean();readBricks();/readToFile();walking = new Walking(brick);/* / 用于把绘制好地图数据写入文件 public static void readToFile() String out = ; for (int i = 0; i rows; i+) out += ; for (int j = 0; j cols; j+) if (brickij) out += true,; else out += false,; out += ,rn; hartech.JFile.stringToFile(out, E:/dest.txt); */ 复制二维数组public static boolean copyBoolean(boolean in) int row = in.length, col = in0.length;boolean out = new booleanrowcol;for (int i = 0; i row; i+) for (int j = 0; j col; j+) outij = inij;return out;import java.awt.*;import javax.swing.*;import hartech.ui.*;/* * Title: maze Global class * * Description: * * Date: 2006-08-31 */public class Main / _reset 变量用于reset时用static int rows = 12, cols = 14;static int speed_reset = 50, speed = speed_reset;static JToggleButton buttons;static Walking walking;static boolean brick, brick_reset = true, true, true, true, true, false, true, true, true, true,true, true, true, true, , true, false, false, false, true, false, true, true, true, true,false, false, false, true, , true, false, true, false, true, false, false, false, false, true,true, false, true, true, , true, false, true, false, true, false, true, true, true, false,true, false, true, false, , true, true, true, false, false, false, true, false, true, false,true, false, true, true, , true, false, true, true, true, true, true, false, true, false,true, false, false, true, , true, false, true, true, true, true, true, false, true, false,true, false, true, true, , true, false, false, false, false, false, true, true, true, false,true, false, true, false, , true, false, true, true, true, false, false, false, false, false,true, false, true, true, , true, false, true, false, true, false, true, true, true, true,true, false, false, true, , true, false, true, false, true, false, true, false, false, false,false, false, true, true, , true, true, true, false, true, true, true, true, true, true,true, false, true, true, ;static JFrame jFrame;static UI ui;public static void main(String args) /启动新线程,创建一个窗口javax.swing.SwingUtilities.invokeLater(new Runnable() public void run() J.setLookAndFeel(Metal);jFrame = new JFrame(is there any way to go? Maze - );/建立一个Swing窗体jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/单击关闭图标后,程序退出并关闭/ addMain.ui = new UI();jFrame.add(ui, BorderLayout.CENTER);jFrame.setSize(700, 400);J.goCenter(jFrame);Main.drawButtons();Main.reset();jFrame.setVisible(true););/ 用于重置到软件开始public static void reset() if (walking != null) walking.timer.stop();clean();brick = copyBoolean(brick_reset);speed = speed_reset;UI.jSlider.setValue(speed);setBricks();/ 用于清楚已标记上的数字public static void clean() if (walking != null) walking.timer.stop();for (int i = 0; i rows; i+) for (int j = 0; j cols; j+) buttonsij.setText();/清除按钮的数字,设置名字为空buttonsij.setForeground(null);UI.jLabel_state.setText( Move now?);/ 去掉全部砖public static void blank() if (walking != null) walking.timer.stop();for (int i = 0; i rows; i+) for (int j = 0; j cols; j+) buttonsij.setText();buttonsij.setForeground(null);buttonsij.setSelected(true);UI.jLabel_state.setText( Move now?);/ 重画按钮图,根据rows、colspublic static JPanel drawButtons() buttons = new JToggleButtonrowscols;UI.jPanel_map = new JPanel(new GridLayout(rows, cols);for (int i = 0; i rows; i+) for (int j = 0; j cols; j+) buttonsij = new JToggleButton();UI.jPanel_map.add(buttonsij);Main.ui.add(UI.jPanel_map, BorderLayout.CENTER);Main.ui.setVisible(true);return UI.jPanel_map;/ 根据brick设置按钮障碍public static void setBricks() for (int i = 0; i rows; i+) for (int j = 0; j cols; j+) buttonsij.setSelected(brickij);/ 根据现在按钮情况设置brick数组,用于move()内前面public static void readBricks() for (int i = 0; i rows; i+) for (int j = 0; j cols; j+) brickij = buttonsij.isSelected();/ 开始走public static void move() if (walking != null) walking.timer.stop();clean();readBricks();/readToFile();walking = new Walking(brick);/* / 用于把绘制好地图数据写入文件 public static void readToFile() String out = ; for (int i = 0; i rows; i+) out += ; for (int j = 0; j cols; j+) if (brickij) out += true,; else out += false,; out += ,rn; hartech.JFile.stringToFile(out, E:/dest.txt); */ 复制二维数组public static boolean copyBoolean(boolean in) int row = in.length, col = in0.length;boolean out = new booleanrowcol;for (int i = 0; i row; i+) for (int j = 0; j col; j+) outij = inij;return out;2) UI模块实现整个控制面板内组件的布局管理;3)Walking模块实现走迷宫的算法;4)Applete模块设置控制面板。三、详细设计1UI模块package mg;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;/* * Title: mazes MainUI * * Description: * * Date: 2006-08-31 */public class UI extends JPanel private static final long serialVersionUID = 5924032800440919028L;static JPanel jPanel_state, jPanel_map, jPanel_control;static JLabel jLabel_state;static JButton jButton_move, jButton_clean, jButton_blank, jButton_reset;static JSlider jSlider;/添加面板,向面板里添加各个组件public UI() super(new BorderLayout();/ addadd(jPanel_control(), BorderLayout.SOUTH);/布局管理器,从左到右设置按钮public static JPanel jPanel_control() jLabel_state = new JLabel( Move now?);jLabel_state.setHorizontalTextPosition(JLabel.LEFT);/将Move now标签添加/在面板的左下角jSlider = new JSlider(JSlider.HORIZONTAL, 5, 400, Main.speed);/建立一个水平方向的滑竿jSlider.setPreferredSize(new Dimension(5, 5);/滑杆的大小jSlider.setBackground(new Color(208, 220, 255);jSlider.addChangeListener(new ChangeListener() public void stateChanged(ChangeEvent e) Main.speed = (JSlider) e.getSource().getValue();/处理changeEvent时间,当用户滑动杆时速度会改变);/为各个按钮添加监视器jButton_move = new JButton(Move!);jButton_move.addActionListener(new ActionListener_button();jButton_move.setActionCommand(move);jButton_clean = new JButton(Clean);jButton_clean.addActionListener(new ActionListener_button();jButton_clean.setActionCommand(clean);jButton_blank = new JButton(Blank);jButton_blank.addActionListener(new ActionListener_button();jButton_blank.setActionCommand(blank);jButton_reset = new JButton(Reset);jButton_reset.addActionListener(new ActionListener_button();jButton_reset.setActionCommand(reset);jPanel_control = new JPanel();/ Option: X_AXIS Y_AXIS LINE_AXIS PAGE_AXISjPanel_control.setLayout(new BoxLayout(jPanel_control, BoxLayout.X_AXIS);/jPanel_control = new JPanel(new FlowLayout(FlowLayout.RIGHT);jPanel_control.setBackground(new Color(208, 220, 255);jPanel_control.add(jLabel_state);jPanel_control.add(Box.createHorizontalGlue();/从左到右设置按钮jPanel_control.add(jSlider);jPanel_control.add(jButton_move);jPanel_control.add(jButton_clean);jPanel_control.add(jButton_blank);jPanel_control.add(jButton_reset);return jPanel_control;/监视器接口static class ActionListener_button implements ActionListener public void actionPerformed(ActionEvent e) if (e.getActionCommand().equals(move) Main.move(); else if (e.getActionCommand().equals(clean) Main.clean(); else if (e.getActionCommand().equals(blank) Main.blank(); else if (e.getActionCommand().equals(reset) Main.reset();package hartech.kids.maze;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;/* * Title: mazes MainUI * * Description: * * Date: 2006-08-31 */public class UI extends JPanel private static final long serialVersionUID = 5924032800440919028L;static JPanel jPanel_state, jPanel_map, jPanel_control;static JLabel jLabel_state;static JButton jButton_move, jButton_clean, jButton_blank, jButton_reset;static JSlider jSlider;/添加面板,向面板里添加各个组件public UI() super(new BorderLayout();/ addadd(jPanel_control(), BorderLayout.SOUTH);/布局管理器,从左到右设置按钮public static JPanel jPanel_control() jLabel_state = new JLabel( Move now?);jLabel_state.setHorizontalTextPosition(JLabel.LEFT);/将Move now标签添加/在面板的左下角jSlider = new JSlider(JSlider.HORIZONTAL, 5, 400, Main.speed);/建立一个水平方向的滑竿jSlider.setPreferredSize(new Dimension(5, 5);/滑杆的大小jSlider.setBackground(new Color(208, 220, 255);jSlider.addChangeListener(new ChangeListener() public void stateChanged(ChangeEvent e) Main.speed = (JSlider) e.getSource().getValue();/处理changeEvent时间,当用户滑动杆时速度会改变);/为各个按钮添加监视器jButton_move = new JButton(Move!);jButton_move.addActionListener(new ActionListener_button();jButton_move.setActionCommand(move);jButton_clean = new JButton(Clean);jButton_clean.addActionListener(new ActionListener_button();jButton_clean.setActionCommand(clean);jButton_blank = new JButton(Blank);jButton_blank.addActionListener(new ActionListener_button();jButton_blank.setActionCommand(blank);jButton_reset = new JButton(Reset);jButton_reset.addActionListener(new ActionListener_button();jButton_reset.setActionCommand(reset);jPanel_control = new JPanel();/ Option: X_AXIS Y_AXIS LINE_AXIS PAGE_AXISjPanel_control.setLayout(new BoxLayout(jPanel_control, BoxLayout.X_AXIS);/jPanel_control = new JPanel(new FlowLayout(FlowLayout.RIGHT);jPanel_control.setBackground(new Color(208, 220, 255);jPanel_control.add(jLabel_state);jPanel_control.add(Box.createHorizontalGlue();/从左到右设置按钮jPanel_control.add(jSlider);jPanel_control.add(jButton_move);jPanel_control.add(jButton_clean);jPanel_control.add(jButton_blank);jPanel_control.add(jButton_reset);return jPanel_control;/监视器接口static class ActionListener_button implements ActionListener public void actionPerformed(ActionEvent e) if (e.getActionCommand().equals(move) Main.move(); else if (e.getActionCommand().equals(clean) Main.clean(); else if (e.getActionCommand().equals(blank) Main.blank(); else if (e.getActionCommand().equals(reset) Main.reset();2Applete模块package mg;import java.awt.BorderLayout;import java.awt.Color;import javax.swing.*;public class Applet extends JApplet private static final long serialVersionUID = -5507838717556718924L;public void init() JPanel jPanel = new JPanel(new BorderLayout();jPanel.setBorder(BorderFactory.createTitledBorder(走迷宫);jPanel.setBackground(Color.WHITE);Main.ui = new UI();/ addjPanel.add(Main.ui);add(jPanel, BorderLayout.CENTER);setSize(700, 400);Main.drawButtons();Main.reset();setVisible(true);package hartech.kids.maze;import java.awt.BorderLayout;import java.awt.Color;import javax.swing.*;public class Applet extends JApplet private static final long serialVersionUID = -5507838717556718924L;public void init() JPanel jPanel = new JPanel(new BorderLayout();jPanel.setBorder(BorderFactory.createTitledBorder(is there any way to go? Maze - );jPanel.setBackground(Color.WHITE);Main.ui = new UI();/ addjPanel.add(Main.ui);add(jPanel, BorderLayout.CENTER);setSize(700, 400);Main.drawButtons();Main.reset();setVisible(true);3. Walking模块package mg;import java.awt.*;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.util.Stack;import javax.swing.Timer;public class Walking private int rows;private int cols;private Dimension goal;SuppressWarnings(unused)private Dimension begin;/ false 为障碍或已走过private boolean map;private Stack stack, stack_hasWalk, stack_route;private boolean hasFound = false;private int count = 1;Timer timer = new Timer(Main.speed, new ActionListener_Timer();/ 初始化,输入地图 NxMpublic Walking(boolean map) this(map, new Dimension(0, 0), new Dimension(map.length -

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论