turtle:mainloop
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
- Rozšiř předchozí kód pro obsluhu kláves dolů (
'Down
'), vlevo('Left
'), vpravo('Right
'). Použij funkceturtle.backward(1)
,turtle.left(10)
,turtle.right(10)
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
- Rozšiř o obsluhu kláves doleva a doprava, stejně jako nahoře
- Přidej do svojí simulační smyčky samovolný pohyb želvičky
zelvicka.forward(1)
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()
turtle/mainloop.txt · Poslední úprava: 2023/02/08 23:35 autor: 127.0.0.1