Я делаю игру в Черепахе с Питоном, где одна Черепаха (называемая Льюи) следует за другой (называется Элла). На данный момент целью игры является то, что Элла, которая немного медленнее Льюи, должна следовать за Льюи. Льюи движется по нажатию клавиш со стрелками.Как заставить черепаху Python перестать пытаться догнать черепаху, это следует за этим?
Элла идет за Льюи, но проблема в том, что если, скажем, вы дважды нажимаете клавишу «право», прежде чем Элла прибывает в положение Льюи, а затем позволит ей догнать его позицию, тогда она начать возвращаться ко всем ее предыдущим позициям, где она не смогла догнать Льюи, а затем продолжает идти на все позиции Льюи, которые она пропустила.
Элла не должна повторять свои шаги, так как я могу исправить эту проблему? Вот код:
import turtle
image = "C:/Python27/Pythonprogramming/image.gif"
screenr = turtle.Screen()
Lewi = turtle.Turtle()
Ella = turtle.Turtle()
screenr.addshape(image)
Lewi.shape(image)
screenr.bgpic("winXP.gif")
screenr.setup(1279, 815)
Lewi.penup()
speed = 50
def up():
Lewi.sety(Lewi.ycor()+speed)
Ella.speed(1)
Ella.goto(Lewi.pos())
if Ella.pos() == Lewi.pos():
print("loo")
def down():
Lewi.sety(Lewi.ycor()-speed)
Ella.speed(1)
Ella.goto(Lewi.pos())
if Ella.pos() == Lewi.pos():
print("loo")
def left():
Lewi.forward(-speed)
Ella.speed(1)
Ella.goto(Lewi.pos())
if Ella.pos() == Lewi.pos():
print("loo")
def right():
Lewi.forward(speed)
Ella.speed(1)
Ella.goto(Lewi.pos())
if Ella.pos() == Lewi.pos():
print("loo")
screenr.onkey(up, "Up")
screenr.onkey(down, "Down")
screenr.onkey(right, "Right")
screenr.onkey(left, "Left")
screenr.listen()
turtle.mainloop()
мой ella продолжает двигаться мимо меня, хе. –
Есть несколько ошибок, с которыми я пытался выровняться. Например, Элла никогда не может находиться в тех же координатах, что и Льюи, потому что она указывает на угол, чтобы идти к нему, но движется с той же «скоростью». Это, однако, можно зафиксировать с помощью векторной формулы. Реальная проблема заключается в том, что Льюи не двигается так гладко, как в исходном коде, то есть если это было в игре, то было бы очень неприятно играть. Это похоже на лучшее рабочее решение, поэтому я обновлю, когда найду решение. Если вы найдете решение, пожалуйста, сообщите мне об этом. И спасибо BTW. –
Нет, неважно, только что понял! Вам нужно, чтобы этот 'Lewi.speed (0)' был в начале кода (желательно после определения Lewi). «Скорость» в этом случае является функцией (скорость()) и ее не следует путать с переменной «скорость». –