Uživatelské nástroje

Nástroje pro tento web


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 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()
turtle/mainloop.txt · Poslední úprava: 2023/02/08 23:35 autor: 127.0.0.1