¡Gran día para todos!
Me preguntaba por qué si ya elegí "rock" (en la selección de jugador const) y la computadora eligió "rock", me imprime que "Gana la computadora" o, a veces, imprime que gané el juego en lugar de ser un empate. Lo mismo ocurre con el otro elemento en el código.
¿Qué habría pasado para que el resultado del juego también fuera aleatorio?
Aquí está mi código:
function computerPicks() { let compChoices = ["rock", "paper", "scissors"] // let computer pick [rock, paper, scissors] let randomizeChoice = Math.floor(Math.random() * compChoices.length) + 1 // randomize rock paper and scissors if (randomizeChoice === 1) { return "rock"; } if (randomizeChoice === 2) { return "paper"; } if (randomizeChoice === 3) { return "scissors"; } } console.log(computerPicks()); // view computer's choice function playRound(playerSelection, computerSelection) { if (playerSelection === "rock") { if (computerSelection === "rock") { return "It is a tie!!" } else if (computerSelection === "paper") { return "The computer wins!"; } else { return "You win this game!"; } } else if (playerSelection === "paper") { if (computerSelection === "paper") { return "It is a tie!!" } else if (computerSelection === "rock") { return "The computer wins!"; } else { return "You win this game!"; } } else { if (computerSelection === "rock") { return "Computer wins!"; } else if (computerSelection === "paper") { return "User wins!"; } else { return "Draw!"; } } } const playerSelection = "scissors"; // primary choice const computerSelection = computerPicks(); // calls the randomized choices console.log(playRound(playerSelection, computerSelection)); // print out the resultCreo que también es aleatorio debido a cómo llamé al aleatorizador o cómo se declaró en la función computerPicks().
La pregunta ha sido respondida correctamente , así que esto es solo una sugerencia de los cambios que podrías hacer en tu juego que podrían simplificar las cosas.
Tratar con muchos niveles de sentencias if/else puede ser difícil de comprender, mantener y depurar.
Podría reducir gran parte de la complejidad almacenando parte de la lógica del motor en un objeto que defina qué opciones superan a qué opciones (vea el mal llamado whatBeatsWhat ).
// Explicit mapping of winning key (ie "rock") beating losing value (ie "scissors"). const whatBeatsWhat = { rock: "scissors", paper: "rock", scissors: "paper", } // Derive computerChoices from keys of whatBeatsWhat. const computerChoices = Object.keys(whatBeatsWhat) function computerPicks() { // Randomize rock paper and scissors. let randomizeChoice = Math.floor(Math.random() * computerChoices.length) // randomizeChoice will be one of [0,1,2] representing all possible indices of computerChoices. return computerChoices[randomizeChoice] } function playRound(playerSelection, computerSelection) { if (playerSelection === computerSelection) { return "It is a tie!!" } // Check if playerSelection in whatBeatsWhat maps to computerSelection // and if so, player has beaten computer. if (whatBeatsWhat[playerSelection] === computerSelection) { return "You win this game!" } // Undoubtedly, whatBeatsWhat[computerSelection] === playerSelection return "The computer wins!" } const playerSelection = "scissors" const computerSelection = computerPicks() const result = playRound(playerSelection, computerSelection) console.log(`${result} (${playerSelection} vs ${computerSelection})`)Su programa no se comporta como se esperaba porque está utilizando el operador '===' para comparar cadenas. El operador '===' es un operador de igualdad estricta, lo que significa que solo devolverá verdadero si ambos operandos se refieren al mismo objeto. En su caso, '==' sería más apropiado ya que está verificando la igualdad básica.