私は基本的にテキストベースの戦闘ゲームであるシングルプレイヤーMUDを構築しています。ネットワーク化されていません。ユーザ入力を非同期で取得し、Pythonのイベントループに渡す
私はユーザーコマンドを収集し、それらをイベントループに非同期で渡す方法を理解していません。プレイヤーは、ゲームイベントが発生するといつでもコマンドを入力できる必要があります。 raw_inputを使用してプロセスを一時停止することはできません。私はselect.selectのようなやり方でスレッドを使う必要があると思います。
以下の例では、私はコマンドを受け取るようになっているuserInputListener()のモックアップ関数を持っており、入力があればそれらをコマンドQueに追加します。私はそこに私のユーザー入力を取得するにはどうすればよい
from threading import Timer
import time
#Main game loop, runs and outputs continuously
def gameLoop(tickrate):
#Asynchronously get some user input and add it to a command que
commandQue.append(userInputListener())
curCommand = commandQue(0)
commandQue.pop(0)
#Evaluate input of current command with regular expressions
if re.match('move *', curCommand):
movePlayer(curCommand)
elif re.match('attack *', curCommand):
attackMonster(curCommand)
elif re.match('quit', curCommand):
runGame.stop()
#... etc
#Run various game functions...
doStuff()
#All Done with loop, sleep
time.sleep(tickrate)
#Thread that runs the game loop
runGame = Timer(0.1, gameLoop(1))
runGame.start()
:
の場合は、次のようなイベントループを持っていますか?
さらに簡単に言えば、誰かが別のループが同時に実行されている間にユーザー入力を格納する例を表示できますか?私達がそれを遠くに得ることができるなら、私は残りを理解することができます。
は[ツイスト](http://twistedmatrix.com/)オプションですか? – sarnold
あなた自身を動かすのではなく、PyGameやcursesを使って入力を処理してみてください。 –
MUDはマルチユーザダンジョンを表していませんか?とにかく@AndrewGorcesterに同意すれば、おそらくホイールの再発明を避ける方が簡単でしょう。 –