Hola, soy nuevo en Ruby y me he sentado durante mucho tiempo tratando de averiguar qué hice mal en este código, no hay ningún error, pero no me está dando el resultado deseado como un juego de rock normal. tijeras de papel Aquí está mi código:
puts "Rock, Paper or Scissors" choice = gets.chomp cchoice = ["Rock", "Paper","Scissors"] comp = rand(1..3) won = false puts "Computer chose #{cchoice[comp]}" if (choice == "Rock") if (comp == 2) won = false end if (comp == 3) won = true end elsif (choice == "Paper") if (comp == 3) won = false end if (comp == 1) won = true end elsif (choice == "Scissors") if (comp == 1) won = false end if (comp == 2) won = true end else puts "I dont know what that means so-" end if (won) puts "YOU WON!!!" else puts "You lost.." end¡Gracias por cualquier ayuda!
Las reglas de piedra, papel o tijera se pueden expresar como un simple hash:
conditions = { "Rock" => "Scissors", "Paper" => "Rock", "Scissors" => "Paper" }Entonces, simplemente puede verificar si un jugador ganó al otro con:
if conditions[player_1] == player_2 puts "Player one wins!" elsif player_1 == player_2 puts "Its a draw!" else puts "Player two wins!" endEsto es mucho menos complejo que un árbol de sentencias if/else anidadas.
conditions = { "Rock": "Scissors", "Paper": "Rock", "Scissors": "Paper" } puts "Rock, Paper or Scissors" choice = gets.chomp.capitalize cchoice = conditions.keys.sample puts "Computer chose #{ cchoice }" if conditions[choice] == cchoice puts "You won!" elsif cchoice == choice puts "Its a draw." elsif conditions[cchoice] == choice puts "You lost." else puts "#{choice} is not a valid option" endEsto cubre los cuatro resultados potenciales que son:
Además, en lugar de rand , puede usar Array#sample para seleccionar un elemento aleatorio de las claves del hash, lo que evita la necesidad de usar índices de matriz.
Su generador de números aleatorios genera números entre 1-3, debería estar entre 0-2 ya que está tratando de indexar una lista
comp = rand(0..2)También cambie la comparación en la cláusula if para reflejar el cambio anterior,
Otra cosa que quizás haya olvidado es la condición de empate (si ambos seleccionan lo mismo)