云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 迷宫算法设计 - 图文

迷宫算法设计 - 图文

  • 62 次阅读
  • 3 次下载
  • 2026/1/9 10:44:11

递给这个线程实例 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();

搜索更多关于: 迷宫算法设计 - 图文 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

递给这个线程实例 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

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com