2016-06-02 7 views
0

Ich mache ein Tetris ähnliches Spiel mit Schildkröte.Wie kann ich die Schildkröte alle paar Sekunden bewegen, ohne time.sleep() zu benutzen?

Wenn der Block ausfällt, benutze ich time.sleep(), damit es ein paar Sekunden wartet, bevor es ausfällt. Aber die time.sleep() machen den gesamten Code Stopp, ich will nur die Defintion stoppen:

def moveDown(): 
    time.sleep(2) 
    turtle(sety(100) 
    time.sleep(2) 
    turtle.sety(0) 
    time.sleep(2) 
    turtle.sety(-100) 
    time.sleep(2) 
    turtle.sety(-200) 
    setBlock() 

Ich will nicht den gesamten Code zu stoppen, weil der Spieler die linke verwenden muss und Recht Tasten zum Navigieren auf dem Bildschirm. Also, wie würde ich das erreichen? Entschuldigung, wenn das sehr rambleyy und verwirrt war.

+2

Was Sie in einem Fall wie diesem tun möchten, ist nur den Block nach einem bestimmten Betrag zu bewegen die Zeit ist vergangen. Sie können das tun, indem Sie die Anfangszeit speichern und dann die aktuelle Zeit gegen die Anfangszeit überprüfen, bis genug Zeit vergangen ist. Zumindest ist das ein einfacher Weg, es zu tun - es gibt wahrscheinlich andere, bessere Wege. –

+1

Was Sie wollen, ist 'turtle.ontimer' https://docs.python.org/2/library/turtle.html?highlight=timer#turtle.ontimer (auch sollten Sie Ihren Titel klarstellen und 'Schildkröte' hinzufügen Stichworte. –

Antwort

0

time.clock() kann die Anzahl der Sekunden berichten, da es begonnen hat, so können Sie gegen sie überprüfen, um zu sehen, ob der Anwender ermöglicht die Eingabe für ein bestimmtes Intervall-Befehle, sobald es auf dem Boden

import time 
junk = time.clock() 
pause_at_bottom = 0.5 
## code till it hits the bottom 
at_bottom = time.clock() 
while time.clock() < (at_bottom + pause_at_bottom): 
    ## code to run while at the bottom 
## code to run once time has elapsed at bottom 
ist
0

Was mit time.sleep() passiert ist, dass es sich um einen so genannten "blocking call" handelt, der bedeutet, dass Ihr Prozess nicht ausgeführt wird, bevor er fertig ist. Sie müssen einen anderen Thread/Prozess im Hintergrund ausführen, um ihn zu verschieben. Etwas wie folgt aus:

def moveDown(): 
    turtle.sety(turtle.ycor()) 
    if moveable: 
     screen.ontimer(moveDown, 2000) #ms 

dann an anderer Stelle im Code:

... 
    moveable=True 
    moveDown() 
... 

Dann ist es mit stoppen:

... 
    moveable=False 
... 

Das ist ein sehr einfaches Beispiel ist (basierend aus der python.org Beispiel)