题
我已经开始了创建一个相对较小的命令行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个字符以捕获箭头键。例如,读取为 ESC[A
;使用这种方法,我可以使用 key[2]
确定是否按下箭头键以及哪个。一切都很好,除了我也想捕获各种其他钥匙; q
对于任务日志, wasd
对于移动(按各种订单按箭头将是攻击方法),以及其他许多。问题立即清楚;如果 getch()
仅返回一个字符,箭头功能完全丢失。
我正在考虑如果没有简单的解决方案,请重新考虑箭头系统,但我几乎可以肯定必须有。诚然,我几乎不知道内部发生了什么 tty
, ,但我在某个地方读到,如果您只阅读1个字符,则箭头按下的多余字符保留在缓冲区中。我怎么可以访问上述缓冲区?另外,是否有一些聪明的方法可以说明 stdin
期望输入可变长度?
预先感谢您的所有帮助。
解决方案
不要阅读三个字符。阅读一个。
如果您读的一个角色是 ESC
, ,阅读另一个或两个字符,以查看它是否是箭头钥匙还是其他。如果是 q
, ,为此做事,然后重新开始。
其他提示
如果您考虑开发完整游戏, PyGame
也可能有用(最终 ncurses
).
这 getch()
可以升级摘要以读取箭头键,但是如何在箭头键的第一个字符和 ESC
钥匙?如果用户按下 ESC
, ,所描述的解决方案可能会等待下一个密钥按下。
我找不到任何解决最后案例的解决方案。
不隶属于 StackOverflow