我正在用蟒蛇模拟蟒蛇的游戏。基本的行为是有效的,但我现在试图加入避障和捕食者。到目前为止,我很难弄清楚如何实现这些行为。
首先,我试图让被捕食的机器人逃跑,让捕食者攻击。为了做到这一点,我需要找到最接近的机器人。我该怎么做?
另外,为了避免障碍,能不能有人解释一下我是如何让猎物避开而不是主动逃离静态障碍的?
我的完整代码是这里 (github)。对于我如何完成这两件事,我非常感激所有的解释。
谢谢!
编辑:
他向我展示了如何做到这一点,但现在我有了一个新问题。
对于捕食者和猎物的行为,我现在有这样的看法:
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(在所有其他规则之后,它最后应用了该代码)。
发布于 2016-02-03 05:46:12
要找到最短的距离,你可以做到
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_distancehttps://stackoverflow.com/questions/35167334
复制相似问题