2017-02-22 9 views
0

私はプロンプトでかなり簡単なダイスロールとレスポンスを設定しようとしていますが、正しく動作しません。ユーザーがロール、ロールまたはロールを入力するまで、ループに依頼し続けたいと思っていました。単純なコードで作業しないまでの文

def roll() 
    x = rand(5) + 1 
    y = rand(5) + 1 
    z = rand(5) + 1 
    puts "You rolled #{x},#{y},#{z}" 
    if x == y && y == z 
    puts "TRIPS! Trip #{x}s" 
    elsif x == y || y == z || x == z 
    puts "Pair!" 
    else 
    if x > y && x > z 
     puts "#{x} high" 
    end 
    if y > x && y > z 
     puts "#{z} high" 
    end 
    if z > x && z > y 
     puts "#{z} high" 
    end 
    end 
end 

puts "Type 'roll' when you're ready." 
entry = gets.chomp 

until entry == roll || Roll || ROLL 
    puts "Type 'roll' when you're ready." 
    entry = gets.chomp 
end 

roll() 

答えて

0

ここでは、より拡張性のあるRubyの方法で行う方法の例を示します。

あなたroll方法は1つの非常に単純なことに焦点を当てた作りでスタート:rand(5)0..4の範囲内の値を生成すること

def roll(sides = 6, count = 3) 
    Array.new(count) { rand(sides) + 1 } 
end 

は注意、それは5を生み出すことはありません。ここでの考え方は、任意の長さの配列を返すことです。既定で引数を公開することで、このメソッドを他の状況で簡単に再利用できます。総計でそれらを操作するときにかなり役立つ代わりに任意の3つの変数の配列構造を使用

loop do 
    puts "Type 'roll' when you're ready." 
    entry = gets.chomp 

    case (entry.downcase) 
    when 'roll' 
    rolls = roll 

    puts "You rolled #{rolls.join(', ')}" 

    case (rolls.uniq.length) 
    when 1 
     puts "TRIPS! Trip #{rolls[0]}s" 
    when 2 
     puts "Pair!" 
    else 
     puts "#{rolls.max} high" 
    end 

    break 
    when 'quit' 
    break 
    end 
end 

メインループに表示ロジックの全てを動かします。この状況では、uniqmaxのようなものは楽になります。

2
# Remove these two lines and just use them in the while/until 
# puts "Type 'roll' when you're ready" 
# entry = gets.chomp 


entry = '' 
# Use String.downcase on entry because the user could type rOLL or RoLl 
while entry.downcase != 'roll' # or you can use until entry.downcase == 'roll' 
    puts "Type 'roll' when you're ready." 
    entry = gets.chomp 
end 

あなたは存在しない値にエントリを比較しています。文字列と比較する必要があります。

ロールは、ある種のクラス/モデル/オブジェクトでなければなりません。例えば慣例によって

class Roll 
    # create roll 
    def initialize() 
    end 
end 
roll = Roll.new 
# or for an existing class like Arrays 
array = Array.new 

ROLLは、以前に定義された定数であろう。

ROLL = 7 
# => 7 
ROLL = 4 
# => warning: already initialized constant ROLL 
関連する問題