我正在制作一款名为'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].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
EDITS:
(1)我试图做的线程之外的功能,然后从里面调用它,但仍然不工作。
(2)其中一个答案是关于互斥。我用它,它的工作。下面是最终代码
https://gist.github.com/nolcay/c6572089c8292331e2f3
你的'clear'命令在干什么?你在哪里定义它? – LukeS
哦,对,我没有定义,它清除了屏幕(系统'清除') –
你不必使用''.to_s'',一个数组可以做得很好''screen = [0, 0,0]''。然后您可以使用''screen.map!'更新所有屏幕! {| x | x + = 1}''(记住然后将'''0'''改为''0'') –