私は、新しい小さなPythonの筋肉を曲げるために、比較的小さなコマンドラインRPGを作成するという冒険を取り上げましたが、私はすでに難点にぶつかっています。私は)(getchは、この実装を使用しています: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)
私は矢印キーをキャプチャするために3つの文字で読むことkey
セットを持っています。例えば、アップはESC[A
と読み込まれます。この方法では、key[2]
を使って、矢印キーが押されたかどうか、そしてどれが押されたのかを調べることができます。すべての井戸と良い、私はまた、他のすべての種類のキーをキャプチャしたいと思います。クエストログの場合はq
、移動の場合はwasd
(攻撃の方法になると様々な順序で矢印を押す)などがあります。問題は即座に明らかです。 getch()
が1文字だけを返す場合、矢印機能は完全に失われます。
単純な解決策がない場合は、矢印システムを再考することを検討していますが、必ずあるはずです。確かに、私はtty
の中で何が起こっているのか分かっていませんが、あなたが1文字だけを読むと、矢印プレスから余分な文字がバッファに残されているということをどこかで読んでいます。バッファにアクセスするにはどうすればいいですか?代わりに、stdin
に可変長の入力を期待するように指示する巧妙な方法はありますか?
ご協力いただきありがとうございます。
これは、ユーザーが矢印キーを2回押す必要があります。これはあまり面倒ではありません。 –
それはありません。 'read(3)'を 'read(1)'に置き換え、次に '\ x1b'を探すif文と、どのキーが押されたのかを見る' read(2) 'があります。 – SingleNegationElimination
ああ、そうです。完璧な意味合いを持つ。ありがとう、トークン。 –