如图:
寻找路径关键代码:堆栈实现非递归实现的最佳路径算法。
package maze;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class PathFinder
{
private final Log log = LogFactory.getLog(getClass());
private maze.GameMap map=null;
private int[][] array=new int[8][8];;
public final static int LOAD_PATH=50;
public final static int div_BEGAIN=100;
public PathFinder(GameMap map)
{
this.map=map;
//copy地图数据到自己的数组中去
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
array[i][j]=map.arr[i][j];
}
}
}
/**
* 从起点出发递归涂颜色给能够到达的通道填上数值,以100为基数。
* 比如如果被填上107就说明距离起点7最短可以到达。
* @param x
* @param y
* @param div
*/
public void render(int x,int y,int div)
{
System.out.println(x+"__"+y+"__"+div);
log.info("渲染坐标"+x+"__"+y+"__"+"层次"+div);
//如果填到终点回退。
if(x==7&&y==7)
{
array[y][x]=div;
return;
}
//没有越界就填值
if(x>=0&&y>=0&&x<=map.arr.length-1&&y<=map.arr.length-1&&array[y][x]!=map.BLOCK)
{
array[y][x]=div;
}
// down
if(y+1<=map.arr.length-1&&array[y+1][x]!=map.BLOCK)
{
if(array[y+1][x]>(div+1)||array[y+1][x]<100)
render(x,y+1,div+1);
}
//left
if(x-1>=0&&array[y][x-1]!=map.BLOCK)
{
if(array[y][x-1]>(div+1)||array[y][x-1]<100)
render(x-1,y,div+1);
}
//right
if(x+1<=map.arr.length-1&&array[y][x+1]!=map.BLOCK)
{
if(array[y][x+1]>(div+1)||array[y][x+1]<100)
render(x+1,y,div+1);
}
//up
if(y-1>=0&&array[y-1][x]!=map.BLOCK)
{
if(array[y-1][x]>(div+1)||array[y-1][x]<100)
render(x,y-1,div+1);
}
}
/***
* 从终点出发寻找到起点的路径,非递归实现,以堆栈作为数据结构。
* @return
*/
public List<Point> FindPath()
{
render(0, 0, this.div_BEGAIN);
Stack<Point> stack=new Stack<Point>();
List<Point> list=new ArrayList<Point>();
stack.add(new Point(7,7));
while(!stack.empty())
{
Point p=stack.pop();
int value=this.array[p.getY()][p.getX()];
//left
if(p.getX()-1>=0&&array[p.getY()][p.getX()-1]==(value-1))
{
stack.push(new Point(p.getX()-1,p.getY()));
list.add(new Point(p.getX()-1,p.getY()));
}
//right
if(p.getX()+1<map.arr.length&&array[p.getY()][p.getX()+1]==(value-1))
{
stack.push(new Point(p.getX()+1,p.getY()));
list.add(new Point(p.getX()+1,p.getY()));
}
//up
if(p.getY()-1>=0&&array[p.getY()-1][p.getX()]==(value-1))
{
stack.push(new Point(p.getX(),p.getY()-1));
list.add(new Point(p.getX(),p.getY()-1));
}
//down
if(p.getY()+1<map.arr.length&&array[p.getY()+1][p.getX()]==(value-1))
{
stack.push(new Point(p.getX(),p.getY()+1));
list.add(new Point(p.getX(),p.getY()+1));
}
}
return list;
}
}
实习期间写的小程序,没别的意思,只是不想把代码放到发霉,欢迎拍砖。
代码在附近里面。自行加个日志jar包就可以运行。
- 大小: 44.1 KB
分享到:
相关推荐
在本项目"数据结构课设-老鼠走迷宫游戏-java-swing"中,开发者通过Java Swing构建了一个基于数据结构的游戏,让玩家控制一只老鼠在迷宫中寻找出路,同时还要避开猫的追捕并收集道具。这个项目展示了如何将编程理论与...
迷宫游戏的核心算法是设计和生成迷宫以及解决路径查找问题。这通常涉及数据结构,如二维数组或链表,来表示迷宫的墙壁和空地。生成迷宫的方法可能包括深度优先搜索(DFS)或广度优先搜索(BFS),而解决路径问题则...
在编程领域,设计一个“老鼠走迷宫程序”是一个经典的算法问题,通常涉及到路径搜索、图论和数据结构等核心概念。这样的程序可以帮助我们理解如何让计算机模拟智能决策过程,解决实际生活中的寻路问题。下面,我们将...
用swing制作简单的迷宫小游戏,200多行代码,空格键可以显示路径
Java课程设计基于Java Swing的老鼠迷宫小游戏源代码
**基于SWING的可视化迷宫算法** 在计算机科学领域,数据结构和算法是核心课程,而迷宫算法作为其中的一部分,常被用来教授基础的路径寻找和问题解决策略。本项目利用Java的SWING库来实现一个可视化的迷宫求解器,...
标签"java_swing_mvc mvc_java_swing swing_mvc swing_mvc_de"进一步强调了主题,涵盖了Java Swing与MVC模式的结合,以及可能涉及的解构(decomposition)过程,这是将MVC模式应用到代码中的关键步骤。 在压缩包的...
用Java swing写的魔板小游戏.zip用Java swing写的魔板小游戏.zip 用Java swing写的魔板小游戏.zip用Java swing写的魔板小游戏.zip 用Java swing写的魔板小游戏.zip用Java swing写的魔板小游戏.zip 用Java swing写的...
java的课程作业,用swing写一个小游戏.zipjava的课程作业,用swing写一个小游戏.zip java的课程作业,用swing写一个小游戏.zipjava的课程作业,用swing写一个小游戏.zip java的课程作业,用swing写一个小游戏.zip...
4. **游戏逻辑与算法**:实现走迷宫的核心算法是关键,可以采用深度优先搜索(DFS)或广度优先搜索(BFS)等路径查找算法。玩家在迷宫中移动,需要检测当前位置是否合法,以及如何找到下一个可移动的位置。 5. **数据...
Swing MVC(Model-View-Controller)是一种设计模式,它被广泛应用于图形用户界面(GUI)开发,包括Java Swing框架。在Swing中,MVC模式帮助开发者将应用程序的逻辑分解为三个相互独立的部分,从而提高代码的可读性...
Java Swing MVC 使用详解 在Java编程领域,Swing是一个用于构建桌面应用程序的图形用户界面(GUI)工具包,它是Java Foundation Classes(JFC)的一部分。而Model-View-Controller(MVC)是一种软件设计模式,它有...
【Java 走迷宫】是一款使用Java编程语言开发的小型游戏,它具有图形用户界面(GUI),允许玩家通过键盘操作来控制角色在迷宫中寻找出路。这个游戏展示了Java在图形化编程和算法设计方面的应用。 一、Java GUI编程...
在本项目中,开发者利用Java Swing库创建了一个桌面小游戏,同时融入了多种设计模式,包括MVC(模型-视图-控制器)、Facade(门面模式)、Builder(建造者模式)、策略模式以及责任链模式。这些设计模式的运用使得...
游戏中可能使用了Java的图形用户界面(GUI)库,如JavaFX或Swing,来创建交互式的迷宫地图。同时,Java的面向对象特性使得代码结构清晰,易于维护,适合开发这样的游戏项目。 此外,游戏的可玩性不仅在于自动求解,...
在Swing中,MVC模式被巧妙地融入到各个组件中,以实现组件的功能和可定制性。 **模型(Model)** 模型是应用程序的核心,负责处理数据和业务逻辑。在Swing中,JTable、JList等组件有自己的模型类,如...
迷宫问题是一种经典的计算机科学问题,涉及到路径搜索和算法设计。在本项目中,我们将使用Java Swing作为图形用户界面(GUI)工具包,来实现一个可视化的迷宫求解器。Java Swing是Java Foundation Classes(JFC)的...
Java Swing组件写的游戏客户端Java Swing组件写的游戏客户端 Java Swing组件写的游戏客户端Java Swing组件写的游戏客户端 Java Swing组件写的游戏客户端Java Swing组件写的游戏客户端 Java Swing组件写的游戏客户端...