2017-03-10 7 views
-1

メソッドの出力をRubyの変数に保存する方法はありますか?たとえば、display_resultsの戻り値をwin_counterによって評価される変数に格納したければ、それは可能ですか?私は、display_resultsが勝者を持つたびにwin_counterをインクリメントするようにします。出力メソッド変数への戻り値? Ruby

win_combos = [ 
    ['rock', 'scissors'], 
    ['paper', 'rock'], 
    ['scissors', 'paper'], 
    ['rock', 'lizard'], 
    ['lizard', 'spock'], 
    ['spock', 'scissors'], 
    ['scissors', 'lizard'], 
    ['lizard', 'paper'], 
    ['paper', 'spock'], 
    ['spock', 'rock'] 
] 

scores = { player: 0, computer: 0 } 

def display_results(first, second, combos = []) 
    combos.each do |combo| 
    if combo == [first, second] 
     puts "Player won!" 
     break 
    elsif combo == [second, first] 
     puts "Computer won!" 
     break 
    end 
    end 
    if first == second 
    puts "It's a tie!" 
    end 
end 

def win_counter(player, computer, scores) 
    if display_results(player, computer) 
    scores[:player] = scores[:player] + 1 
    elsif display_results(computer, player) 
    scores[:computer] = scores[:computer] + 1 
    end 
    puts "players wins: #{scores[:player]}; computer wins: #{scores[:computer]}" 
end 

display_results('spock', 'rock', win_combos) 
win_counter('spock', 'rock', scores) 

答えて

0

変数をメソッド呼び出しと同じにするだけです。

if display_results(player, computer) == "Player won!" 

ただし、実際のゲームのロジックから勝者を印刷するロジックを分割する方が便利な場合があります。ブール値を返すルビメソッドでは、 '?'すなわち空ですか? display_resultsはゲームの結果のみを表示し、if文は使用しないでください。

関連する問題