Ruby 在线程/循环中只运行一次
我用ruby制作了一个名为“Pushback”的街机游戏,你把每个数字都推回到零,游戏的目标是不让任何数字超过9。但是刷新屏幕时有一个问题,屏幕输出线程只给出开始状态(000),不输出除此之外的任何内容 代码如下:Ruby 在线程/循环中只运行一次,ruby,multithreading,output,Ruby,Multithreading,Output,我用ruby制作了一个名为“Pushback”的街机游戏,你把每个数字都推回到零,游戏的目标是不让任何数字超过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].
$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) 其中一个答案是关于互斥的。我用了它,它起了作用。这是最后的代码
我建议使用互斥锁锁定
$screen
变量
您可以在这里看到。您的
clear
命令在做什么?你在哪里定义它?哦,对了,我没有定义它,它会清除屏幕(系统“清除”),你不必使用。要使用,数组就可以了屏幕=[0,0,0]
。然后,您还可以使用screen.map更新所有屏幕!{| x | x+=1}
(记住然后将'0'
更改为0
)谢谢,这是一个很好的解决方案。要清除屏幕,您可以使用system('clear')
,它可以在Mac osx上工作,可能还有其他unix系统。