(运行Ruby 1.9.3的Windows 7 x64)
情况就是这样:我在Ruby中制作了文本游戏,并且我使用传统的gets
方法从用户那里获取输入。当游戏中发生某些事情(即,正在将东西打印到屏幕上)时,无论用户输入什么输入都会丢失,并且用户必须继续键入他/她在新行上键入的内容。他/她在迷路之前最初输入的内容仍然存在,只是没有显示出来。
如果以上没有意义,请尝试执行此代码,您将看到问题:
Thread.new do
loop do
puts "Hello!"
sleep 2
end
end
Thread.new do
loop do
gets
end
end
我想要的是打印的行(在这种情况下为"Hello!"
)放在用户输入的行之前。
我知道要实现这一点,我可能需要深入研究Windows API。甚至可能是不可能的。但如果有办法,我真的很想知道。
答案 0 :(得分:3)
用于创建交互式终端程序的最有用的库是Curses和Readline。前者允许您将光标移动到终端中的任何位置,打印颜色,创建单独的“窗口”等。后者本质上是gets
的强大替代,具有命令历史记录和自动完成功能,如irb
如果你想使用带有线程的Curses,你可以看看我的fork of Ruby,它增加了这个功能(以及重构整个curses库)。