私は、比較的小さなコマンドライン 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
可変長の入力を期待するように指示する賢い方法はありますか?
どうぞよろしくお願いいたします。