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