Por fin después de mucho batallar hemos hallado el resultado de este atascamiento que algunos de nuestros lectores de nuestro sitio han tenido. Si deseas aportar algo no dejes de dejar tu comentario.
Solución:
Algo para estudiar:
var choices = ["rock", "paper", "scissors"];
var map = ;
choices.forEach(function(choice, i)
map[choice] = ;
map[choice][choice] = "Was a tie"
map[choice][choices[(i+1)%3]] = choices[(i+1)%3] + " wins"
map[choice][choices[(i+2)%3]] = choice + " wins"
)
function compare(choice1, choice2)
Aquí hay una alternativa que funcionará para conjuntos expandidos. La suposición es que hay un número impar de posibilidades, y desde cualquier punto dado, del número total de oposición, leyendo hacia adelante desde nuestro punto dado (y dando vueltas cuando llegamos al final) la primera mitad ganará sobre el punto dado, y la segunda mitad perderá.
O otra forma de describirlo sería que la mitad de los oponentes restantes que preceden a nuestro punto dado perderán y la mitad que le sigue ganará.
Por lo tanto, el orden correcto en el choices
La matriz es crucial.
var choices = ["rock", "spock", "paper", "lizard", "scissors"];
var map = ;
choices.forEach(function(choice, i)
map[choice] = ;
for (var j = 0, half = (choices.length-1)/2; j < choices.length; j++)
var opposition = (i+j)%choices.length
if (!j)
map[choice][choice] = "Was a tie"
else if (j <= half)
map[choice][choices[opposition]] = choices[opposition] + " wins"
else
map[choice][choices[opposition]] = choice + " wins"
)
function compare(choice1, choice2)
Probablemente no pudo ver el problema debido a una mala sangría de su código. Con la sangría adecuada, el problema es claro:
if (choice1 === "paper")
if (choice2 === "rock")
return "paper wins";
else
if (choice2 === "scissors")
return "scissors wins";
if (choice1 === "scissors")
if (choice2 === "rock")
return "rock wins";
else
if (choice2 === "paper")
return "scissors wins";
Tu if (choice1 === "scissors") {
está dentro if (choice1 === "paper") {
. El código dentro nunca será alcanzado.
Tantas declaraciones if. son confusos
Además, todas esas declaraciones if bloquean el juego y dificultan la reutilización de la lógica para otro juego.
function referee()
var training = ;
function learn(winner,loser)
if (!training[winner]) training[winner] = ;
training[winner][loser]=1;
function judge(play1,play2)
if (play1 === play2) return 'tie';
return ( (training[play1][play2] === 1)? play1: play2 )+' wins!';
function validate(choice)
return choice in training;
function choices()
return Object.keys(training);
return
'learn': learn,
'judge': judge,
'validAction': validate,
'getChoices': choices
;
var ref = referee();
ref.learn('rock','scissors');
ref.learn('paper','rock');
ref.learn('scissors','paper');
do
var userChoice = prompt("Do you choose rock, paper or scissors?");
while(!ref.validAction(userChoice))
var choices = ref.getChoices(),
computerChoice = choices[Math.floor(Math.random()*choices.length)];
console.log("User Choice: " + userChoice);
console.log("Computer Choice: " + computerChoice);
console.log(ref.judge(userChoice, computerChoice));
valoraciones y comentarios
Agradecemos que quieras asentar nuestro quehacer fijando un comentario y dejando una puntuación te estamos eternamente agradecidos.