1

(Ruby1.9.3を実行しているWindows7 x64)

状況は次のとおりです。Rubyでテキストゲームを作成し、従来のgets方法を使用してユーザーから入力を取得しています。ゲームで何かが起こっているとき(つまり、画面に何かが印刷されているとき)、ユーザーが入力のために入力したものはすべて失われ、ユーザーは新しい行に入力したものを入力し続ける必要があります。迷子になる前に最初に入力したものはまだそこにあり、表示されません。

上記が意味をなさない場合は、このコードを実行してみてください。問題が発生します。

Thread.new do
    loop do
        puts "Hello!"
        sleep 2
    end
end

Thread.new do
    loop do
        gets
    end
end

私が欲しいのは、印刷された行(この場合"Hello!")をユーザーが入力している行の前に配置することです。

これを実現するには、WindowsAPIを詳しく調べる必要があるかもしれないことを理解しています。それも不可能かもしれません。でも方法があれば、本当に知りたいです。

4

1 に答える 1

3

インタラクティブなターミナルプログラムを作成するための最も便利なライブラリは、CursesReadlineです。前者を使用すると、ターミナル内の任意の場所にカーソルを移動したり、色で印刷したり、個別の「ウィンドウ」を作成したりできます。後者はgets、コマンド履歴とオートコンプリートを備えた、の強力な代替手段irbです。

スレッドでCursesを使用したい場合は、Rubyのフォークをチェックしてください。これにより、この機能が追加されます(また、cursesライブラリ全体がリファクタリングされます)。

于 2012-08-30T04:05:06.163 に答える