2016-02-25 63 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'') –

回答