Hex*_*ory 3 python input getch
我已经开始创建一个相对较小的命令行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)
Run Code Online (Sandbox Code Playgroud)
我已经key设置读取3个字符来捕获箭头键.例如,读取为ESC[A; 使用这种方法,我可以key[2]用来确定是否按下了箭头键和哪一个.一切都很好,除了我还想捕获各种其他键; q对于任务日志,wasd对于移动(按各种顺序的箭头将是攻击的方法),以及许多其他.问题很明显; 如果getch()仅返回单个字符,箭头功能将完全丢失.
如果没有简单的解决方案,我正在考虑完全重新考虑箭头系统,但我几乎肯定必须有.不可否认,我对其中发生的事情知之甚少tty,但我在某处读到,如果你只读了1个字符,那么箭头按下的多余字符将保留在缓冲区中.我怎么去访问所说的缓冲区?或者,是否有一些聪明的方法stdin来指望可变长度的输入?
提前感谢您提供任何和所有帮助.
不要读三个字.读一个.
如果您刚刚阅读的是一个字符ESC,请阅读另一个或两个字符以查看它是否为箭头键或其他任何字符.如果它是a q,为此做点什么,然后重新开始.