Seltsames Verhalten der Python-Schildkröte, wenn ich den Bildschirm zurücksetzePython

Python-Programme
Anonymous
 Seltsames Verhalten der Python-Schildkröte, wenn ich den Bildschirm zurücksetze

Post by Anonymous »

Im folgenden Programm gehe ich davon aus, dass beim Aufruf von screen.clear() in reset_game() alle Schildkröten zerstört werden, was ich bestätige, indem ich die Länge von screen.turtles() am Ende von reset_game() ausdrucke. Und doch werden bei jedem Aufruf von reset_game() nach kurzer Zeit weitere Spuren auf dem Bildschirm angezeigt, was für mich keinen Sinn ergibt. Kann mir bitte jemand erklären, wo das Problem liegt?

Code: Select all

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()

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post