文档章节

A星之地形成本的实现

如比如比
 如比如比
发布于 2015/07/01 05:20
字数 381
阅读 118
收藏 6

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

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(dubenju@126.com)

  */

 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*请参照这里



© 著作权归作者所有

如比如比
粉丝 126
博文 178
码字总数 286951
作品 0
日本
程序员
私信 提问
分享收集的WebGL 3D学习资源

大家好,我在本文中分享了我收集的WebGL 3D相关的博客、书籍、教程、demo等内容,希望对大家学习WebGL和3D有所帮助,谢谢~ 相关博客 Wonder技术 Wonder是我们公司的产品,包含WebGL 3D引擎和...

Wonder-YYC
03/15
0
0
「镁客·请讲」日跃星窦宇飞:高增长的市场下,我们用三维整形工具改变美容行业

镁客君倒是特别想体验一下日跃星的设备,看看他们分析设计出的黄金比例脸型长啥样! 常言说的好,爱美之心人皆有之,但是当我们谈论起整容,仍然有不少人对此讳莫如深,不过随着人们消费观念...

行者武松
2018/03/14
0
0
[OpenGL - 游戏开发] 仿制《Minecraft/我的世界》 - 总结及演示程序

首先上一下效果图:尝试用C++以及OpenGL做的一个简化版Minecraft。 大三寒假刚刚结束,返校的第一天寻思着整理一下在家做的小程序。首先是这个仿制的3D游戏《我的世界Minecraft》。 写这个程...

Mahabharata_
2017/02/17
0
0
[专栏精选]2018.3地形更新详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhenghongzhi6/article/details/88934315 本文节选自洪流学堂公众号技术专栏《大话Unity2018》,未经允许不可...

关尔Manic
03/31
0
0
Unity 运行时动态编辑Terrain(一)介绍

Unity自带了一个非常强大的地形编辑器,但是总结起来也有一些缺点 1.不能在运行时编辑 2.不能跨多块地图编辑 正好近期的项目中需要在运行状态下实现超大地形和跨多块地形编辑的功能,于是花了...

xdedzl
2018/12/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Phpstorm2018 永久激活

1、安装phpstorm,安装包请自行官网下载 http://www.jetbrains.com/phpstorm/download/ 2、下载JetbrainsCrack.jar文件,存放至你的phpstorm执行文件同级目录下 下载JetbrainsCrack.jar 提取...

happyfish319
13分钟前
3
0
谈一谈Android进程间通信的几种方式

###来看一下Android中除了AIDL还有哪些进程间通信的方式: 1、Bundle Bundle实现了Parcelable,所以在Android中我们可以通过Intent在不同进程间传递Bundle数据。 但是在Intent 传输数据的过程...

二营长的意大利炮手
14分钟前
6
0
互联网薪资“高开低走”,你的能力是否真的可以匹配高薪?

对于国内外主流互联网大厂,技术出身似乎已经成为各大掌门人的必备标签。谷歌 CEO 桑达尔·皮查伊、马克·扎克伯格、李彦宏、马化腾、雷军等等皆为技术人出身,都曾参与了公司内部重要产品的...

Java技术剑
15分钟前
6
0
java 多线程

线程声明周期 线程的五个状态:新建,就绪,运行,阻塞,死亡。 其中就绪和运行两个状态客户互相转换,但运行到阻塞,阻塞到就绪,只能单向转换。 刚new出的线程就是【新建】状态,调用start...

雷开你的门
17分钟前
5
0
构造器Constructor是否可被overrid

构造器不能被重写,不能用static修饰构造器,只能用public private protected这三个权限修饰符,且不能有返回语句。

无名氏的程序员
21分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部