端末用のスネークゲーム、つまり印刷による出力を書いています。
以下は問題なく動作します。
while status[snake_monad] do
print to_string draw canvas, compose_all([
frame,
specs,
snake_to_hash(snake[snake_monad])
])
turn! snake_monad, get_dir
move! snake_monad, specs
sleep 0.25
end
turn!
しかし、もちろん、ing をブロックしたくありません。だから私はそれを新しいスレッドに入れてループさせました:
Thread.new do
loop do
turn! snake_monad, get_dir
end
end
while status[snake_monad] do
...
# no turn! here
...
end
これも論理的に機能します (蛇が回っています) が、出力には何らかの形で改行が散在しています。入力スレッド ( ^C
) を強制終了するとすぐに、再び正常に見えます。
では、なぜ、どのようにスレッドが出力に影響を与えるのでしょうか? また、この問題を回避するにはどうすればよいですか?
(私はスレッドについてはあまり知りません。Ruby についてはさらに詳しく知っています。同じ端末で同時に入力と出力を行うと、問題がさらに悪化するのではないでしょうか...)
また(それほど重要ではありません):私のプログラムをできるだけ純粋にしたいのですが、すべてを渡しながらノンブロッキングで入力を取得することはいくらか簡単に可能でしょうか?
ありがとうございました!