Существуют проблемы с вашим исходным кодом и предлагаемыми ответами, которые я пытался устранить ниже.В частности: вам не нужно вычислять расстояние между черепахами, они уже знают, как это сделать;ваше и другие использование tracer()
не имеет смысла, так как у вас нет вызовов update()
;столкновение между Бобом и Филом должно быть симметричным, но один из ответов предполагает, что Боб сталкивается с Филом, а не Фил - с Бобом;один из ответов, кажется, не понимает природу turtle.done()
.
from turtle import Screen, Turtle, mainloop
def bob_left():
bob.left(90)
def bob_forward():
bob.forward(20)
if bob.xcor() > 280:
bob.setx(280)
elif bob.xcor() < -280:
bob.setx(-280)
if bob.ycor() > 280:
bob.sety(280)
elif bob.ycor() < -280:
bob.sety(-280)
checkCollision()
def bob_right():
bob.right(90)
def phil_left():
phil.left(90)
def phil_forward():
phil.forward(20)
if phil.xcor() > 280:
phil.setx(280)
elif phil.xcor() < -280:
phil.setx(-280)
if phil.ycor() > 280:
phil.sety(280)
elif phil.ycor() < -280:
phil.sety(-280)
checkCollision()
def phil_right():
phil.right(90)
def isCollision(t1, t2):
return t1.distance(t2) < 20
def checkCollision():
if isCollision(bob, phil):
bob.setposition(-50, 0)
phil.setposition(50, 0)
screen = Screen()
screen.bgcolor('black')
screen.setup(width=700, height=700)
border_pen = Turtle(visible=False)
border_pen.speed('fastest')
border_pen.color('white')
border_pen.pensize(3)
border_pen.penup()
border_pen.setposition(-300, -300)
border_pen.pendown()
for _ in range(4):
border_pen.fd(600)
border_pen.lt(90)
bob = Turtle('triangle')
bob.speed('fastest')
bob.color('blue')
bob.penup()
bob.setpos(-50, 0)
phil = Turtle('triangle')
phil.speed('fastest')
phil.color('red')
phil.penup()
phil.setposition(50, 0)
screen.onkey(bob_left, 'Left')
screen.onkey(bob_forward, 'Up')
screen.onkey(bob_right, 'Right')
screen.onkey(phil_left, 'a')
screen.onkey(phil_forward, 'w')
screen.onkey(phil_right, 'd')
screen.listen()
mainloop()