数据结构课程设计java求解迷宫,回溯法,A算法(3)

2019-01-18 22:11

? main(String srgd[])方法是程序运行的入口方法。

3.2.3 代码(Dialog.java)

package maze;

import java.awt.*; import java.awt.event.*; import javax.swing.*; /** * 启动窗口 * */

@SuppressWarnings(\)

public class Dialog extends JDialog {

private JTextField tf1=new JTextField(\,10); private JTextField tf2=new JTextField(\,10); private JButton b=new JButton(\生成迷宫\); public static void main(String srgd[]){ }

public Dialog(){

setTitle(\课程设计--求解迷宫\); setLayout(new BorderLayout());

JPanel p=new JPanel(new GridLayout(4,1)); FlowLayout flowLayout=new FlowLayout(); flowLayout.setAlignment(FlowLayout.LEFT); flowLayout.setHgap(10);

FlowLayout flowLayout1=new FlowLayout(); flowLayout1.setAlignment(FlowLayout.RIGHT); JPanel p1=new JPanel(flowLayout); JPanel p2=new JPanel(flowLayout); JPanel p3=new JPanel(); JPanel p4=new JPanel();

JPanel p5=new JPanel(flowLayout1);

p1.add(new JLabel(\行数: \)); p1.add(tf1);

p2.add(new JLabel(\列数: \));

11

try{ }

new Dialog();

Thread.sleep(300); e.printStackTrace(); }catch(Exception e){

}

}

p2.add(tf2);

p1.setBackground(new Color(226,244,255)); p2.setBackground(new Color(226,244,255)); p3.setBackground(new Color(226,244,255)); p4.setBackground(new Color(226,244,255));

p.add(p3); p.add(p1); p.add(p2); p.add(p4);

p5.add(b);

p5.setBackground(new Color(196,227,248));

add(new JLabel(new ImageIcon(\)),BorderLayout.NORTH); add(p,BorderLayout.CENTER); add(p5,BorderLayout.SOUTH); setSize(345, 250); setLocation(400, 100); setVisible(true);

b.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){ }

new MazeGUI(Integer.parseInt(tf1.getText()), setVisible(false);

Integer.parseInt(tf2.getText()));

});

addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){ }

System.exit(0);

});

3.3 Maze.java

3.3.1 效果图

Maze类绘制的墙、通路、路径、起点和终点的效果图如图3所示。

12

图3 墙、通路、路径、起点和终点

3.3.2 UML图

Maze类创建的对象是MazeGUI类和Rollback类最重要的成员之一,代表迷宫。标明Maze类的主要成员变量、成员方法的UMl图如图4所示。

图4 Maze类的UML图

以下是UML图中有关数据和方法的详细说明。 1) 成员变量

? mazeMap是int类型的二维数组,数组的元素的值表示迷宫对应位置的内容。若元素的

值为0表示迷宫对应位置可通过,即为通路;若元素的值为1表示迷宫对应位置为墙;若元素的值为2表示迷宫对应位置为已经走过的足迹;若元素的值为3,表示迷宫对应位置是从栈中弹出的点,并且不能再次通过;若元素的值为4,表示迷宫对应位置为起点,保证起点不可通过。

? begin和end是Position类创建的对象,其存储了起点和终点在迷宫图形界面上的坐

标信息。

? drawPos是Position类创建的对象,在迷宫图形界面上表现为一个方框,起到定位的

作用,其存储了在设置起点、终点、障碍在迷宫图形界面的位置时当前的坐标信息。 ? wallPic、roadPic、goPic、beginPic和endPic是Image类创建的对象,其内容分别

为墙、通路、路径、起点和终点的图片。

? row和col是int类型的变量,其值分别表示迷宫数组的行数和列数。 2) 成员方法

13

? Maze(int row,int col)是Maze类的构造方法,通过调用setMaze方法来创建maze对

象,其参数row,col是从MazeGUI类中传来的参数。 ? setMaze(int row,int col)方法,maze对象可调用该方法完成迷宫数组的初始化操作:

创建指定行数和列数的迷宫数组,将迷宫图形界面外围位置对应迷宫数组的元素的值设为1,将其余元素的值设为0。

? isPass(Position p)方法,maze对象可调用该方法判断传入的参数p点周围的四个方

向是否能通过,并返回一个整型数。根据p点坐标,确定该点在迷宫数组中的元素位置,然后再根据该位置四个方向上相邻位置元素的值判断该p点周围的四个方向是否能通过。若元素的值为0表示可以通过。对于返回值,若返回-1,表示p点四周没有通路(包括从栈中弹出的点);若返回0,表示p点东方向有通路;若返回1,表示p点南方向有通路;若返回2,表示p点西方向有通路;若返回3,表示p点北方向有通路。 ? mark(Position p,int m)方法,maze对象可调用该方法将传入的参数p点在迷宫数组

的对应位置的元素设为m。

? draw(Graphics g)方法,maze对象可调用该方法根据迷宫数组元素的值来绘制墙、通

路、路径图像和用于在迷宫图形界面定位的方框,此外该方法还根据begin和end中存储的坐标信息来绘制对应位置的起点和终点图像。

? setBegin(int x,int y)和setEnd(int x,int y)方法,maze对象可调用该方法根据传

入的参数x,y来创建Position类的对象begin和end。

3.3.3 代码(Maze.java)

package maze;

import java.awt.*; import javax.swing.*; /** * 迷宫参数 * */

public class Maze {

int[][] mazeMap;//地图数据 Position begin;//起始坐标

Position end;//结束坐标

Position drawPos=new Position(1,1);

Image wallPic=new ImageIcon(\).getImage(); Image roadPic=new ImageIcon(\).getImage(); Image a=new ImageIcon(\).getImage(); Image goPic=new ImageIcon(\).getImage(); Image endPic=new ImageIcon(\).getImage(); Image beginPic=new ImageIcon(\).getImage(); int row=0,col=0;

public Maze(int row,int col){

this.row=row;

14

}

this.col=col;

mazeMap=new int[row][col]; for(int i=0;i

for(int j=0;j

if(i==0||j==0||j==col-1||i==row-1){//迷宫最外层设为墙 this.mazeMap[i][j]=1; }else{ }

this.mazeMap[i][j]=0;

public Maze(){ }

public void mark(Position p,int m){//标记位置已走过

this.mazeMap[p.y][p.x]=m; }

public void draw(Graphics g){//绘制地图图片 for(int i=0;i

15

}

for(int j=0;j

if(begin!=null&&i==begin.y&&j==begin.x){//起点 g.drawImage(beginPic,j*50, 24+i*50, 50, 50,null); }else if(end!=null&&i==end.y&&j==end.x){//终点 g.drawImage(endPic,j*50, 24+i*50, 50, 50,null); }else if(this.mazeMap[i][j] == 1){//墙壁 g.drawImage(wallPic,j*50, 24+i*50, 50, 50,null); }else if(this.mazeMap[i][j] == 2){//已走过的路径 g.drawImage(goPic,j*50, 24+i*50, 50, 50,null); }else if(this.mazeMap[i][j] == 3){//已走过的路径,消除脚印 g.drawImage(roadPic,j*50, 24+i*50, 50, 50,null); }else if(this.mazeMap[i][j] == 5){//A*方法路径 g.drawImage(a,j*50, 24+i*50, 50, 50,null); }

else{//通道 g.drawImage(roadPic,j*50, 24+i*50, 50, 50,null); }

g.drawRect(drawPos.x*50, 24+drawPos.y*50, 50, 50);


数据结构课程设计java求解迷宫,回溯法,A算法(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:监理周报16

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: