如何检测多个海龟对象的碰撞?

How can I detect the collision of multiple turtle objects?

我在屏幕上有一堆乌龟对象。 他们还没有做任何事情,但我正在尝试以最简单的方式检测海龟对象的碰撞。我知道我应该将所有海龟元素 turtle.pos 与所有其他元素的 turtle.pos 进行比较,但我不确定该怎么做。

此外,我担心没有将任何一项与其自身的位置进行比较。

from turtle import *
import random

screen = Screen()

screen.bgcolor("grey")
screen.setup(width=800, height=600)

my_turtles = []


for i in range(10):

    turtle = Turtle()
    turtle.penup()
    turtle.setx(random.randrange(-50, 50))
    turtle.sety(random.randrange(-50, 50))
    my_turtles.append(turtle)

#for t in turtles:
#    if t.pos == anyother t.pos_except_itself
#    do something


screen.listen()
screen.exitonclick()

你想做的 last 是直接比较一个 turtle.position() 和另一个 turtle.position()。原因是海龟在一个浮点平面上游荡,直接比较坐标值很少能按你想要的方式工作。相反,您需要确定将被视为 碰撞 的两只海龟(的中心)之间的最小距离。一旦你知道那个距离,然后循环如下:

for a in turtles:
    if any(a != b and a.distance(b) < SAFE_MARGIN for b in turtles):
        # collision, do something here 

这里是你的代码的返工,它会导致任何过度侵入彼此的 个人 space 的海龟闪烁:

from turtle import Screen, Turtle
from random import randrange

RADIUS = 10

def blink_turtles():
    for a in turtles:
        if any(a != b and a.distance(b) < RADIUS for b in turtles):
            a.color(*reversed(a.color()))

    screen.ontimer(blink_turtles, 1000)

screen = Screen()
screen.setup(width=800, height=600)

turtles = []

for _ in range(15):
    turtle = Turtle()
    turtle.hideturtle()
    turtle.shape('turtle')
    turtle.color('red', 'green')
    turtle.penup()
    turtle.goto(randrange(-50, 50), randrange(-50, 50))
    turtle.showturtle()

    turtles.append(turtle)

blink_turtles()

screen.exitonclick()