Programación de un Juego de Piedra, Papel o Tijera en JavaScript

Clase 13 de 84Curso Gratis de Programación Básica

Resumen

Ya tenemos un juego funcional de piedra papel o tijera, pero ¿qué tal si lo cambiamos para que gane el mejor de tres partidas?

Fundamentos para la práctica

Antes de empezar a hacer modificaciones, repasemos los fundamentos que te permitirán hacerlo:

Operadores de comparación en JavaScript

Hay algunos operadores que te ayudarán a escribir condiciones en tu código:

Operador Significado
== Retorna “verdadero” si un lado es igual al otro (Ojo, NO distingue entre números y strings. Por lo tanto: 3 == “3” //verdadero).
=== Retorna “verdadero” si un lado es estrictamente igual al otro (Ojo, SÍ distingue entre números y strings. Por lo tanto: 3 === “3” //falso).
!= Retorna “verdadero” si un lado es diferente del otro lado (Ojo, NO distingue entre números y strings. Por lo tanto: 3 != “3” //falso).
!== Retorna “verdadero” si un lado es estrictamente diferente del otro lado (Ojo, SÍ distingue entre números y strings. Por lo tanto: 3 != “3” //verdadero).
&& Funciona como un “y” en la condición. Te permite juntar varias condiciones y devuelve “verdadero” solo si todas se cumplen.
< Devuelve “verdadero” si el valor a la izquierda es menor que el valor a la derecha.
<= Devuelve “verdadero” si el valor a la izquierda es menor o igual que el valor a la derecha.
> Devuelve “verdadero” si el valor a la izquierda es mayor que el valor a la derecha.
>= Devuelve “verdadero” si el valor a la izquierda es mayor o igual que el valor a la derecha.

💡 También tienes el operador ||, que funciona como un “o” en la condición. Te permite juntar varias condiciones, y devuelve “verdadero” si alguna de ellas se cumple.

No pudimos incluirlo en la tabla por un problema técnico, pero sientete libre de usarlo también 👍

💡 Aquí te dejo un fragmento de código que puedes copiar y pegar en la consola del navegador. Solo cambia la condición y los operadores para que experimentes como funciona cada operador 👍

if ( X == Y ) {
	console.log( "Verdadero" );
} else {
	console.log( "Falso" );
}

Ciclos While en JavaScript

while es una instrucción en JavaScript (al igual que if) que te permite crear ciclos. Su estructura es la siguiente:

while ( condición ) {
    //Código a ejecutar mientras se cumpla la condición
}

Por ejemplo:

while ( diaDeLaSemana < 6 ) {
    irA( escuela );
    diaDeLaSemana = diaDeLaSemana + 1;
}

//El bloque de código se repetirá hasta que diaDeLaSemana = 6

anímate a experimentar un poco con esto, y luego acompáñame a realizar la práctica de hoy 😉

Cómo implementar ciclos en el juego de piedra, papel y tijera

Empecemos 😁

1. Agrega variables para contar las victorias

Primero agrega un par de variables que te permitan contar cuantas victorias, derrotas y empates ha acumulado el jugador. Y también necesitas modificar el juego para que el jugador los acumule con cada partida.

Para que el juego no se sienta tan largo vamos a detenerlo luego de 2 victorias o 2 derrotas. Así que es buena idea programar una función que le informe al jugador los resultados finales, y podrías agregar una segunda función que reinicie las variables para un próximo juego.

Intenta hacerlo por tu cuenta, y cuando termines compáralo con el ejemplo de aquí abajo 🙂

//FUNCIÓN PARA LAS ALERTAS
function alertaDeElecciones( quienElije , eleccion ) {
    if ( eleccion == 1 ) {
        alert( "El " + quienElije + " eligió 🥌" );
    } else if ( eleccion == 2 ) {
        alert( "El " + quienElije + " eligió 📄" );
    } else if ( eleccion == 3 ) {
        alert( "El " + quienElije + " eligió ✂️" );
    } else {
        alert( "Hubo un error con la elección del " + quienElije + " 🙃" );
    }
}

//FUNCIÓN PARA GENERAR NÚMEROS ALEATORIOS
function numeroAleatorio( min , max ) {
    return Math.floor( Math.random() * ( max - min + 1 ) + min );
}

//FUNCIÓN PARA DECIDIR EL GANADOR
function quienGanaEntre ( eleccionJugador , eleccionOponente ) {
    if ( eleccionJugador == eleccionOponente ) {
        alert( "¡EMPATE! 🤼" );
        empates = empates + 1;
    } else if ( eleccionJugador == 1 && eleccionOponente == 3 ) {
        alert( "¡GANASTE! 🥳" );
        victorias = victorias + 1;
    } else if ( eleccionJugador == 2 && eleccionOponente == 1 ) {
        alert( "¡GANASTE! 🥳" );
        victorias = victorias + 1;
    } else if ( eleccionJugador == 3 && eleccionOponente == 2 ) {
        alert( "¡GANASTE! 🥳" );
        victorias = victorias + 1;
    } else {
        alert( "PERDISTE... 😢" );
        derrotas = derrotas + 1;
    }
}

//FUNCIÓN PARA NOMBRAR AL GANADOR FINAL
function mostrarResultados() {
    alert("Has acumulado " + 
        victorias + " victorias, " + 
        derrotas + " derrotas y " + 
        empates + " empates.");

    if ( victorias == 2 ) {
        alert( "TÚ eres el GANADOR" );
        resetearVariables();
    } else if ( derrotas == 2 ) {
        alert( "EL COMPUTADOR es el GANADOR" );
        resetearVariables();
    } else {
        alert( "Hubo un error... 🙃");
        resetearVariables();
    }
}

//FUNCIÓN PARA RESETEAR VARIABLES DE VICTORIAS
function resetearVariables() {
    victorias = 0;
    derrotas  = 0;
    empates   = 0;
}

//ELECCIÓN DEL JUGADOR
let eleccionDelJugador = 0;
eleccionDelJugador = prompt( "Elige: 1 para 🥌, 2 para 📄, 3 para ✂️" );
alertaDeElecciones( "jugador" , eleccionDelJugador );

//ELECCIÓN DEL COMPUTADOR
let eleccionDelComputador = numeroAleatorio( 1 , 3 );
alertaDeElecciones( "computador" , eleccionDelComputador );

//DECIDIENDO EL GANADOR
let victorias = 0;
let derrotas  = 0;
let empates   = 0;
quienGanaEntre ( eleccionDelJugador , eleccionDelComputador );

2. Implementa el ciclo “while”

Es momento de implementar el ciclo en tu código. Para hacerlo, ten presente la siguiente información:

  • El juego se detiene cuando el jugador acumule dos victorias o dos derrotas.
  • La elección del jugador y del computador debe repetirse en cada ciclo.
  • Al completar el ciclo, debes mostrarle los resultados al jugador y resetear las variables de juego.

Hacer esto requiere que muevas algunas cosas dentro del código. Intenta hacerlo por tu cuenta, y luego lo comparas con el código aquí abajo 😉

//FUNCIÓN PARA LAS ALERTAS
function alertaDeElecciones( quienElije , eleccion ) {
    if ( eleccion == 1 ) {
        alert( "El " + quienElije + " eligió 🥌" );
    } else if ( eleccion == 2 ) {
        alert( "El " + quienElije + " eligió 📄" );
    } else if ( eleccion == 3 ) {
        alert( "El " + quienElije + " eligió ✂️" );
    } else {
        alert( "Hubo un error con la elección del " + quienElije + " 🙃" );
    }
}

//FUNCIÓN PARA GENERAR NÚMEROS ALEATORIOS
function numeroAleatorio( min , max ) {
    return Math.floor( Math.random() * ( max - min + 1 ) + min );
}

//FUNCIÓN PARA DECIDIR EL GANADOR
function quienGanaEntre ( eleccionJugador , eleccionOponente ) {
    if ( eleccionJugador == eleccionOponente ) {
        alert( "¡EMPATE! 🤼" );
        empates = empates + 1;
    } else if ( eleccionJugador == 1 && eleccionOponente == 3 ) {
        alert( "¡GANASTE! 🥳" );
        victorias = victorias + 1;
    } else if ( eleccionJugador == 2 && eleccionOponente == 1 ) {
        alert( "¡GANASTE! 🥳" );
        victorias = victorias + 1;
    } else if ( eleccionJugador == 3 && eleccionOponente == 2 ) {
        alert( "¡GANASTE! 🥳" );
        victorias = victorias + 1;
    } else {
        alert( "PERDISTE... 😢" );
        derrotas = derrotas + 1;
    }
}

//FUNCIÓN PARA NOMBRAR AL GANADOR FINAL
function mostrarResultados() {
    alert("Has acumulado " + 
        victorias + " victorias, " + 
        derrotas + " derrotas y " + 
        empates + " empates.");

    if ( victorias == 2 ) {
        alert( "TÚ eres el GANADOR" );
        resetearVariables();
    } else if ( derrotas == 2 ) {
        alert( "EL COMPUTADOR es el GANADOR" );
        resetearVariables();
    } else {
        alert( "Hubo un error... 🙃");
        resetearVariables();
    }
}

//FUNCIÓN PARA RESETEAR VARIABLES DE VICTORIAS
function resetearVariables() {
    victorias = 0;
    derrotas  = 0;
    empates   = 0;
}

//ELECCIÓN DEL JUGADOR
let eleccionDelJugador = 0;

//ELECCIÓN DEL COMPUTADOR
let eleccionDelComputador = 0;

//DECIDIENDO EL GANADOR
let victorias = 0;
let derrotas  = 0;
let empates   = 0;

while ( victorias < 2 && derrotas < 2 ) {
    eleccionDelJugador    = prompt( "Elige: 1 para 🥌, 2 para 📄, 3 para ✂️" );
    eleccionDelComputador = numeroAleatorio( 1 , 3 );

    alertaDeElecciones( "jugador"    , eleccionDelJugador    );
    alertaDeElecciones( "computador" , eleccionDelComputador );

    quienGanaEntre ( eleccionDelJugador , eleccionDelComputador );
}

mostrarResultados();

Anímate a probarlo algunas veces y sientete orgulloso de lo que haz logrado 🥳 En el futuro te enseñaremos a crear un botón en tu sitio web que puedes configurar para que inicie el juego cuando alguien lo presione 🙂 Pero, mientras tanto, acompañame a aprender cómo funciona la estructura de archivos de un sitio web 😉

Contribución creada por: Jhonkar Sufia (Platzi Contributor).