Странное поведение Python Turtle при перезагрузке экранаPython

Программы на Python
Ответить
Anonymous
 Странное поведение Python Turtle при перезагрузке экрана

Сообщение Anonymous »

В приведенной ниже программе я предполагаю, что при вызове screen.clear() в reset_game() все черепахи уничтожаются, что я подтверждаю, печатая длину screen.turtles() в конце reset_game(). И тем не менее, каждый раз, когда вызывается reset_game(), через некоторое время на экране отображается больше следов, что для меня не имеет смысла. Кто-нибудь может объяснить, в чем проблема?

import turtle
import random

WIDTH = 600
HEIGHT = 600

def go_left(tur, screen):
tur.left(45)

def go_right(tur, screen):
tur.right(45)

def go_forward(tur, screen):
tur.forward(10)
if is_border_collision(tur.pos()):
game_over(screen)

def go_backward(tur,screen):
tur.backward(10)
if is_border_collision(tur.pos()):
game_over(screen)

def is_border_collision(pos):
print(pos)
return pos[0] < (- WIDTH // 2) + 20 or pos[0] > WIDTH // 2 - 20 \
or pos[1] < (- HEIGHT // 2) + 20 or pos[1] > HEIGHT // 2 - 20

def game_over(screen):
reset_game(screen)

# GAME LOOP
def game_loop(tina, bob, screen):
tina.setheading(tina.towards(bob))
tina.forward(5)
turtle.ontimer(lambda: game_loop(tina, bob, screen), 100)

def init_screen():
screen = turtle.Screen()
screen.setup(WIDTH, HEIGHT)
screen.title("Turtle Game")
return screen

def reset_game(screen):
screen.clearscreen()
screen.bgcolor("green")

tina = turtle.Turtle()
tina.shape("turtle")
tina.color("red")
tina.pensize(10)
tina.speed(10)

bob = turtle.Turtle()
bob.shape("turtle")
bob.color("yellow")
bob.pensize(10)
bob.penup()
bob.goto(200, 200)
bob.pendown()
bob.speed(10)

screen.listen()
canvas = screen.getcanvas()
canvas.bind('', lambda event: go_forward(bob, screen))
canvas.bind('', lambda event: go_backward(bob, screen))
canvas.bind('', lambda event: go_left(bob, screen))
canvas.bind('', lambda event: go_right(bob, screen))

print(len(screen.turtles()))

game_loop(tina, bob, screen)

def main():
screen = init_screen()
reset_game(screen)
return "DONE"

if __name__ == "__main__":
msg = main()
print(msg)
turtle.done()


Подробнее здесь: https://stackoverflow.com/questions/618 ... set-screen
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»