当前位置:首页 > 迷宫算法设计 - 图文
递给这个线程实例 Thread t2 = new Thread(new AThread(), \);
public void paint(Graphics g) {// 调用绘制地图的draw()方法和绘制人物位置的draw()方法 maze.draw(g);
MenuBar menuBar = new MenuBar();
public MazeGUI(int row, int col) {// 初始化窗体
this.setTitle(\算法课程设计-求解迷宫问题\); this.setSize(col * 50, row * 50); this.setLocation(200, 80); this.setResizable(false);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { }
System.exit(0);
}
public MazeGUI() { }
public void update(Graphics g) {// 双缓冲防止屏幕闪烁 if (offScreen == null) {
}
Graphics offg = offScreen.getGraphics(); Color c = offg.getColor(); offg.setColor(Color.BLUE);
offg.fillRect(0, 0, col * 50, row * 50); offg.setColor(c); paint(offg);
g.drawImage(offScreen, 0, 0, null);
offScreen = this.createImage(col * 50, row * 50);
}
rollback.draw(g);
});
this.row = row; this.col = col;
maze = new Maze(row, col);// 构建迷宫参数
rollback = new Rollback(maze, this); this.setVisible(true);
}
Menu fileMenu = new Menu(\文件\); Menu settingMenu = new Menu(\操作\); MenuItem exitItem = new MenuItem(\退出\); MenuItem mapItem = new MenuItem(\刷新地图\);
MenuItem aItem = new MenuItem(\算法寻找最短路径\); MenuItem helpItem = new MenuItem(\帮助\); fileMenu.add(exitItem); settingMenu.add(mapItem); settingMenu.add(aItem); settingMenu.add(helpItem); menuBar.add(fileMenu); menuBar.add(settingMenu); setMenuBar(menuBar); addKeyListener(this);
exitItem.addActionListener(this); mapItem.addActionListener(this); aItem.addActionListener(this); helpItem.addActionListener(this);
private class SolveThread implements Runnable {// 提供一个实现借口 }
public void run() { }
// 作为一个线程的目标对象
Runnable接口的类的实例,
while (!rollback.isOver()) {// 寻路结束后,线程结束 synchronized (obj) { }
}
try { }
if (!rollback.forward()) { }
repaint();
rollback.back(); Thread.sleep(200); e.printStackTrace();
} catch (InterruptedException e) {
private class AThread implements Runnable {// 展示用A*算法求解迷宫过程
的线程 public void run() {
while (!astar.as.isEmpty()) {
synchronized (obj) { }
repaint();
if (astar.as.isEmpty())
JOptionPane.showMessageDialog(null, \找到最短路径最短路try { }
Aposition temp = (Aposition) astar.as.top(); astar.as.pop();
maze.mazeMap[temp.y][temp.x] = 5; rollback.curPos.x = temp.x; rollback.curPos.y = temp.y;
Thread.sleep(200); e.printStackTrace();
} catch (InterruptedException e) {
径!\);
}
public void keyTyped(KeyEvent e) { }
public void keyReleased(KeyEvent e) { }
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_DELETE) {
maze.mark(maze.drawPos, 0); maze.mark(maze.drawPos, 1); if (maze.begin == null) {
JOptionPane.showMessageDialog(null, \起点没有设置\); } else if (maze.end == null) {
JOptionPane.showMessageDialog(null, \终点没有设置\); } else if (t1.getState().equals(Thread.State.NEW)) {// 当没
t1.start();// 启动寻路线程 System.out.print(\);
} else if (e.getKeyCode() == KeyEvent.VK_ENTER) { } else if (e.getKeyCode() == KeyEvent.VK_F9) { }
}
有线程处于运行态时
} else if (t1.getState().equals(Thread.State.TERMINATED)) {//
当该线程处于终止态时
// , // 又点// , // 即重
击了F9
新演示
t1 = new Thread(new SolveThread(), \);// 新rollback.flush();// 刷新
maze.resume();// 恢复迷宫到初始状态 t1.start();
建线程
} else {// 在寻路过程中,如果点击了“F9”按键 System.out.print(\); }
if (maze.drawPos.y + 1 > 0 && maze.drawPos.y + 1 < row - 1)//
// “墙”
rollback.flush();// 清空栈,并把sprite中的curPos对象恢复到初maze.resume();// 恢复迷宫到初始状态
repaint();
试位置
} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
禁止定位方框移动到最外围的 上
} else if (e.getKeyCode() == KeyEvent.VK_HOME) {
maze.setBegin(maze.drawPos.x, maze.drawPos.y);// 起点坐标 rollback.setCurPos(maze.drawPos.x, maze.drawPos.y);// 设置回
maze.drawPos.y = maze.drawPos.y + 1;
} else if (e.getKeyCode() == KeyEvent.VK_UP) {
if (maze.drawPos.y - 1 > 0 && maze.drawPos.y - 1 < row - 1)
maze.drawPos.y = maze.drawPos.y - 1;
} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
if (maze.drawPos.x + 1 > 0 && maze.drawPos.x + 1 < col - 1)
maze.drawPos.x = maze.drawPos.x + 1;
} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
if (maze.drawPos.x - 1 > 0 && maze.drawPos.x - 1 < col - 1)
maze.drawPos.x = maze.drawPos.x - 1;
} else if (e.getKeyCode() == KeyEvent.VK_END) {
maze.setEnd(maze.drawPos.x, maze.drawPos.y);
溯算法中的当前点 rollback.remember(rollback.curPos);
}
}
repaint();
共分享92篇相关文档