2017-03-09 71 views
2

我對Ruby很新,所以請給我任何建議,你可以提供。謝謝。 今天我幾乎完成了一個簡單的最後我問用戶是否想再次玩。我知道如何做If If語句和類似的東西,但不知道如何跳回到遊戲開始的代碼行。我做了一些研究,發現了一些叫做goto的東西,但發現它不應該被使用。無論如何,我可以去特定的代碼行,而不會搞砸一切? 感謝您的幫助。如何跳轉到特定的代碼行

的例子是:

print "Would you like to play again?" 
puts "Yes or no" 
again = gets.chomp! 
again.capitalize! 

if again == "Yes" 
(Code to send back to line 9) 
end 
+0

Ruby實際上並沒有'goto'聲明,而你真的不需要聲明,它立即讓你的代碼無法維護。你能舉出一個你想要做什麼的具體例子,這樣可以解釋Ruby解決問題的方式嗎? – tadman

+0

大多數遊戲都是圍繞[*事件循環*](https://en.wikipedia.org/wiki/Event_loop)的概念構建的,其中由用戶或各種遊戲內定時器發起的操作均由其處理。每個事件都是單獨處理的,通常按順序處理,其中事件可能是按鈕按下或鼠標移動。沒有必要回到任何特定的代碼行,因爲當處理程序結束時,它只是循環回去,並通過設計做其他事情。 – tadman

+0

嘗試將你的代碼放在'loop do .... end'循環中。這將繼續循環,直到遇到'break'或'break x'('x'是一個返回值)。有些人使用'while(true)... end',但我最喜歡'loop do'。有關詳細信息,請參見[Kernel#loop](http://ruby-doc.org/core-2.3.0/Kernel.html#method-i-loop),包括一個簡單示例。 –

回答

1

這樣做的依據是使用loop的方法,你可以重複的東西,直到你得到一個滿意的答案:

def play_again? 
    loop do 
    print "Would you like to play again? Y/N" 
    again = gets.chomp.capitalize 

    case (again) 
    when 'N' 
     return false 
    when 'Y' 
     return true 
    else 
     puts "Huh? I don't know what that means." 
    end 
    end 
end 

然後你就可以納入這個你主程序:

begin 
    run_game 
end while play_again? 

那將繼續運行直到play_again?返回false,這隻有在鍵入「N」時纔會發生。

+0

謝謝你的幫助tadman只有在它運行時說run_game是一個未定義的變量。如果有的話我應該怎麼設置?感謝您的答覆。 – Alex

+0

這是一個存根,你可以放入任何你的遊戲。你可以任意調用它,或者你可以把你的遊戲代碼放在那裏。不過,將它放在方法中會使程序的整體結構更加明顯。 – tadman

+0

非常感謝tadman。現在工作正常。感謝您的幫助。 – Alex