1

(运行 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。甚至可能是不可能的。但如果有办法,我真的很想知道。

4

1 回答 1

3

创建交互式终端程序最有用的库是CursesReadline。前者让您可以在终端中的任意位置移动光标、以颜色打印、创建单独的“窗口”等。后者本质上getsirb.

如果你想在线程中使用 Curses,你可以查看我的 Ruby fork,它添加了这个功能(以及重构整个 curses 库)。

于 2012-08-30T04:05:06.163 回答