




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、數(shù)據(jù)結構課程設計走迷宮 學號: 姓名: 日期:6月16日一、題目說明.分別用以下算法實現(xiàn)。并設計圖形用戶界面提供迷宮大小、入口及出口位置和初始狀態(tài)等,演示走迷宮的過程和結果。 1.遞歸算法。 2.使用棧作為輔助結構。 3.使用隊列作為輔助結構。二、總體設計方案以及細節(jié)設計為實現(xiàn)上述程序功能,主要使用的JAVA AWT和JAVA SWING包import java.awt.*;import javax.swing.*;import hartech.ui.*;3. 本程序包含四個模塊:1) 主程序模塊:package mg;import java.awt.*;import javax.swing.
2、*;/* * <p>Title: maze Global class</p> * * <p>Description: </p> * * <p>Date: 2006-08-31 </p> */public class Main / _reset 變量用于reset時用static int rows = 12, cols = 14;static int speed_reset = 50, speed = speed_reset;static JToggleButton buttons;static Walking walkin
3、g;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,
4、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, t
5、rue, 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, t
6、rue, 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) /啟動新線程
7、,創(chuàng)建一個窗口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
8、, 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);setBri
9、cks();/ 用于清楚已標記上的數(shù)字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("");/清除按鈕的數(shù)字,設置名字為空buttonsij.setForeground(null);UI.jLabel_state.setText(" Move now?");/ 去掉全部磚public static
10、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?");/ 重畫按鈕圖,根據(jù)rows、colspublic static JPanel d
11、rawButtons() 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(tru
12、e);return UI.jPanel_map;/ 根據(jù)brick設置按鈕障礙public static void setBricks() for (int i = 0; i < rows; i+) for (int j = 0; j < cols; j+) buttonsij.setSelected(brickij);/ 根據(jù)現(xiàn)在按鈕情況設置brick數(shù)組,用于move()內前面public static void readBricks() for (int i = 0; i < rows; i+) for (int j = 0; j < cols; j+) bric
13、kij = buttonsij.isSelected();/ 開始走public static void move() if (walking != null) walking.timer.stop();clean();readBricks();/readToFile();walking = new Walking(brick);/* / 用于把繪制好地圖數(shù)據(jù)寫入文件 public static void readToFile() String out = "" for (int i = 0; i < rows; i+) out += "" for
14、 (int j = 0; j < cols; j+) if (brickij) out += "true," else out += "false," out += ",rn" hartech.JFile.stringToFile(out, "E:/dest.txt"); */ 復制二維數(shù)組public static boolean copyBoolean(boolean in) int row = in.length, col = in0.length;boolean out = new booleanro
15、wcol;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.*;/* * <p>Title: maze Global class</p> * * <p>Description: </p> * * <p>Date: 2006-08-31 </p> */public class Main /
16、 _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,
17、 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,
18、 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, tru
19、e, 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, t
20、rue, false, true, true, true, true, true, true,true, false, true, true, ;static JFrame jFrame;static UI ui;public static void main(String args) /啟動新線程,創(chuàng)建一個窗口javax.swing.SwingUtilities.invokeLater(new Runnable() public void run() J.setLookAndFeel("Metal");jFrame = new JFrame("is there
21、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 v
22、oid reset() if (walking != null) walking.timer.stop();clean();brick = copyBoolean(brick_reset);speed = speed_reset;UI.jSlider.setValue(speed);setBricks();/ 用于清楚已標記上的數(shù)字public static void clean() if (walking != null) walking.timer.stop();for (int i = 0; i < rows; i+) for (int j = 0; j < cols; j+
23、) buttonsij.setText("");/清除按鈕的數(shù)字,設置名字為空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("")
24、;buttonsij.setForeground(null);buttonsij.setSelected(true);UI.jLabel_state.setText(" Move now?");/ 重畫按鈕圖,根據(jù)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;
25、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;/ 根據(jù)brick設置按鈕障礙public static void setBricks() for (int i = 0; i < rows; i+) for (int j = 0; j < cols; j+) buttonsij.setSel
26、ected(brickij);/ 根據(jù)現(xiàn)在按鈕情況設置brick數(shù)組,用于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 W
27、alking(brick);/* / 用于把繪制好地圖數(shù)據(jù)寫入文件 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
28、, "E:/dest.txt"); */ 復制二維數(shù)組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模塊實現(xiàn)整個控制面板內組件的布局管理;3)Walking模塊實現(xiàn)走迷宮的算法;4)Applete模塊設置控制
29、面板。三、詳細設計1UI模塊package mg;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;/* * <p>Title: maze's MainUI </p> * * <p>Description: </p> * * <p>Date: 2006-08-31 </p> */public class UI extends JPanel private static final lon
30、g 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(),
31、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
32、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時間,當用戶滑動桿時速度會改變);/為各個按鈕添加監(jiān)視器jButton_move = new JButton("Move!");jButton_
33、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"
34、;);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();
35、/ 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.createHorizo
36、ntalGlue();/從左到右設置按鈕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;/監(jiān)視器接口static class ActionListener_button implements ActionListener public void actionPerformed(
37、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 harte
38、ch.kids.maze;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;/* * <p>Title: maze's MainUI </p> * * <p>Description: </p> * * <p>Date: 2006-08-31 </p> */public class UI extends JPanel private static final long serialVers
39、ionUID = 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
40、.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,
41、 5);/滑桿的大小jSlider.setBackground(new Color(208, 220, 255);jSlider.addChangeListener(new ChangeListener() public void stateChanged(ChangeEvent e) Main.speed = (JSlider) e.getSource().getValue();/處理changeEvent時間,當用戶滑動桿時速度會改變);/為各個按鈕添加監(jiān)視器jButton_move = new JButton("Move!");jButton_move.addActi
42、onListener(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_b
43、lank.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_
44、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();/
45、從左到右設置按鈕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;/監(jiān)視器接口static class ActionListener_button implements ActionListener public void actionPerformed(ActionEvent
46、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;impo
47、rt 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("走迷宮"
48、;);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 e
49、xtends 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();/ add
50、jPanel.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
51、 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
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 洗車卡合同協(xié)議書
- 供貨合同和解協(xié)議書
- 租車合同協(xié)議書正規(guī)
- 買賣水果合同協(xié)議書
- 司機合同協(xié)議書責任
- 空調收購合同協(xié)議書
- 寄養(yǎng)保姆合同協(xié)議書
- 家具加盟合同協(xié)議書
- 買賣機器合同協(xié)議書
- 加盟項目合同協(xié)議書
- 2024年中國移動IT技術開發(fā)及運營管理通道考試題庫(含答案)
- 2022年深圳市南山區(qū)教育系統(tǒng)招聘公辦幼兒園副園長考試真題
- 鋰電池出租合同范本
- 咽喉癌病歷書寫
- DB63T 2187-2023 丹巴腮扁葉蜂監(jiān)測技術規(guī)程
- 基坑降水計算-潛水完整井-非完整井
- 幼兒園安全教育課件:《嘴巴里的小精靈》
- 幼兒園大班8的加法公開課
- 第一章-波動方程
- 工程機械設備綜合保險附加操作人員責任保險-條款
- 愛心與教育讀后感1
評論
0/150
提交評論