2016-04-18 14 views
0

私はZed Shawの「Pythonを学びましょう」のハード・ウェイを練習しています。私は単語を印刷する韻を踏むゲームを作りたいと思っていました。プレイヤーは5秒間単語を推測する言葉を推測しました。タイマーを同時にPythonで実行する方法

タイマーなしでゲームを始めることができました。しかし、私はタイマーをゲームと同時に実行させる方法を理解することはできません。以下のコードされています

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

私がやりたい何かは、ユーザーが推測して、正しい答えが入力されたら、タイマーの再起動を持ってしようとしながら、タイマーがカウントダウンを持っています。

私はPythonのドキュメントでマルチプロセッシングを調べましたが、その作業をどうするかはわかりませんでした。あなたは

私はこれが大体だと思い言ったことすべてを願っていますどのように見て文句を言わない

答えて

2

本当にこれは、あなたがこのようなタイマーをしたい場合は、GUIになります悪いデザインであるか、少なくとも呪い...あなたの出力を可能性が高いです必要な動作

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

これはすごい人です、ありがとうございます。 –

1

シンプルなタイマーを作成するために標準モジュール信号を使用できます。 ここに例があります:

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

素敵な答え:) ... +1、これを処理する素晴らしい方法(少なくともIMHO ...)OPは仮定的にGUIや呪いや何かを使用したくないと仮定します –

+0

@Joran:ありがとう、あなたの答えも良いですが、実際には私のものと同じですが、シグナルの代わりにスレッディングが使用されています。 – manu190466

関連する問題