Saltar al contenido

Piedra, papel o tijera en JavaScript

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *