2016-04-18 7 views
0

Ich gehe durch Zed Shaws Lerne Python auf dem harten Weg und als eine der Übungen werden wir gebeten, ein Spiel zu erstellen. Ich wollte ein reimendes Spiel erstellen, das ein Wort ausgab und der Spieler hatte 5 Sekunden, um ein Wort zu erraten, das sich mit dem ausgedruckten Wort reimte.Wie man einen Timer gleichzeitig in Python ausführt

Ich war in der Lage, das Spiel ohne Timer zu arbeiten. Allerdings kann ich nicht herausfinden, wie man den Timer gleichzeitig mit dem Spiel laufen lässt. Unten ist der Code:

#libraries 
libs = [about, cake, chart, score] 
#points 
p = 0 
#timer 
class countdown(object): 

    def __init__(self, timer): 
     self.timer = timer 

     while timer != 0: 

      print "timer: %i" % timer 
      sleep(1) 
      timer -= 1 

     else: 
      exit("You ran out of time!") 

class engine(object): 
    # randomly select a library  
    i = randint(0, len(libs)-1) 

    randlib = libs[i].words.split(' ')  

    rhymeword = sample(randlib, 1) 

    print rhymeword 
    guess = raw_input("> ") 

    while guess not in randlib: 

     print rhymeword 
     guess = raw_input("> ") 

    else: 
     # to reset the timer  
     timer = 5 
     # points assignment 
     if guess in libs[i].onesyl.split(' '): 
      p += 1 
      print "Points: %s" % p 
     elif guess in libs[i].twosyl.split(' '): 
      p += 2 
      print "Points: %s" % p 
     elif guess in libs[i].threesyl.split(' '): 
      p += + 3 
     print "Points: %s" % p 

t = countdown(5) 
e = engine() 

t.start() 
e.start() 

Was würde ich tun während des Timer wird, während der Benutzer versucht zu erraten und dann den Timer neu starten, sobald eine richtige Antwort geben.

Ich schaute in der Python-Dokumentation in Multiprocessing, aber ich war mir nicht sicher, wie man das macht.

Antwort

2

wirklich ist diese schlechte Design, wenn Sie ein Timer wie diese wollen Sie in eine gui aussehen sollte oder zumindest Flüche ... Ihre Ausgabe aussehen wahrscheinlich wird nicht, wie Sie

alle hoffen, dass die ich denke, das ist ungefähr das ist Verhalten, das Sie wünschen

import sys,time,threading 

def wait_for_secs(N): 
    for i in range(N): 
     print N-i 
     time.sleep(1) 
    print "OUT OF TIME!!!" 
    sys.exit(1) 

threading.Thread(target=wait_for_secs,args=(15,)).start() 
answer = raw_input("5+6*3=? >") 
print "You Answered:",answer 
sys.exit(0) 
+0

Das ist ein erstaunlicher Mann, vielen Dank. –

1

Sie können das Standardmodulsignal verwenden, um einen einfachen Timer zu erstellen. Hier ist ein Beispiel:

import signal, sys 

def handler(signum, frame): 
    #print 'Signal handler called with signal', signum 
    print "You ran out of time!" 
    sys.exit() 


def engine():  
    guess = raw_input("> ") 
    print "fast enough to input",guess 

# Set the signal handler and a 5-second alarm 
signal.signal(signal.SIGALRM, handler) 
signal.alarm(5) 

engine() 

signal.alarm(0)   # Disable the alarm 
+0

nette Antwort :) ... +1, gute Möglichkeit, damit umzugehen (IMHO zumindest) ... unter der Annahme, OP möchte nicht unbedingt eine GUI oder Flüche oder etwas –

+0

@Joran: Danke, Ihre Antwort ist auch gut, tatsächlich äquivalent zu meinem, aber mit Threading anstelle von Signal, upvoted. – manu190466

Verwandte Themen