Здесь только начинаю изучать Python. Я хочу создать две группы, где каждый спрайт в одной группе преследует ближайший спрайт из другой группы.
У меня есть код, в котором все спрайты в группе преследуют один спрайт из другой группы.
def chase(sprite, group):
for entity in group:
if math.hypot(entity.rect.centerx - sprite.rect.centerx, entity.rect.centery - sprite.rect.centery) < 1200:
if entity.rect.left - sprite.rect.left < 0:
entity.rect.left += 2
else:
entity.rect.left -= 2
if entity.rect.top - sprite.rect.top < 0:
entity.rect.top += 2
else:
entity.rect.top -= 2
Я также могу заставить все спрайты в преследуемой группе запускаться от одного спрайта в другой группе:
def run(sprite, group):
for entity in group:
if math.hypot(entity.rect.centerx - sprite.rect.centerx, entity.rect.centery - sprite.rect.centery) < 65:
if entity.rect.left - sprite.rect.left < 0:
entity.rect.left -= 9
else:
entity.rect.left += 9
if entity.rect.top - sprite.rect.top < 0:
entity.rect.top -= 9
else:
entity.rect.top += 9
Я не могу понять, как сделать так, чтобы вся группа реагировала. То есть, конечно, вся группа будет преследовать, но только за 1 спрайтом. Я не могу всей группой преследовать всю другую группу. И я не могу сказать всей другой группе, что они должны бежать от ВСЕХ преследователей, а не только от одного.
Для этого я хочу узнать, какой спрайт из группы ближе всего, но я не знаю, как это сделать. Я пытался поиграть с этим:
enemy = min([e for e in chased], key=lambda e: pow(e.x-entity.x, 2) + pow(e.y-entity.y, 2))
Но мне сказали, что группа не является итерируемой.
Кто-нибудь может помочь мне с этими двумя вещами? Пусть вся группа преследователей просматривает всю другую группу преследователей, а затем движется к ближайшему?
Спасибо за помощь!