如何使交互式Ruby程序更好?

时间:2012-08-30 02:41:27

标签: ruby

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

1 个答案:

答案 0 :(得分:3)

用于创建交互式终端程序的最有用的库是CursesReadline。前者允许您将光标移动到终端中的任何位置,打印颜色,创建单独的“窗口”等。后者本质上是gets的强大替代,具有命令历史记录和自动完成功能,如irb

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