这是一个 "火炎之纹章" 的简陋游戏Demo(这游戏不知道是否有人玩过,本程序称为Demo亦略显过分。。),主要用来演示,测试寻路算法。核心理念是参考的A星算法。
支持地图编辑,可以在地图上添加,取消障碍物,定制各种地图,以方便测试A星寻路算法。
操作说明:
方向键: 略
键盘S : 当前位置创建一个障碍物(墙)
键盘D : 当前位置创建空地(用来取消障碍物)
键盘T : 当前位置打上一个星形标记,仅此而已
键盘X : 方框移到人物上按X,为选中人物,人物闪烁。然后方框移动到目标位置,再按X,人物开始移动至目标。
其他说明:
1.程序是原生A星算法的实现,如果目标位置不可达,人物不会移动。
2.zip包里是MyEclipse的工程。
1.[代码][Java]代码
public List findPath(Location start,Location dest,int[][] map){
List path = new ArrayList();
openList.add(start);
Location current = null;
do{
current = getLowestFscoreLocation(openList);
//System.out.println(current.toString());
closeList.add(current);
openList.remove(current);
if(closeList.contains(dest)){
break;
}
List adjacentLocations = getWalkableAdjacentLocations(current, map);
for(Location lo : adjacentLocations){
if(closeList.contains(lo)){
continue;
}
if(!openList.contains(lo)){
lo.setMovedSteps(current.getMovedSteps()+1);
lo.setEvalRemainSteps(evalRemainSteps(current,dest));
lo.setTotalEvalSteps(evalRemainSteps(current,dest)+lo.getMovedSteps());
openList.add(lo);
}else{
if(current.getMovedSteps()+1 < lo.getMovedSteps()){
lo.setMovedSteps(current.getMovedSteps()+1 );
lo.setPrevious(current);
}
}
}
}while(!openList.isEmpty());
Location destination = null;
if(closeList.contains(dest)){
destination = current;
path.add(destination);
while(destination.getPrevious() != null){
destination = destination.getPrevious();
path.add(destination);
}
}
return path;
}
2.[文件] fire_emble.zip ~ 43KB 下载(498)
3.[图片] ff.jpg