首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetLogo动态曼哈顿距离

NetLogo动态曼哈顿距离
EN

Stack Overflow用户
提问于 2012-12-14 06:26:53
回答 1查看 526关注 0票数 0

我正在尝试将某种形式的AI应用到我的Net Logo游戏中。

我正计划计算曼哈顿从僵尸乌龟到人类乌龟的距离。

到目前为止,我已经成功地计算了两者之间的曼哈顿距离,并绘制了路径,还将僵尸代理沿着计算出的路径向人类乌龟移动。

我现在面临的问题是人工代理的位置将由用户控制。曼哈顿距离使用while循环,在到达人类代理之前不会中断循环。我希望僵尸代理向人类代理移动一步,然后让人类代理移动。

到目前为止的代码Net Logo Game

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-15 01:59:50

我不确定您在plot-manhattan-distance过程中要做什么。对于本应相对简单的事情,这似乎是一种复杂的方法,但也许我误解了您的目的。下面是我处理整个问题的方法:

代码语言:javascript
复制
globals [
  zombie
  human
]

to setup
  clear-all
  ask n-of 2 patches [ sprout 1 ]
  set human turtle 0
  ask human [ set shape "person" ]
  set zombie turtle 1
  ask zombie [ pen-down ]
end

to go
  ask human [ flee zombie ]
  ask zombie [ pursue human ]
end

to pursue [ target ]
  face target
  set heading first sort-by [abs (?1 - heading) < abs (?2 - heading)] [0 90 180 270]
  fd 1
end

to flee [ pursuer ]
  face pursuer
  rt 180
  fd 0.5
end

肉在pursue过程中。因为僵尸不能预测人类会去哪里,它只是试图沿着它的大致方向移动。它从直接面对人类开始(使用方便的NetLogo face原语)。但由于它大概只能在四个基本方向中的一个方向上移动,所以它必须选择最可取的一个,即:与其当前(理想)方向差异最小的一个。这就是sort-by [abs (?1 - heading) < abs (?2 - heading)] [0 90 180 270]表达式所做的事情:它通过比较方向列表与当前标题的绝对差异来对方向列表进行排序。这个排序列表的第一项将是具有最小差异的项,因此是僵尸需要使用的项。

在目前的实现中,人类只是试图离开僵尸,但你可以很容易地将其替换为玩家控制代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13869599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档