0

私は pygame を使用して python で boids シミュレーションに取り組んでいます。基本的な動作は機能しますが、障害物回避と捕食者を追加しようとしています。これまでのところ、これらの動作を実装する方法を理解するのに苦労しています。

まずは獲物であるボイドを逃がし、捕食者を襲わせようとしています。そのためには、どうにかして最も近いボイドを見つける必要があります。どうすればいいですか?

また、障害物を回避するために、静的な障害物から積極的に逃げるのではなく、獲物を回避させる方法を誰か説明してもらえますか?

私の完全なコードはこちら(github)です。これら2つのことをどのように達成するかについて、あらゆる説明をいただければ幸いです。

ありがとう!

編集:

fucas はそれを達成する方法を教えてくれましたが、今は新しい問題があります。

捕食者と獲物の行動については、次のようになりました。

    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

そしてこれは獲物のために:

    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

(このコードは、他のすべてのルールの後に最後に適用されました)。

4

1 に答える 1

1

あなたができる最短距離を見つけるには

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)

あなたができる最短距離と獲物を得るために

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
于 2016-02-03T05:46:12.153 に答える