Creé cpuPlay para llamar a piedra, papel o tijera, cada vez que se llama un número aleatorio entre 0 y 2. Esta función funciona correctamente, pero rps() es la función que parece que no puedo construir correctamente después de 3 días de hacer esto. No importa cómo construya esto, parece que sigo obteniendo una de cuatro respuestas cuando llamo a rps(). Las respuestas que obtengo son 'piedra', 'papel', 'tijeras', 'indefinido' .
Antes pensé que era porque usé .toLowerCase() en playerChoice, pero de cualquier manera, esta función ha estado dando los mismos resultados. Si continúa ejecutando rps('paper'), eventualmente se muestra. No estoy seguro de cómo debo ir más allá con este problema, o tal vez se supone que no debo poder comparar. Ya ni siquiera sé.
function cpuPlay(){ let numberGen = Math.floor(Math.random() * 3) if (numberGen === 0){ return 'rock' } if (numberGen === 1){ return 'paper' } if (numberGen === 2){ return 'scissors' } } // cpuPlay() function rps(playersChoice){ if(playersChoice == 'paper' && cpuPlay() == 'rock'){ console.log('rock') } else if (playersChoice == 'paper' && cpuPlay() == 'paper'){ console.log('paper') } else if (playersChoice == 'paper' && cpuPlay() == 'scissors'){ console.log('scissors'); } } rps('paper')Está llamando a cpuPlay() en cada expresión, por lo que es posible que cada condicional falle, porque el valor de cpuPlay() está cambiando, puede probar esto:
function cpuPlay(){ let numberGen = Math.floor(Math.random() * 3) if (numberGen === 0){ return 'rock' } if (numberGen === 1){ return 'paper' } if (numberGen === 2){ return 'scissors' } } function rps(playersChoice){ let currentCpuPlay = cpuPlay() if(playersChoice == 'paper' && currentCpuPlay == 'rock'){ console.log('rock') } else if (playersChoice == 'paper' && currentCpuPlay == 'paper'){ console.log('paper') } else if (playersChoice == 'paper' && currentCpuPlay == 'scissors'){ console.log('scissors'); } } rps('paper')cpuPlay() genera un valor aleatorio cada vez que lo llamas .
Estás generando un valor aleatorio y comparándolo con rock . Luego genera un nuevo valor aleatorio y lo compara con paper . Luego genera un tercer valor aleatorio y lo compara con scissors .
Debe generar la respuesta del reproductor de la CPU una vez , en la parte superior de la función de comparación y luego comparar ese valor cada vez.
function rps(playersChoice){ const cpuChoice = cpuPlay(); if(playersChoice == 'paper' && cpuChoice == 'rock'){el cpuPlay() está devolviendo resultados aleatorios en cada declaración if
entonces, cuando en el primer if y el resultado no es rock, saltará a la siguiente declaración nuevamente, luego, pero en el segundo if , cpuPlay() está devolviendo resultados diferentes, por lo que al final su función tiene la posibilidad de no tener resultados.
function rps(playersChoice){ let cpuRoll = cpuPlay(); // only random once per game if(playersChoice == 'paper' && cpuRoll == 'rock'){ console.log('rock') } else if (playersChoice == 'paper' && cpuRoll == 'paper'){ console.log('paper') } else if (playersChoice == 'paper' && cpuRoll == 'scissors'){ console.log('scissors'); } }