====== Smyčka událostí ======
Poté co želvičce [[turtle:hvezdicka|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 funkce ''turtle.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()