A星之地形成本的实现

昨天提交了一点点的改动,是关于地形成本的。

https://git.oschina.net/dubenju/encv

■在AStarConstants.java追加对于地形的定义。

--- a/src/java/astar/AStarConstants.java

+++ b/src/java/astar/AStarConstants.java

@@ -8,10 +8,15 @@ package astar;

* @author DBJ([email protected])

*/

public class AStarConstants {

+            public static int COST_NONE = 0;

/** 正交移动一格的路径分值 */

public static int COST_ORTHOGONAL = 10;

/** 对角线移动一格的路径分值 */

public static int COST_DIAGONAL = 14;

+    public static int COST_GRASS = 12; // 草地

+    public static int COST_HILL = 20; // 丘陵

+    public static int COST_SWAMP = 30; // 沼泽

+    public static int COST_RIVER = 40; // 河流

■在地形类Terrain中,追加对地形的考虑。

--- a/src/java/astar/Terrain.java

+++ b/src/java/astar/Terrain.java

@@ -10,6 +10,7 @@ public class Terrain {

private int val;

private int walkable;

+    private int cost;

/**

* 构造函数

@@ -17,19 +18,54 @@ public class Terrain {

public Terrain(int val) {

this.val = val;

if (this.val == 0) {

+                    // 0:unwalkable

this.walkable = AStarConstants.NOTE_UNWALKABLE;

+            this.cost = AStarConstants.COST_NONE;

}

if (this.val == 1) {

+                    // 1:walkbale,ground

this.walkable = AStarConstants.NOTE_WALKABLE;

+            this.cost = AStarConstants.COST_NONE;

}

if (this.val == 2) {

+                    // 2:墙

this.walkable = AStarConstants.NOTE_UNWALKABLE;

+            this.cost = AStarConstants.COST_NONE;

}

if (this.val == 3) {

+                    // 3:侧壁

this.walkable = AStarConstants.NOTE_UNWALKABLE;

+            this.cost = AStarConstants.COST_NONE;

}

if (this.val == 4) {

+                    // 4:target:目标

this.walkable = AStarConstants.NOTE_WALKABLE;

+            this.cost = AStarConstants.COST_NONE;

+        }

+        if (this.val == 5) {

+                    // 5:grass:草地

+            this.walkable = AStarConstants.NOTE_WALKABLE;

+            this.cost = AStarConstants.COST_GRASS;

+        }

+        if (this.val == 6) {

+                    // 6:hill:丘陵

+            this.walkable = AStarConstants.NOTE_WALKABLE;

+            this.cost = AStarConstants.COST_HILL;

+        }

+        if (this.val == 7) {

+                    // 7:swamp:沼泽

+            this.walkable = AStarConstants.NOTE_WALKABLE;

+            this.cost = AStarConstants.COST_SWAMP;

+        }

+        if (this.val == 8) {

+                    //  8:river:河流

+            this.walkable = AStarConstants.NOTE_WALKABLE;

+            this.cost = AStarConstants.COST_RIVER;

+        }

+        if (this.val == 9) {

+                    // 9:bridge:桥

+            this.walkable = AStarConstants.NOTE_WALKABLE;

+            this.cost = AStarConstants.COST_NONE;

}

}

@@ -60,4 +96,18 @@ public class Terrain {

public void setWalkable(int walkable) {

this.walkable = walkable;

}

+

+            /**

+             * @return cost

+             */

+            public int getCost() {

+                          return cost;

+            }

+

+            /**

+             * @param cost

+             */

+            public void setCost(int cost) {

+                          this.cost = cost;

+            }

■在AStar中计算成本时考虑地形的成本。

--- a/src/java/astar/AStar.java

+++ b/src/java/astar/AStar.java

node.setG(parent.getG() + step);

// 考虑地形的成本

node.setG(parent.getG() + step + node.getTerrain().getCost());

■测试程序结果图:

关于A*请参照这里

时间: 2024-08-10 17:17:40

A星之地形成本的实现的相关文章

游戏开发中的人工智能 复习

游戏开发中的人工智能 复习 (个人复习,一些仅是给自己的复习提示(=w=),转载注明出处:http://blog.csdn.net/hcbbt/article/details/42815479) 配套教材:游戏开发中的人工智能 知识点 移动 Bresenham,视线(略),拦截 // Bresenham if (deltaCol > deltaRow) { fraction = deltaRow * 2 - deltaCol; while (nextCol != endCol) { if (fr

再译《A *路径搜索入门》之流畅版??

A *路径搜索入门 帕特里克·莱斯特发表于2003年10月8日下午8点33人工智能 如果您发现文中有错误或问题(丢失的影像或文件,受损代码,不正确的文本格式等),导致无法阅读它时,请联系编辑,以便能更正.感谢您帮助我们改善这个资源. 更新于2005年7月18日 这篇文章已被翻译成阿尔巴尼亚语,中文,法语,德语,葡萄牙语,俄语和西班牙语.欢迎其他的翻译.在这篇文章的末尾有联系的电子邮件地址. 对于初学者, A *(读A-星,译者注:老外读A-star)算法可能有些复杂.虽然在网上有很多解释A *算

再译《A *路径搜索入门》之五

■实施上的注意事项 Notes on Implementation 现在您了解了基本的方法,当你编写自己的程序时,有一些额外的事情要考虑.下面给出我用C ++和Blitz Basic编写的程序,用其他语言也同样有效. Now that you understand the basic method, here are some additional things to think about when you are writing your own program. Some of the f

启发式

启发式函数h(n)告诉A * 估计从任何顶点n到目标的最小成本.选择一个好的启发式函数孙很重要的事情. 用启发式算法的A* 启发式可用于控制A *的行为. 在一个极端,如果 h(n) 是0,那么只 g(n) 起作用,A* 变成 Dijkstra算法,保证找到最短路径. 如果 h(n)总是低于(或等于)从n目标移动到目标的成本,则 A* 保证找到最短路径.h(n) 越低,节点 A* 扩展越多,使其变慢. 如果 h(n)完全等于从 n目标移动到目标的成本,那么 A* 将只遵循最佳路径并且永远不会扩展

应用之星铲平开发门槛 零成本制作手机电子书

4G时代带来智能手机的狂潮,随之带来手机应用越来越受欢迎,纸质书籍也被移动阅读取而代之,现在已经是移动阅读大爆发的时代.有数据显示中国有10亿的手机用户,5.13亿中国网民,去年中国手机网民的数量到达了近4亿,统的阅读方式和场景都发生了颠覆性的变化,移动设备的便携性,让阅读变得无处不在.移动终端的发展对移动阅读的影响非常深远,而手机将是未来最为普及的设备之一. 然而你还停留在下载使用的阶段吗?如果你是出版社,还是一味的沉浸在印刷纸质书籍吗?那就out了.有没有想过自己制作手机电子书? 现在互联网

3.5星|《行为设计学:零成本改变》:明确的、可操作的、短期的、可以引起情感共鸣的目标,更有助于个人或组织做出改变

行为设计学:零成本改变 主要内容讲如何推动个人.公司.组织.社群做出改变.比如如何减肥.戒烟,石油公司如何提高勘探效率,如何推动社群保护野生动物,如何推广新的手术方案等.有案例有理论. 作者的理论基于大象和骑象人的比喻.大象是理性部分,骑象人是感性部分,骑象人可以有长远的视角和愿景,大象则只有短期视角,只接受感性的说服.骑象人必须用短期利益来驱动大象.大象可能很难驱动和驾驭. 作者的理论稍复杂,我对这些案例的总结如下:想让人做出改进,除了理性的说服外,还需要给出明确的.可操作的.短期的.可以引起

Cocos2d-x 3.1.1 学习日志16--A星算法(A*搜索算法)学问

A *搜索算法称为A星算法.这是一个在图形平面,路径.求出最低通过成本的算法. 经常使用于游戏中的NPC的移动计算,或线上游戏的BOT的移动计算上. 首先:1.在Map地图中任取2个点,開始点和结束点 2.首先推断该点是不是不能够穿越的点,或者是已经再close中了 3.假设2步骤为真.什么都不做,假设为假,那么我们就进行加入了 4.假设在加入的时候,发现该点在open中不存在.那么我们直接加入,并且视之为当前节点,假设该点              存在open中,那么我们比較G值,假设发现当

Cocos2d-x 3.1.1 学习日志16--A星算法(A*搜寻算法)的学习

A *搜寻算法俗称A星算法.这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法.常用于游戏中的NPC的移动计算,或线上游戏的BOT的移动计算上. 首先:1.在Map地图中任取2个点,开始点和结束点 2.首先判断该点是不是不可以穿越的点,或者是已经再close中了 3.如果2步骤为真,什么都不做,如果为假,那么我们就进行添加了 4.如果在添加的时候,发现该点在open中不存在,那么我们直接添加,而且视之为当前节点,如果该点              存在open中,那么我们比较G值,如

《运营笔记》:主要是猫扑论坛运营经验。3星。

书中有不少运营的经验,其中以作者在猫扑的运营经验为主.条理略差,在移动互联网时代这些经验的价值也在逐步降低中.总体来说还是值得看一看的.我的评价是3星. 以下是书中一些内容的摘抄: 1:其实真正有消费能力的用户,白天可能根本不会上你的平台,因为他们都有自己繁忙的事情要处理.他们很可能晚上出现.如果你第一次不理他,第一次不理他,第三次还是不理他,那么,很有可能意味着你将失去他了.p56 2:如果帖子内容里面含有视频.图片,可以在标题里加上(图).(视频).(图+视频)的字样.p59 3:最好的用户