Как я могу перемещать только одну черепаху за раз?

Итак, моя программа работала до того, как я добавил операторы if в строки 27 и 42: if (currentTurtle == "") or (currentTurtle == "one"): и if (currentTurtle == "") or (currentTurtle == "two"): соответственно. До того, как я добавил эти проверки, черепахи двигались одновременно только в том случае, если они были действительно близко друг к другу, поскольку я использовал операторы if для проверки расстояния курсора до черепах. Я попытался добавить проверки в строки 27 и 42, чтобы перемещать их только по одной, но тогда мои черепашки перестали отвечать.

Вот мой код:

from turtle import Screen, Turtle

screen = Screen()

turt1 = Turtle("turtle")
turt2 = Turtle("turtle")
turt1.speed(0)
turt2.speed(0)
turt1.shape('circle')
turt2.shape('circle')
turt1.color('green')
turt2.color('blue')

turt1.penup()
turt1.goto(-100,100)
turt2.penup()
turt2.goto(100,-100)

currentTurtle = ""

def resetCurrent():
  currentTurtle = ""

def dragging(x, y):
  if (x <= turt1.xcor() + 10) and (x >= turt1.xcor() - 10):
    if (y <= turt1.ycor() + 10) and (y >= turt1.ycor() - 10):
      if (currentTurtle == "") or (currentTurtle == "one"):
        currentTurtle = "one"
    elif (currentTurtle == "one"):
      currentTurtle == ""
  elif (currentTurtle == "one"):
    currentTurtle == ""

  if currentTurtle == "one":
    if (x <= turt1.xcor() + 10) and (x >= turt1.xcor() - 10):
      if (y <= turt1.ycor() + 10) and (y >= turt1.ycor() - 10):
        turt1.goto(x, y)

def dragging2(x, y):
  if (x <= turt2.xcor() + 10) and (x >= turt2.xcor() - 10):
    if (y <= turt2.ycor() + 10) and (y >= turt2.ycor() - 10):
      if (currentTurtle == "") or (currentTurtle == "two"):
        currentTurtle = "two"
    elif (currentTurtle == "two"):
      currentTurtle = ""
  elif (currentTurtle == "two"):
    currentTurtle = ""

  if currentTurtle == "two":
    if (x <= turt2.xcor() + 10) and (x >= turt2.xcor() - 10):
      if (y <= turt2.ycor() + 10) and (y >= turt2.ycor() - 10):
        turt2.goto(x, y)

def main():  # This will run the program
    screen.listen()
    
    turt1.ondrag(dragging)
    turt2.ondrag(dragging2)

    screen.mainloop()  # This will continue running main() 

main()

Любая помощь приветствуется!


person Nicole    schedule 10.07.2020    source источник


Ответы (1)


Ваш dragging() код стал настолько сложным, что я не могу понять, что вы хотите по сравнению с тем, что вы делаете. Я собираюсь начать с совершенно другого, более простого подхода:

from turtle import Screen, Turtle
from functools import partial

def dragging(tortoise, x, y):
    for turtle in screen.turtles():  # disable event handlers inside handler
        turtle.ondrag(None)

    tortoise.goto(x, y)

    for turtle in screen.turtles():  # reenable event handers on the way out
        turtle.ondrag(partial(dragging, turtle))

def main():

    turtle_1.ondrag(partial(dragging, turtle_1))
    turtle_2.ondrag(partial(dragging, turtle_2))

    screen.mainloop()

screen = Screen()

turtle_1 = Turtle('turtle')
turtle_1.shape('circle')
turtle_1.speed('fastest')
turtle_1.penup()

turtle_1.color('green')
turtle_1.goto(-100, 100)

turtle_2 = turtle_1.clone()  # turtle_2 is a lot like turtle_1

turtle_2.color('blue')
turtle_2.goto(100, -100)

main()

Дает ли это вам контроль и желаемое поведение? Если нет, сообщите нам в своем вопросе, что вы хотите, а не только то, что код не делает.

person cdlane    schedule 10.07.2020
comment
Это именно то, что я хотел, большое спасибо! - person Nicole; 11.07.2020