首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boids捕食者与障碍行为

Boids捕食者与障碍行为
EN

Stack Overflow用户
提问于 2016-02-03 02:11:52
回答 1查看 887关注 0票数 0

我正在用蟒蛇模拟蟒蛇的游戏。基本的行为是有效的,但我现在试图加入避障和捕食者。到目前为止,我很难弄清楚如何实现这些行为。

首先,我试图让被捕食的机器人逃跑,让捕食者攻击。为了做到这一点,我需要找到最接近的机器人。我该怎么做?

另外,为了避免障碍,能不能有人解释一下我是如何让猎物避开而不是主动逃离静态障碍的?

我的完整代码是这里 (github)。对于我如何完成这两件事,我非常感激所有的解释。

谢谢!

编辑:

他向我展示了如何做到这一点,但现在我有了一个新问题。

对于捕食者和猎物的行为,我现在有这样的看法:

代码语言:javascript
复制
    def attack(self, prey_list):
        nearest_prey = None
        shortest_distance = None

            for prey in prey_list:
                distX = self.rect.x - prey.rect.x
                distY = self.rect.y - prey.rect.y
                d = distX*distX+distY*distY
                if not shortest_distance or d < shortest_distance:
                    shortest_distance = d
                    nearest_prey = prey

                # do something with nearest_prey, shortest_distance
                trajectory_x = self.rect.x - nearest_prey.rect.x
                trajectory_y = self.rect.y - nearest_prey.rect.y

                self.velocityX -= trajectory_x
                self.velocityY -= trajectory_y

这是给猎物的:

代码语言:javascript
复制
    def defend(self, predator_list):
        nearest_predator = None
        shortest_distance = None

            for predator in predator_list:
                distX = self.rect.x - predator.rect.x
                distY = self.rect.y - predator.rect.y
                d = distX*distX+distY*distY
                if not shortest_distance or d < shortest_distance:
                    shortest_distance = d
                    nearest_predator = predator

                # do something with nearest_prey, shortest_distance
                trajectory_x = self.rect.x - nearest_predator.rect.x
                trajectory_y = self.rect.y - nearest_predator.rect.y

                self.velocityX += trajectory_x
                self.velocityY += trajectory_y

(在所有其他规则之后,它最后应用了该代码)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-03 05:46:12

要找到最短的距离,你可以做到

代码语言:javascript
复制
def attack(self, prey_list):
    d_list = []

    for prey in prey_list:
        distX = self.rect.x - prey.rect.x
        distY = self.rect.y - prey.rect.y
        d = distX*distX+distY*distY
        d_list.append(d)

    shortest_distance = min(d_list)

为了获得最短的距离和猎物,你可以做到

代码语言:javascript
复制
def attack(self, prey_list):
    nearest_prey = None
    shortest_distance = None

    for prey in prey_list:
        distX = self.rect.x - prey.rect.x
        distY = self.rect.y - prey.rect.y
        d = distX*distX+distY*distY
        if not shortest_distance or d < shortest_distance
            shortest_distance = d
            nearest_prey = prey

   # do something with nearest_prey, shortest_distance
   print nearest_prey, shortest_distance
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35167334

复制
相关文章

相似问题

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