Python Pygame塔防游戏,寻找目标的问题
我正在用Python做一个小型的塔防项目,我在目标定位方面遇到了一些问题,我想不出来 所以我有一个塔的列表和一个四处移动的敌人的列表 每次主游戏逻辑的while循环迭代时,我都有一个函数来检查生成的每个塔是否都有一个目标。如果他们没有,我运行一个函数,应该可以找到一个Python Pygame塔防游戏,寻找目标的问题,python,pygame,Python,Pygame,我正在用Python做一个小型的塔防项目,我在目标定位方面遇到了一些问题,我想不出来 所以我有一个塔的列表和一个四处移动的敌人的列表 每次主游戏逻辑的while循环迭代时,我都有一个函数来检查生成的每个塔是否都有一个目标。如果他们没有,我运行一个函数,应该可以找到一个 for tw in tower_list: tw.render(window) if tw.target == None: print(tw) tw.target = find_ta
for tw in tower_list:
tw.render(window)
if tw.target == None:
print(tw)
tw.target = find_target(tw)
print(tw.target)
这在find_target
函数中完成。我要派塔去寻找目标
def find_target(tw):
for e in enemy_list:
closest = 100000,100000
print("Checking distance for enemy", e)
dx = tw.x - e.x
dy = tw.y - e.y
if dy < 0:
dy *= -1
if dx < 0:
dx *= -1
if dx <= closest[0] and dy <= closest[1]:
closest = dx, dy
print("Closest one is ",e,"at distane",closest)
return e
def find_目标(tw):
对于敌人列表中的e:
最近值=100001000000
打印(“检查敌人的距离”,e)
dx=tw.x-e.x
dy=tw.y-e.y
如果dy<0:
dy*=-1
如果dx<0:
dx*=-1
如果dx使用carthesian距离公式计算两点之间的距离
它将使您始终拥有一个距离值,并保证每次都拥有较小的距离。
例如,现在如果一个敌人在x轴距离每座塔1的范围内,而所有其他敌人在x轴距离2的范围内,他们将永远不会被选中,即使他们可能更近
编辑:
请使用上述公式,因为您的计算不是距离函数
同样,在函数中,当您第一次发现比closer更小的东西时,返回e。
我把它设置为最近的是一个包含敌人和距离的元组,因此您的代码应该是
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
def find_目标(tw):
最近=(10000,无)
对于敌人列表中的e:
打印(“检查敌人的距离”,e)
dx=tw.x-e.x
dy=tw.y-e.y
距离=数学形下压(dx,dy)
如果距离小于最近距离[0]
最近[0]=距离
最近的[1]=e
打印(“最近的一个是”,最近的[1],“在远处”,最近的[0])
返回最近的
我认为你应该为塔楼设置一个射程,并找出射程内是否有敌人:
self.in_range = False
enemies_closest = []
enemies = [] #whatever enemies you have
for enemy in enemies:
x, y = enemy.x, enemy.y
dis = math.sqrt((self.x - x)**2 + (self.y - y)**2)
if dis < self.range:
self.in_range = True
enemies_closest.append(enemy)
enemies_closest.sort(key=lambda x: x.path_pos)
if len(enemies_closest) > 0:
target = enemies_closest[0]
self.in_范围=False
最接近的敌人
敌人=[]#不管你有什么敌人
对于敌人中的敌人:
x、 y=敌人.x,敌人.y
dis=数学sqrt((self.x-x)**2+(self.y-y)**2)
如果dis0:
目标=敌人\u最近[0]
但是你的方法真的应该很好…可能就是这样。。。多谢了,在我真正弄明白原因后,看起来不是这样,但我不明白为什么。它只对敌人列表中的e运行,一旦aka,它只检查1元素,而不是所有3元素,直到我改变距离函数,因为你的计算根本不是距离函数。原因是您的返回在循环内,而不是在循环的末尾。您不能在第一次找到一个element@Havok224这很可能是正确的解决方案。如果有任何其他问题,您需要发布一个。顺便说一句,你可以使用math.hypot
这里:distance=math.hypot(dx,dy)
。是的,我的计算方法非常糟糕,但我甚至没有发现缩进问题。再次感谢。请提供一个。这将使我们更容易帮助你。