Используйте формулу сглаживания расстояния для вычисления расстояний между двумя точками.
Это сделает так, чтобы вы всегда имели одно значение для расстояния и гарантировали у вас есть меньшее расстояние каждый раз. Прямо сейчас, если, например, один враг находится на расстоянии 1 по оси x от каждой башни, а все остальные находятся на расстоянии 2 по оси x, они никогда не будут выбраны, хотя они могут быть ближе
EDIT: Пожалуйста, используйте формулу выше, поскольку ваш расчет не является функцией расстояния. Также в вашей функции вы возвращаете e в первый раз, когда найдете что-то меньшее, чем ближе. Id делает так, чтобы ближайший был кортеж, удерживающий врага и расстояние, и поэтому ваш код должен быть
def find_target(tw):
closest = (10000, None)
for e in enemy_list:
print("Checking distance for enemy", e)
dx = tw.x - e.x
dy = tw.y - e.y
distance = math.hypot(dx, dy)
if distance < closest[0]
closest[0] = distance
closest[1] = e
print("Closest one is ",closest[1],"at distane",closest[0])
return closest