Esto es para la tarea de piedra, papel o tijera de The Odin Project. Las variables playerSelection y computerSelection no están definidas cuando ejecuto el código. ¿Por qué se muestra indefinido incluso si definí esas variables?
let playerScore = 0; let computerScore = 0; let playerSelection = 'scissors'; const choices = ['rock', 'paper', 'scissors']; function computerPlay() { let computerResult = [Math.floor(Math.random() * choices.length)]; return computerSelection = choices[computerResult]; } console.log(`Player Score: ${playerScore}`); console.log(`Computer Score: ${computerScore}`); console.log(`Computer picked ${computerPlay()}`); function playRound(playerSelection, computerSelection) { if (computerSelection === playerSelection) { console.log(`${playerSelection} vs. ${computerSelection}. It's a tie!`); } else if (computerSelection === 'rock' && playerSelection === 'scissors'){ console.log(`${playerSelection} vs. ${computerSelection}. You lose! Try again next time.`); computerScore++; } else if (computerSelection === 'paper' && playerSelection === 'rock'){ console.log(`${playerSelection} vs. ${computerSelection}. You lose! Try again next time.`); computerScore++; } else if (computerSelection === 'scissors' && playerSelection === 'paper'){ console.log(`${playerSelection} vs. ${computerSelection}. You lose! Try again next time.`); computerScore++; } else if (playerScore === 'rock' && computerSelection === 'scissors'){ console.log(`${playerSelection} vs. ${computerSelection}. You win!`); playerScore++; } else if (playerScore === 'paper' && computerSelection === 'rock'){ console.log(`${playerSelection} vs. ${computerSelection}. You win!`); playerScore++; } else (playerScore === 'scissors' && computerSelection === 'paper') console.log(`${playerSelection} vs. ${computerSelection}. You win!`); playerScore++; } playRound();Olvidaste pasar los argumentos a tu función.
playRound(compuplayerSelection, computerSelection);También escribiste en las declaraciones de victoria playerScore en lugar de playerSelection y olvidaste poner el "si" en el último.
let playerScore = 0; let computerScore = 0; let playerSelection = 'scissors'; const choices = ['rock', 'paper', 'scissors']; function computerPlay() { let computerResult = [Math.floor(Math.random() * choices.length)]; return computerSelection = choices[computerResult]; } console.log(`Player Score: ${playerScore}`); console.log(`Computer Score: ${computerScore}`); console.log(`Computer picked ${computerPlay()}`); function playRound(playerSelection, computerSelection) { if (computerSelection === playerSelection) { console.log(`${playerSelection} vs. ${computerSelection}. It's a tie!`); } else if (computerSelection === 'rock' && playerSelection === 'scissors'){ console.log(`${playerSelection} vs. ${computerSelection}. You lose! Try again next time.`); computerScore++; } else if (computerSelection === 'paper' && playerSelection === 'rock'){ console.log(`${playerSelection} vs. ${computerSelection}. You lose! Try again next time.`); computerScore++; } else if (computerSelection === 'scissors' && playerSelection === 'paper'){ console.log(`${playerSelection} vs. ${computerSelection}. You lose! Try again next time.`); computerScore++; } else if (playerSelection === 'rock' && computerSelection === 'scissors'){ console.log(`${playerSelection} vs. ${computerSelection}. You win!`); playerScore++; } else if (playerSelection === 'paper' && computerSelection === 'rock'){ console.log(`${playerSelection} vs. ${computerSelection}. You win!`); playerScore++; } else if (playerSelection === 'scissors' && computerSelection === 'paper') console.log(`${playerSelection} vs. ${computerSelection}. You win!`); playerScore++; } playRound(playerSelection, computerSelection);Está confiando en esta llamada a computerPlayer
console.log(`Computer picked ${computerPlay()}`); para crear la variable global computerSelection aquí
return computerSelection = choices[computerResult]; Luego, sombrea estas variables globales dentro del alcance de playRound definiendo los argumentos para que tengan los mismos identificadores.
function playRound(playerSelection, computerSelection) { La solución rápida y desordenada es llamar a playRound , pasando las variables desde el ámbito externo
playRound(playerSelection, computerSelection) playRound tiene llaves desequilibradas y errores tipográficos como playerScore === 'rock' y else en lugar de else if .
Estas líneas están creando una matriz que contiene un solo número en el rango [0, 2] .
let computerResult = [Math.floor(Math.random() * choices.length)]; return computerSelection = choices[computerResult];y usar esta matriz como índice de otra matriz. Esto apenas funciona debido a la coerción de tipo.
Considere alguna refactorización, para reestructurar este código para depender menos de generar y usar globales en lugares extraños.
Tampoco necesita verificar exhaustivamente cada combinación de posibilidades. Si ha comprobado todos los resultados en los que el jugador no gana , todo lo que queda son los resultados en los que el jugador gana .
Un ejemplo:
const rps = [ 'rock', 'paper', 'scissors' ]; let playerScore = 0; let computerScore = 0; const pickRandom = arr => arr[Math.floor(Math.random() * arr.length)]; const playRound = (playerSelection, computerSelection) => { if (computerSelection === playerSelection) { console.log(`${playerSelection} vs. ${computerSelection}. It's a tie!`); } else if ( (computerSelection === 'rock' && playerSelection === 'scissors') || (computerSelection === 'paper' && playerSelection === 'rock') || (computerSelection === 'scissors' && playerSelection === 'paper') ) { console.log(`${playerSelection} vs. ${computerSelection}. You lose! Try again next time.`); computerScore++; } else { console.log(`${playerSelection} vs. ${computerSelection}. You win!`); playerScore++; } }; let rounds = 3; while (rounds--) { let playerChoice = 'scissors'; // make this interactive! let computerChoice = pickRandom(rps); console.log(`Player picked: ${playerChoice}`); console.log(`Computer picked ${computerChoice}`); playRound(playerChoice, computerChoice); console.log(`Player Score: ${playerScore}`); console.log(`Computer Score: ${computerScore}`); }Sin embargo, es posible que desee cambiar rápidamente hacia un enfoque orientado a objetos para desenredar más globales y contener el estado del juego en un solo objeto.