puts 在 thread/loop 中只运行一次
puts only runs once in a thread/loop
我在 ruby 制作了一款叫作 'Pushback' 的街机游戏,你把每个数字都推回零,而游戏的 objective 是不让任何numbers exceeded 9. 但是...屏幕刷新有问题,屏幕输出线程只给出开始状态(000),除此之外不输出任何其他内容。
代码在这里:
$screen = '000'
Thread.new do
loop do
puts $screen
sleep 1
$screen[0] = ($screen[0].to_i + 1).to_s
$screen[1] = ($screen[1].to_i + 1).to_s
$screen[2] = ($screen[2].to_i + 1).to_s
clear
end
end
loop do
case gets.chomp.downcase
when ?l
$screen[0] = '0'
when ?m
$screen[1] = '0'
when ?r
$screen[2] = '0'
end
end
编辑:
(1)我试过在线程外创建一个函数,然后在线程内调用它,但还是不行。
(2) 答案之一是关于Mutex。我用过它并且有效。这是最终代码
我建议在使用时使用互斥锁来锁定您的 $screen
变量。
我在 ruby 制作了一款叫作 'Pushback' 的街机游戏,你把每个数字都推回零,而游戏的 objective 是不让任何numbers exceeded 9. 但是...屏幕刷新有问题,屏幕输出线程只给出开始状态(000),除此之外不输出任何其他内容。
代码在这里:
$screen = '000'
Thread.new do
loop do
puts $screen
sleep 1
$screen[0] = ($screen[0].to_i + 1).to_s
$screen[1] = ($screen[1].to_i + 1).to_s
$screen[2] = ($screen[2].to_i + 1).to_s
clear
end
end
loop do
case gets.chomp.downcase
when ?l
$screen[0] = '0'
when ?m
$screen[1] = '0'
when ?r
$screen[2] = '0'
end
end
编辑:
(1)我试过在线程外创建一个函数,然后在线程内调用它,但还是不行。
(2) 答案之一是关于Mutex。我用过它并且有效。这是最终代码
我建议在使用时使用互斥锁来锁定您的 $screen
变量。