Как обновить черепах индивидуально в Python - PullRequest
1 голос
/ 02 мая 2019

В настоящее время я пытаюсь обновить несколько черепах в Python.В примере, показанном ниже, я пытаюсь заставить нижнюю черепаху двигаться и основываться на входах игрока и постоянно обновляться, в то время как верхняя черепаха движется вперед и назад и обновляется через определенные интервалы.

import turtle
from time import sleep
from turtle import Screen, Turtle

screen = turtle.Screen()
screen.title("Turtle Test")
screen.bgcolor("grey")
screen.setup(width=630, height=630)
screen.tracer(0)

turtle_a = turtle.Turtle()
turtle_a.speed(0)
turtle_a.shape("square")
turtle_a.color("white")
turtle_a.penup()

turtle_b = turtle.Turtle()
turtle_b.speed(0)
turtle_b.shape("square")
turtle_b.color("black")
turtle_b.penup()

turtle_b_speed = 10

def go_left():
    x = turtle_b.xcor()
    x -= turtle_b_speed
    turtle_b.setx(x)

def go_right():
    x = turtle_b.xcor()
    x += turtle_b_speed
    turtle_b.setx(x)

screen.listen()
screen.onkeypress(go_left, "Left")
screen.onkeypress(go_right, "Right")

direct = 5

while True:
    turtle_a.goto(turtle_a.xcor() + direct, turtle_a.ycor())
    sleep(0.5)
    if turtle_a.xcor() >= 310:
        direct = -5
    if turtle_a.xcor() <= -310:
        direct = 5
    # update function

1 Ответ

1 голос
/ 02 мая 2019

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

import turtle
from time import sleep
from turtle import Screen, Turtle

Вы такжене следует использовать цикл while True: в среде, основанной на событиях, а использовать событие таймера.Ниже приведена перезапись вашего кода, который устраняет эти проблемы.Поскольку вы никогда не устанавливали координату Y для двух черепах, нет ни «верха», ни «низа», просто две черепахи движутся мимо друг друга:

from turtle import Screen, Turtle

def go_left():
    x = turtle_b.xcor() - turtle_b_speed

    if -300 <= x <= 300:
        turtle_b.setx(x)

def go_right():
    x = turtle_b.xcor() + turtle_b_speed

    if -300 <= x <= 300:
        turtle_b.setx(x)

def move_a():
    global turtle_a_direct

    turtle_a.setx(turtle_a.xcor() + turtle_a_direct)

    if not -300 <= turtle_a.xcor() <= 300:
        turtle_a.undo()
        turtle_a_direct *= -1

    screen.ontimer(move_a, 500)

screen = Screen()
screen.title("Turtle Test")
screen.bgcolor('grey')
screen.setup(width=640, height=640)

turtle_a = Turtle('square')
turtle_a.speed('fastest')
turtle_a.color('white')
turtle_a.penup()

turtle_a_direct = 5

turtle_b = Turtle('square')
turtle_b.speed(0)
turtle_b.color('black')
turtle_b.penup()

turtle_b_speed = 10

screen.onkeypress(go_left, 'Left')
screen.onkeypress(go_right, 'Right')
screen.listen()

move_a()

screen.mainloop()

Поскольку вы вызвали onkeypress(), япредполагая Python 3.

...