3

私は、比較的小さなコマンドライン RPG を作成して、新たに発見した Python の筋肉を鍛えるという冒険に乗り出しましたが、すでに難問に突き当たりました。私は getch() のこの実装を使用しています:

def getch():
    fd = sys.stdin.fileno()
    old_settings = termios.tcgetattr(fd)
    tty.setraw(sys.stdin.fileno())
    key = sys.stdin.read(3)
    termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)

key矢印キーをキャプチャするために 3 文字で読み取るように設定しました。たとえば、Up は次のように読み込まれESC[Aます。このメソッドを使用key[2]すると、矢印キーが押されたかどうか、およびどのキーが押されたかを判断できます。他のあらゆる種類のキーもキャプチャしたいことを除いて、すべて順調です。qクエストログwasd用、移動用(矢印をいろいろな順番で押すのが攻撃方法になります)、その他多数。問題はすぐに明らかになります。getch()単一の文字のみを返す場合、矢印の機能は完全に失われます。

簡単な解決策がない場合は、矢印システムを完全に再考することを考えていますが、あるに違いないことはほぼ確実です. 確かに、私は 内で何が起こっているのかほとんど知りませんが、ttyどこかで読んだところによると、1 文字だけ読み取ると、矢印を押して余分な文字がバッファに保持されます。上記のバッファにアクセスするにはどうすればよいですか? あるいは、stdin可変長の入力を期待するように指示する賢い方法はありますか?

どうぞよろしくお願いいたします。

4

2 に答える 2

5

三文字読まない。1つ読んでください。

今読んだ 1 文字が である場合はESC、別の 1 文字または 2 文字を読んで、それが矢印キーか何かであったかどうかを確認します。だった場合は、qそのためのことを行ってから、最初からやり直してください。

于 2011-09-05T17:10:25.253 に答える
0

完全なゲームの開発を検討している場合は、PyGameも役立つ可能性があります (最終的にはncurses)。

スニペットはgetch()矢印キーを読み取るようにアップグレードできますが、矢印キーの最初の文字とキーを区別するにはどうすればよいESCでしょうか? ユーザーが を押した場合、ESC説明されているソリューションはおそらく次のキーが押されるまで待機します。

この最後のケースを処理するための解決策が見つかりませんでした。

于 2013-08-04T21:18:31.910 に答える