4

私は Python にかなり慣れていないので、学生向けの (コンピューターではない) 言語トレーナーを作成したいと考えています。タイマーがバックグラウンドで実行され、生徒が単語をすばやく入力してカウントダウンを遅く/元に戻す必要があるようなものです。そうしないと、カウントダウンがゼロになり、「ゲームオーバー」メッセージが表示されます。(タイマーがゼロに向かっている間に、特別なエージェントが爆弾を解除しなければならないときと同じです。)

確かにそれを行う正しい方法のように聞こえるスレッド化の説明はたくさんありますが、これまでのところ、タイマーが (time-limited) と組み合わされているものは見つかりませんでしたraw_input。あなたのプロの誰かが、私が見落としたチュートリアル/ディスカッションへのポインタを教えてもらえますか?

4

2 に答える 2

4
import threading
import time
import os

def ask():
    """
    Simple function where you ask him his name, if he answers
    you print message and exit
    """
    name = raw_input("Tell me your name, you have 5 seconds: ")
    exit_message = "Wohoho you did it..Your name is %s" % name
    exit(exit_message)

def exit(msg):
    """
    Exit function, prints something and then exits using OS
    Please note you cannot use sys.exit when threading..
    You need to use os._exit instead
    """
    print(msg)
    os._exit(1)

def close_if_time_pass(seconds):
    """
    Threading function, after N seconds print something and exit program
    """
    time.sleep(seconds)
    exit("Time passed, I still don't know your name..")

def main():
    # define close_if_time_pass as a threading function, 5 as an argument
    t = threading.Thread(target=close_if_time_pass,args=(5,))
    # start threading
    t.start()
    # ask him his name
    ask()

if __name__ == "__main__":
    main()
于 2012-12-25T10:23:38.670 に答える
0

スレッド化する必要はありません。単一のスレッドで特定の頻度で「ロジック」を実行し、各反復でタイムデルタ メソッドを介してカウントダウンを再計算できます。これは、ビデオゲームの生産数です。

この疑似コード メソッドを 60hz で実行するとします。

delta = timenow-timelast;
countdown -= delta;
if(input)
    processInputHere;

擬似コードを Python コードに変換して機能させることができるはずです。

于 2012-12-25T10:13:46.260 に答える