Obsah

Smyčka událostí

Poté co želvičce v předchozím programu došly příkazy, program doběhl - ukončil se. Pokud budeme chtít aby želvička reagovala na nějaké podněty (např. na stisk klávesy), musíme program zablokovat před koncem. K tomu slouží takzvaný simulační cyklus. Pro Turtle nám jej může poskytnout Screen prostřednictvím metody .

screen.mainloop()

from turtle import Screen,Turtle
 
zelvicka = Turtle('triangle')
 
wn = Screen()
wn.setup(700, 700)
 
# Funkce pro obsluhu udalosti stisku klavesy
#  - zelvicka pojede dopredu 
def stisknutiKlavesyNahoru():
  zelvicka.forward(5)
 
# Napojeni na stisk klavesy
wn.onkeypress(stisknutiKlavesyNahoru,'Up')
 
wn.listen()
 
# Začíná simulační smyčka
wn.mainloop()
 
# Sem už program nedoběhne

Úkol

Vlastní smyčka

V předchozím programu nahradíme volání wn.mainloop() svým vlastím nekonečným cyklem while

from turtle import Screen,Turtle
 
zelvicka = Turtle('triangle')
wn = Screen()
wn.setup(700, 700)
 
def stisknutiKlavesyNahoru():
  zelvicka.forward(5)
 
wn.onkeypress(stisknutiKlavesyNahoru,'Up')
 
while True:
  # "prázdný" pohyb želvičky
  zelvicka.left(0.1)  
  zelvicka.right(0.1)
  # další příkazy
 
# Sem už program nedoběhne

Úkol


Vlastní kód lépe

import turtle
turtle.setup(1920, 1080)
wn=turtle.Screen()
wn.title ('game')
 
player= turtle.Turtle()
 
balls=[]
 
def vytvor_mic():
     ball = turtle.Turtle()
     ball.speed(0)
     ball.shape('circle')
     ball.color("#e06641")
     ball.shapesize(1.8)
     ball.showturtle()
     ball.penup()
     ball.setx(random.randint(-945, 939))
     ball.sety(510)
     ball.setheading(270)
     balls.append(ball)
 
wn.onkeypress(vytvor_mic,'s')
 
wn.listen()
def pohni_svet():
    global wn
    for ball in balls:
        ball.forward(5)
    wn.ontimer(pohni_svet,50)
 
pohni_svet()
wn.mainloop()