2016-09-07 8 views
0

私はここでルビプログラムを持っていますが、cはハッシュで構成されています。基本的に、ユーザーがlまたはpまたはscを入力すると、コンピューター生成キーが、プレーヤーまたはユーザーである最初の変数の基準に一致するかどうかがチェックされます。それが基準に合っていれば、あなたは勝ちます。しかし、そうでなければ、それはあなたを緩やかに返すでしょう。それ以外の場合は、同じであればネクタイが印刷されます。上記のコードでRubyはif文をスキップします

MY_CHOICES = { 
'l' => 'light', 
'p' => 'paper', 
'sc' => 'scan', 
} 

def test?(first, second) 
    (first == 'p' && second == MY_CHOICES ['l']) || 
    (first == 'l' && second == MY_CHOICES ['p']) || 
    (first == 'sc' && second == MY_CHOICES ['sc']) || 
    (first == 'l' && second == MY_CHOICES ['l']) 
end 

def print_results(player, computer) 
    if test?(player, computer) 
    puts("You won!") 
    elsif test?(computer, player) 
    puts("Computer won! You loose!") 
    else 
    puts("It's a tie!") 
    end 
end 

puts "Enter a key: " 
choice = gets().chomp() 
computer_choice = MY_CHOICES.values.sample 
print_results(choice, computer_choice) 
puts("You chose: #{choice}, computer choose: #{computer_choice}" 

、私のコードは、コードをスキップし、常に私は私がここで行方不明ですしていないものを「それは引き分けだ」印刷されています。何か案が?

+0

@etusm:テストは例として真

に評価することはありませんので、ユーザーはrps.rbとランニングとしてこれを保存し、「L」、「P」、および「SC」を入力している何が問題あなたはそれを見ますか? – Linuxios

+0

あなたはプレイヤーとコンピュータに異なる選択肢を使用しています - それは意図的ですか? – Linuxios

+0

@Linuxios:修正しました。 –

答えて

-2

はあなたのコードビットを固定しようとしたことがあり:

def test?(player, computer) 
    (player== 'rock' && computer== VALID_CHOICES['sc']) || 
    (player== 'paper' && computer== VALID_CHOICES['r']) || 
    (player== 'scissors' && computer== VALID_CHOICES['sc']) || 
    (player== 'paper' && computer== VALID_CHOICES['sp']) 
end 
+0

これがどうやって問題を解決するのか分かりません。パラメータ名を変更するだけでした。 – Linuxios

3

あなたは、ユーザの入力を取得し、「ロック」、「紙」と「はさみ」に対してそれをテストしている、しかし、あなたは次のように述べているしました

> ruby rps.rb 
Enter a key: 
rock 
You won! 
You chose: rock, computer choose: light 
+0

編集しました。それはいつも「それはネクタイです!」と出力しています。 –

関連する問題