2016-02-25 52 views
1

我正在制作一款名为'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

+1

你的'clear'命令在干什么?你在哪里定义它? – LukeS

+0

哦,对,我没有定义,它清除了屏幕(系统'清除') –

+1

你不必使用''.to_s'',一个数组可以做得很好''screen = [0, 0,0]''。然后您可以使用''screen.map!'更新所有屏幕! {| x | x + = 1}''(记住然后将'''0'''改为''0'') –

回答