Fundamentos de Programación

1

Programación Básica: Fundamentos y Creación de Proyectos en Línea

2

Programación Básica en Google Chrome: Variables y Funciones

3

Creación de una Página Web Básica con HTML

4

Estructura Básica de un Documento HTML

5

Estructura y funcionamiento básico de HTML y JavaScript

6

Instalación y uso básico de Visual Studio Code para programar

7

Declaración y Uso Básico de Variables en JavaScript

8

Programación de Piedra, Papel o Tijera en JavaScript

9

Programación de Piedra, Papel o Tijera en JavaScript

10

Generación de Números Aleatorios con JavaScript

11

Creación y uso de funciones en programación

12

Ciclos y Condiciones en Programación: Piedra, Papel o Tijera

13

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

14

Manejo de Rutas y Archivos en Sistemas Operativos y Desarrollo Web

15

Manipulación del DOM y Eventos en JavaScript para Juegos Web

Quiz: Fundamentos de Programación

Desarrollando un juego con HTML y JavaScript

16

Maquetación de Páginas Web para Videojuegos en HTML

17

Selección de Mascotas en HTML para Juegos Interactivos

18

Programar eventos de clic en botones HTML con JavaScript

19

Eventos de Carga en JavaScript: Iniciar Juego y Seleccionar Mascota

20

Selección de Mascota en JavaScript: Implementación y Validación

21

Manipulación del DOM con JavaScript para mostrar mascota seleccionada

22

Selección Aleatoria de Mascota Enemiga en JavaScript

23

Eventos de clic y lógica de ataque en JavaScript

24

Ataques Aleatorios para Mascotas Enemigas en JavaScript

25

Creación de Mensajes Dinámicos en Combate HTML y JavaScript

26

Lógica de Combate en JavaScript para Juego Mokepon

27

Operadores Lógicos en Programación: AND, OR y NOT

28

Actualización de Vidas en Juego de Combate con JavaScript

29

Validación de Vidas y Mensajes Finales en Juegos

30

Funcionalidad de Reinicio y Desactivación de Botones en Juego

31

Mostrar y ocultar secciones en HTML con JavaScript

Quiz: Desarrollando un juego con HTML y JavaScript

Estilos con CSS

32

Estilos CSS: Selectores, Propiedades y Valores

33

Tipos de Visualización en CSS: Display Block, Inline e Inline Block

34

Alineación de Elementos con Flexbox en CSS

35

Modelo de Caja en CSS: Espaciado y Bordes

36

Diseño y Estilo de Páginas Web con HTML y CSS

37

Estilos CSS para Botones en Juegos: Diseño de Pantallas Interactivas

38

Estilos CSS para Mejorar la Interfaz de un Juego

39

Estilizado de Pantallas de Juego con CSS y Flexbox

40

Separación de mensajes y estilos en JavaScript y HTML

41

CSS Grid: Organiza Elementos en Rejillas Bidimensionales

42

Diseño Responsivo con CSS: Media Queries y Flexbox

43

Pseudoclases en CSS: Mejora la Interacción del Usuario

Quiz: Estilos con CSS

Optimización de código

44

Optimización de Código JavaScript con Clases y Objetos

45

Optimización de Código JavaScript: Variables y Funciones

46

Clases y Objetos: Fundamentos para Optimizar Juegos

47

Construcción de Clases y Objetos en JavaScript

48

Uso de Arreglos para Almacenar Objetos en JavaScript

49

Agregar ataques a objetos en JavaScript

50

Renderizado Dinámico de Objetos en HTML con JavaScript

51

Solución de errores en variables y elementos HTML en JavaScript

52

Uso de Objetos para Centralizar Información en JavaScript

53

Selección de Mascota Aleatoria en JavaScript

54

Iteración de Arreglos y Manipulación DOM en JavaScript

55

Crear Función "mostrarAtaques" en JavaScript para Juegos

56

Eventos de Clic en Botones con JavaScript

57

Secuencia de Ataques y Validación de Resultados en JavaScript

58

Implementación de lógica de combate en juegos JavaScript

59

Programación de Juegos: Lógica de Ataques y Victorias

60

Optimización y Corrección de Errores en Juegos Web con JavaScript

Quiz: Optimización de código

Mapa con canvas

61

Dibujo y manejo de gráficos en Canvas con JavaScript

62

Movimiento de Capipepo en Canvas con HTML y JavaScript

63

Movimiento Continuo de Personajes en Canvas con JavaScript

64

Eventos de Teclado para Controlar Personajes en Juegos

65

Pintar Fondos y Personajes en Canvas HTML

66

Métodos de Clases en JavaScript para Juegos Interactivos

67

Detección de Colisiones en Videojuegos con JavaScript

68

Programación de eventos y colisiones en un juego interactivo

69

Ajuste Responsivo de Mapas en Pantallas con JavaScript

70

Estilos Responsivos en HTML y CSS para Mapas Interactivos

Quiz: Mapa con canvas

Backend: videojuego multijugador

71

Desarrollo de Juegos Multijugador con Cliente-Servidor y API

72

Instalación de Node.js en Windows para desarrollo backend

73

Uso básico de la terminal de comandos y Node.js

74

Creación de un Servidor Básico con Express.js en Node.js

75

Conceptos Clave de URIs y Verbos HTTP en Node.js

76

Desarrollo de API con Node.js y Comunicación Frontend-Backend

77

Selección de Mokepon y Comunicación JSON en Express.js

78

Implementación de un Endpoint para Coordenadas de Jugadores en Node.js

79

Integración de Coordenadas de Jugadores en Mokepon Multijugador

80

Optimización de Coordenadas en Videojuegos con JavaScript

81

Batalla Final en Mokepon: Implementación de Colisiones y Back-End

82

Implementación de Ataques en Tiempo Real para Videojuego Mokepon

Quiz: Backend: videojuego multijugador

Próximos pasos

83

Corrección de errores en juego multijugador con Node.js

84

Desarrollo Colaborativo con Git y GitHub para Programadores

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Generación de Números Aleatorios con JavaScript

10/84
Recursos

Ya programamos lo básico para que el juego funcione. Pero es momento de hacer que el computador elija por si solo entre piedra, papel, o tijera. Necesito compartirte algunos fundamentos para que realices la práctica de hoy. Estos son:

El objeto “Math” en JavaScript

En JavaScript existen entidades llamadas “Objetos” que guardan dentro de ellas variables (que se llaman “propiedades” cuando viven dentro de un objeto) y funciones (que se llaman “métodos” cuando viven dentro de un objeto.

En este sentido, Math es un objeto especial en JavaScript que contiene dentro de él numerosas funciones y valores que son esenciales para hacer cálculos matemáticos, como el número PI o la función de redondear números decimales.

¿Cómo usar el objeto Math de JavaScript?

Debes escribir “Math” (atención a la “M” en mayúscula), luego un punto (”.”) y finalmente la propiedad o método que desees invocar.

Si deseas invocar un método, recuerda que debes escribir los paréntesis “( )” para que el método se ejecute.

Ejemplos de propiedades

Propiedades de Math Para qué sirve
Math.PI Cuándo el código se ejecuta, el navegador sustituye esto por el número PI.
Math.E Cuándo el código se ejecuta, el navegador sustituye esto por la constante de Euler.

Ejemplos de métodos

Métodos de Math Para qué sirven
Math.ceil() Redondea hacia arriba el número decimal que esté entre los paréntesis, hasta convertirlo en un número entero.
Math.floor() Redondea hacia abajo el número decimal que esté entre los paréntesis, hasta convertirlo en un número entero.
Math.round() Redondea el número decimal entre paréntesis hacia el entero más cercano.
Math.random() Retorna un número decimal aleatorio entre el 0 (incluido) y el 1 (excluido).

Prueba estos valores y métodos en la consola del navegador 🙂

¿Cómo declarar funciones en JavaScript?

Cuando encuentras un segmento de código que puede repetirse dentro del programa, o que ejecuta un proceso muy específico dentro de tu código, entonces lo ideal es encapsularlo en una función.

Hay varias formas de declarar una función. Pero la más básica de todas consiste en escribir la palabra reservada function, seguida de la función con sus parámetros entre paréntesis, y el bloque de código entre llaves { }.

Ejemplo:

function hacerAlgo( param1 , param2 ) {
    let resultado = param1 + param2;
    return resultado;
}

hacerAlgo( 3 , 4 ); //Devuelve 7

Cuando ejecutas la función, esta ejecuta todo el código que insertaste dentro de las llaves { } cuando la declaraste. De este modo, puedes ejecutar la función tantas veces como necesites con solo declararla una vez.

Cuando la declaras, puedes indicar parámetros y usarlos dentro del bloque de código. Luego, cuando la ejecutes, esos parámetros se sustituirán con los valores que escribas entre paréntesis al momento de ejecutarla.

También puedes utilizar la palabra reservada return dentro del bloque de código de la función para que, al ejecutarla, recibas el valor que indiques luego de escribir return (ojo, cuando la función llega a un return, su ejecución se detiene. Los comandos que escribas después de un return no se van a ejecutar).

Haz algunos experimentos con esto en la consola antes de continuar 😉

Generando una elección aleatoria para el computador

Intentemos ahora emplear lo aprendido para hacer que la computadora elija piedra, papel o tijera por si sola. Para hacerlo, primero tenemos que entender cómo funcionaría el algoritmo que le permite hacer la selección, y luego tendríamos que introducirlo en nuestro código.

Algoritmo de selección aleatoria

Primero necesitamos generar un número aleatorio. Ya sabemos que Math.random() nos entrega un número aleatorio entre 0 y 1. Sin embargo, nuestro juego necesita un número aleatorio entre 3 y 1 para funcionar. ¿Se te ocurre cómo podrías crearlo con código?

Para lograrlo, la operación sería esta:

Math.random() * ( max - min + 1 ) + min

Si consideramos que nuestro valor máximo es 3 y el mínimo es 1, esto nos garantiza que siempre obtendremos un número entre 3.9999’ y 1. Por lo tanto, solo tendríamos que meter todo dentro de un Math.floor() para obtener un valor aleatorio entre 3 y 1.

Formula para emitir números aleatorios en un rango

Por lo tanto, para conseguir que la computadora elija aleatoriamente, necesitaríamos el siguiente código:

//OBTENIENDO LA ELECCIÓN DEL COMPUTADOR
let max = 3;
let min = 1;
let eleccionDelComputador = Math.floor( Math.random() * ( max - min + 1 ) + min );

Introduce esto en tu código, y prueba a ver como funciona 🙂

Convirtiendo el algoritmo en una función

Ahora, ¿por qué no intentas convertir eso en una función? Te dejaré una posible solución aquí abajo para que compares, pero intenta hacerlo por tu cuenta antes de fijarte en ella 😉

//OBTENIENDO LA ELECCIÓN DEL COMPUTADOR
function numeroAleatorio( min , max ) {
    return Math.floor( Math.random() * ( max - min + 1 ) + min );
}
let eleccionDelComputador = numeroAleatorio( 1 , 3 );

Haz el cambio y prueba tu juego 😁 Sin embargo, ¿Crees que podrías escribir el mismo código en menos líneas? 🤔 No hablo de borrar espacios o líneas, hablo de emplear una lógica diferente para llegar al mismo resultado. Una que requiera menos pasos, y que aun así llegue al mismo sitio 🙂

Piensa un poco al respecto, experimenta un poco, y cuando estés satisfecho y todo funcione, acompáñame a aprender más sobre como usar funciones para mejorar la calidad de tu código 😉 Nos vemos allá 😁

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

Aportes 918

Preguntas 337

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Para el reto de hacer menos líneas de código tu que dé el mismo resultado, tienen que tener en cuenta que no siempre tienen que achicar el código y que quede un código que no se pueda entender.
Recuerden “Un buen programador no es el que hace menos líneas de código, es el que hace código que se pueda entender”.

Aquí esta como yo achiqué el código.

Utilicé un booleano llamado “o”, que en código se expresa “||”.
Espero haya sido de ayuda mi comentario.

¿Cómo se obtiene la fórmula con la clase Math?

  • Para geeks que les encanta saber más.

Supongamos que queremos números aleatorios entre 1 y 5:

  1. Definimos nuestro rango:
    En papel sería hacer 5 - 1= 4
    En nuestro código hacemos:
(max - min)      _
  1. Generamos un numero aleatorio con Math.random y lo multiplicamos por el rango anterior.
    Recuerda que Math.random() devuelve un número aleatorio entre 0 (incluido) y 1 (no incluido)
Math.random() * (max - min)       _
  • El mínimo resultado que obtendremos será 0 x 4 = 0

  • Por simplicidad supongamos que el máximo será 0.999 x 4 = 3.996

OjO -> Como Puedes ver, nos falta algo ya que queremos que el valor mínimo sea 1 y el máximo 5,
y si le quitamos los decimales a estos resultados el mínimo sería 0 y el máximo sería 4.

  1. Para corregir el mínimo, podemos sumar al resultado final el límite inferior:
(Math.random() * (max - min)) + min      _
  • El mínimo resultado que obtendremos será (0 x 4) + 1 = 1

  • El maximo resultado que obtendremos será (0.999 x 4) + 1 = 4.996

OjO -> De nuevo estamos en problemas porque si bien ahora el mínimo es 1, el máximo sigue siendo 4

  1. Es evidente que en lugar de multiplicar 0.999 x 4, necesitamos generar algo para que el valor máximo sea 0.999 x 5
    La única forma de hacerlo es que el Rango sea 5

Aquí surge la idea de sumar 1 al rango:

(Math.random() * (max - min + 1)) + min      _

RECAPITULEMOS:

  • El mínimo resultado que obtendremos será 0 x 5 + 1= 1

  • El maximo resultado que obtendremos será (0.999 x 5) + 1 = 5.995

Yay! Lo hemos conseguido…Gracias por leer hasta aquí

👀 tu si tu, tambien te equivocaste escibiendo math.ramdon en el codigo y por eso no te salio xd tmr
es: Math.random

me costo entender pero nah como el explica me da hasta entender por que me dejo mi ex :´(

10 - Aleatoriedad

  • Math.floor() → Quita los decimales a cualquier numero. La clase es Math y el punto . trae la función floor()
  • Math.random() → Genera un numero aleatorio, con la función random() Nunca es 0 pero tampoco 1 ejem: 0.1545615
  • Para programar un Nro aleatorio en un rango:
  1. Declarar el rango → min = 1 y max = 3
  2. Generamos el Nro aleatorio invocando Math.random()
  3. Ese Nro lo multiplicamos por (max-min+1)
  4. A toda la expresión le quitamos los decimales con Math.floor()
  • Podemos convertir todo este bloque de código en una FUNCION con:
    • Las variables se declaran dentro del parametro
    • return → retorna la funcion,
    • Esta funcion se puede invocar las veces que quiera
function *nombre* (*parametro*) {
    return 
}
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <title>Piedra, papel o tijera</title>
    <script>
        function aleatiorio (min, max) {
            return Math.floor(Math.random() * (max - min + 1) + min)
        }
        // 1 es piedra, 2 es papel, 3 es tijera
        let jugador = 0
        let pc =  aleatiorio(1,3)

        jugador = prompt("Elije: 1 para piedra, 2 para papel, 3 para tijera ")
        //alert("Elejista " + jugador)
        if(jugador == 1) {
            alert("Elejiste 🥌")
        } else if(jugador == 2){
            alert("Elejista 🧻")
        } else if(jugador == 3){
            alert("Elejiste ✂")
        } else{ // Si elije otra opcion que no sea 1,2 o 3. mostrar:
            alert("ELEJISTE PERDER!!")
        }
        // para saber que eligio la pc
        if(pc == 1) {
            alert("PC elije 🥌")
        } else if(pc == 2){
            alert("PC elije 🧻")
        } else if(pc == 3){
            alert("PC elije ✂")
        } else{ // Si elije otra opcion que no sea 1,2 o 3. mostrar:
            alert("PC ELIJE PERDER!!")
        }

        // COMBATE
        // 1. verificar que no empatamos
        if(pc == jugador) {
            alert("EMPATE")
        } else if(jugador == 1 && pc == 3){
            alert("GANASTE")
        } else if(jugador == 2 && pc == 1){
            alert("GANASTE")
        } else if(jugador == 3 && pc == 2){
            alert("GANASTE")
        } else {
            alert("PERDISTE")
        }
    </script>
</head>

<body>
    <h1>Piedra, papel o tijera</h1>
</body>

</html>

Buenas Practicas


Simplificar codigo no es reducir las lineas solamente, tambien es aumentar su comprensión al ser leido.
Al final de esta clase a todos nos queda un codigo muy redundante en su logica y un poco largo, eso complica su lectura y comprensión, una buena practica al programar es evitar las redundancias.


¿Como lo hacemos?

Con las funciones, estas nos permiten encapsular codigo que vayamos a utilizar multiples veces, esto significa que no tendremos que escribir una sentencia una y otra vez, sino solo una vez reutilizando ese codigo solamente cambiando sus parametros.


<h5>Aqui mi ejemplo:</h5>

Vas a pasar mas tiempo leyendo codigo de otra persona que escribiendo codigo.

Siento que el jugador “PC” sabe lo que hace porque me ha ganado en 7 ocasiones seguidas 😮

😅 Bueno, Freddy dijo lo más comprimido posible.

Si eres de lo que fue trolleado por el factor “aleatorio” pensando que tu codigo estaba mal y resulta que tu codigo estaba bien solo que la pc tiro 10 veces seguidas el mismo valor, vení que te doy un abrazo xq me paso lo mismo!

Si no les sale a la primera Recuerden que se trata más de leer código que de programar! 👌

Buenas tardes, me he tomado la libertad de hacer el famoso juego de piedra, papel, tijeras, lagarto, spock que sale en la seri The big bang theory. Espero que esté todo bien:

<html>
<head>
<meta charset=“utf-8” />
<title>Mi primera programada</title>
<script>
// 1 es piedra, 2 es papel, 3 es tijera
let jugador = 0
let pc = Math.floor(Math.random() * 5);
jugador = prompt(“Elige: 1 para piedra, 2 para papel, 3 para tijera, 4 para lagarto y 5 para spock”)

  //Elección del jugador

  if(jugador == 1) {
    alert("Elegiste 🪨")
  }else if (jugador == 2) {
    alert("Elegiste 📋")
  }else if (jugador == 3) {
    alert("Elegiste ✂️")
  }else if (jugador == 4) {
    alert("Elegiste 🦎")
  }else if (jugador == 5) {
    alert("Elegiste 🖖")
  } else {
    alert("Elegiste 👹")
  }

  //Elección del ordenador

  if (pc == 1){
    alert("El ordenador eligió 🪨")
  }else if (pc == 2){
    alert("El ordenador eligió 📋")
  }else if(pc == 3){
    alert("El ordenador eligió ✂️")
  }else if (pc == 4) {
    alert("El ordenador eligió 🦎")
  }else if (pc == 5) {
    alert("El ordenador eligió 🖖")
  }

  //Combate

  if(pc==jugador){
    alert("Empate")
    resultado="empate"
  } else if (jugador == 3 && pc == 2 || jugador == 2 && pc == 1 || jugador == 1 && pc == 4 || jugador == 4 && pc == 5 || jugador == 5 && pc == 3 || jugador == 3 && pc == 4 || jugador == 4 && pc == 2 ||  jugador == 2 && pc == 5 || jugador == 5 && pc == 1 || jugador == 1 && pc == 3) {
    alert("GANASTE")
    resultado = "victoria"
  } else {
    alert("PERDISTE")
    resultado = "derrota"
  }

</script>

</head>
<body>
<h1>Piedra, papel, tijeras, lagarto, spock</h1>
<script>
if(resultado==“victoria”){
document.write("<p>¡Ganaste! ❤️</p>");
}else if(resultado==“derrota”){
document.write("<p>¡Perdiste! 👹</p>");
}else{
document.write("<p>¡Empate! 🤭</p>");
}
</script>
</body>
</html>

Sin darme cuenta estoy aprendiendo y jugando con JavaScript ** :3 **

Se me apago el cerebro… tengo que reiniciarlo jajajajajaja

Con funciones se puede reducir el codigo un ejemplo de ello.

FUNCIONES

¡Estas le dan vida a JavaScript y a nuestro código!

Debemos usar la palabra function y luego el nombre de esta función. Luego paréntesis () seguido de llaves {}.
Entonces en la memoria se va a guardar esta función. Ese espacio tendrá el nombre que ya le asignamos.

Dentro de los paréntesis colocamos parámetros que son los datos que necesita nuestra función para procesarlos y devolver un resultado. La función puede funcionar sin parámetros, si no los necesita. Por ejemplo, la función random() (que viene por defecto en el navegador) no necesita parámetros para devolvernos un número decimal aleatorio, pero la función alert() necesita que le enviemos la cadena de texto que se va a mostrar en pantalla, o no saldrá nada.

**Dentro de las llaves ** escribimos la lógica de nuestro código. Podemos escribir funciones dentro de otras funciones y devolver el resultado usando la palabra return. Puede que la función no necesite devolver resultado y puede entonces no tener la palabra return.

Las llaves {} Se pueden ver en diferentes expresiones de JavaScript, y sirven para encerrar código. Se usa en las funciones, condicionales y siclos, y podemos llamar a todo lo que está dentro un Objeto. Mientras avances sabrás por qué.

Invocar a la función es muy sencillo.
Solo hay que escribir el** nombre** que le asignamos al espacio de memoria de la función seguido de ().

nombre()
``` Y dentro de los paréntesis escribimos la información que necesita la función para procesarla. Cuando se coloca aquí esta información se le llama **argumentos**. Es necesario enviar _argumentos_ para que sean recibidos en los _parámetros_ de la función.

Con la menor cantidad de líneas posibles(solo reduje la condición del combate y simplifique las condiciones en una sola línea, también es otra forma de ver el código)

Pasé una hora buscando porque no me salía
Había escrito “Match” en lugar de “Math”

Math.floor(Math.random() * (max - min + 1) + min);

Para volver a invocar una funcion en consola solamente presionen flecha arriba 😃

prendiendo de nuevo programación y la tercera es la vencida

Tengan cuidado al escribir “random” y “function”

ramdon ❌
random ✅

funtion ❌
function ✅

Estuve por 15 minutos intentando ejecutar el ultimo código con “function” y al final me di cuenta que olvidé ponerle una “c” TT

Casi me saco un ojo con la batalla pero lo logre jajajaj Muchas gracias! fue divertido 😉

      // BATALLA
      if (jugador == pc) {
        alert("EMPATE");
      } else if (
        (jugador == 1 && pc == 3) ||
        (jugador == 2 && pc == 1) ||
        (jugador == 3 && pc == 2)
      ) {
        alert("GANASTE! 🎉🎉🥳🥂🎊");
      } else {
        alert("Perdiste 😭😿🥀");
      }

Mi código comprimido manteniéndolo entendible:

    <script>
        // Función para generar numeros aleatorios entre un rango asignado
        function generateRandomInteger(min, max) {
            return Math.floor(Math.random() * (max - min + 1)) + min;
        }
        // La computadora elige aleatoreamente un número entre 1 y 3
        let eleccionpc = GenerarNumerosEnterosAleatorios(1,3)
        if(eleccionpc == 1) {  
            eleccionpc = "piedra"
        } else if(eleccionpc == 2) {  
            eleccionpc = "papel"
        } else if(eleccionpc == 3) {  
            eleccionpc = "tijera"
        }

        //El jugador elige: 1 es piedra, 2 es papel, 3 es tijera
        let eleccionjugador = 0
        eleccionjugador = prompt("Elige 1 para piedra, 2 para papel, 3 para tijera")
        if(eleccionjugador == 1) {  
            eleccionjugador = "piedra"
        } else if(eleccionjugador == 2) {  
            eleccionjugador = "papel"
        } else if(eleccionpc == 3) {  
            eleccionjugador = "tijera"
        }

        //variable resultado
        let resultado = 0

        //Cuando el jugador gana
        if((eleccionjugador == "piedra" && eleccionpc == "tijera")
        || (eleccionjugador == "papel" && eleccionpc == "piedra") 
        || (eleccionjugador == "tijera" && eleccionpc == "papel")) {  
            resultado = "GANASTE"                 
        } else if(eleccionjugador == eleccionpc) {
            resultado = "EMPATARON"  
        //Cuando el jugador pierde
        } else {
            resultado = "PERDISTE"  
        }        
        
        //Imprimir resultado
            alert("Elegiste " + eleccionjugador + "\nLa computadora eligió " + eleccionpc + "\nResultado: " + resultado)         
    </script>

Este apunte te va ayudar mucho si quedaste, con dudas con el Math.random, otra cosa si ves las letras con rojo es que es mayúscula esos pequeños detalles a veces son difícil de en encontrar.

Podría ser un aporte para código mas pequeño, o tal vez no, que un experto me lo diga si es que estoy mal o esa forma es una mala practica o algo. Es para el numero aleatorio lo que hice fue.
var aleatorio=Math.floor((Math.random() * 3)+1);

Ejemplo si el Math.random me genera 0.5; seria
0.5 * 3=1.5+1=2.5, con el floor se convierte en 2; y pueden probar con cualquier numero aleatorio, siempre te dará un numero del 1 al 3.

Me está encantando el curso. Es genial. La habilidad de Freddy para compartir conocimiento es admirable.
Pero existe algo que en ocasiones me distrae un poco. Al principio, y en determinadas ocasiones, me provocaba risa. Ya no.
Sucede que constantemente Freddy utiliza una frase: “No apagues el cerebro”. Al igual que otras formas de incitar a las personas, que probablemente tienen asociaciones negativas con las matemáticas, a continuar aprendiendo.
A mí, francamente, me distrae un poco.
Comprendo que ciertas personas necesiten un ‘empujón’. Pero en mi caso, sucede que estoy plenamente concentrado en lo que está explicando y de un momento a otro hace alguna puntualización para aquellas personas. En esos momentos me encuentro bastante estimulado por entender algo que desconozco (estado de flujo) y esas pausas, por breves que puedan ser, me desconcentran un poco.
Desconozco si soy la única persona que experimenta esto, pero me es incómodo. Suele hacerlo con frecuencia en diversos cursos o en vídeos de otras plataformas.
Pierdo la concentración, al punto de motivarme a escribir éste comentario. :´)

Esta fue mi solución.

siguiendo estas pautas:

-No sacrificar funcionalidad con reducción de líneas de código
-Ofrecer una mayor comprensión e interacción al usuario
-no sobrepasarme de lo aprendido en las clases anteriores

En la lógica creo estar bien, pero en la funcionalidad, veo necesario mostrar el valor de cada elección

let player = prompt("Elige una opción\n 1 Piedra \n 2 Papel \n 3 Tijeras");
let pc = Math.floor(Math.random()*(3 - 1 + 1)+1);
console.log(pc);
let winner = player == pc ? alert("Empate") : 
             player == 1 && pc == 2 ? alert(`Elegiste ${player} y Pc eligio ${pc} perdiste`):
             player == 3 && pc == 1 ? alert(`Elegiste ${player} y Pc eligio ${pc} perdiste`):
            alert("Numero erroneo") 

Hola Chicos, veo que muchos se estan preguntando sobre el uso de esta formula

Math.floor(Math.random() * (max-min+1) + min)

Y queria pasar a explicarla segun mi concepcion que me sirvio mucho, basado en mi matematica del colegio :

  1. Comenzamos sabiendo que el Math.random() me enviara como resultado numeros aleatorios entre 0 y 1 (Tengamos en cuenta que coge incluso al cero pero no al 1)
    Esto lo podemos representar de la siguiente forma:

0 <= x < 1

  1. Luego lo multiplicamos por la diferencia entre el maximo y el minimo sumado con uno.
    Lo cual muchos podran recordar la formula del colegio para contar cuantos numeros existen entre dos numeros (valga la redundancia)
  • Vamos a asumir, por ejemplo, que queremos numeros aleatorios entre 5 y 10, entonces necesitamos saber cuantos numeros existen entre ambos.
  • cantidad de numeros = (10-5 +1) = 6
  1. Ahora esto lo multiplicamos por lo observado en el punto 1.

    todo multiplicado por 6
    0 <= 6 x < 6

  2. Como podemos ver hasta este punto tendriamos los numeros aleatorios mayores o iguales que cero y menores que 6. Lo cual no queremos 😦

  3. Es por ello que se le agrega el minimo que va a marcar mi punto minimo para concretar la tarea aleatoria.

  • Sumamos 5 a ambos lados:

    5 <= 6x + 5 < 11

  1. En este punto vemos que garantizamos que los numeros aleatorios iniciara con el 5 y llegaran hasta antes del 11. Pero como lo explico Freddy, el Math.floor lo reducira todo a un entero. Incluso saliendo como resultado 10.99999999
    Esto satisface nuestra premisa de aleatoriedad requerida

Espero esta explicacion pueda servir a alguien, no soy tan bueno explicando pero trato de hacerlo. Cualquiera sugerencia escribirla 😃

Hasta mas vernos
[Todas las tildes han sido omitidas]

esto es lo mas que pude hacerlo con menos lienas de codigo (me tarde mas de 1 hora porque intente reescribirlo apoyandome del codigo que ya hice en la clase)

Aquí les dejo mi aporte. Aunque no simplifiqué mucho el código, lo mejoré un poco.

<script>
        function random(min, max) {
            return Math.floor(Math.random() * (max - min + 1) + min);
        }

        // 1 es piedra, 2 es papel, 3 es tijera
        let jugador = 0;
        let pc = random(1, 3);
        jugador = prompt("Elige: 1 es ✊, 2 es  📄, 3 es ✂️")


        function condition(name, variable) {
            if (variable == 1) alert(`${name} eligió ✊`);
            else if (variable == 2) alert(`${name} eligió  📄`);
            else if (variable == 3) alert(`${name} eligió ✂️`);
            else alert("Elije una opción válida");
        }

        condition("Elkin", jugador);
        condition("PC", pc);
        kombat(jugador, pc);

        // COMBATE 
        function kombat(player1, player2) {
            if (!player1 || !player2) {
                alert("BATALLA CANCELADA");
                return;
            }

            if (player1 == player2) alert("Es un EMPATE")
            else if (
                (player1 == 1 && player2 == 2) ||
                (player1 == 2 && player2 == 3) ||
                (player1 == 3 && player2 == 1)
            ) alert("PERDISTE");
            else alert("GANASTE :D")
        }
    </script>

Hola a todos, aqui les mando mi juego, le meti algunas cosas para que quedara mejor, es mi primera vez codeando, pero estoy aprendiendo mucho, espero alguna retroalimentación 😃
PD: Perdí jsjs :v

Como Jhon Freddy Vega habla tan rápido, le bajé la revolución al video, ahora tengo a un Freddy extraño, pero puedo comprender mejor.

Math.floor le quita los decimales a cualquier número.

Mi pequeño aporte fue una función que convirtiera el numero en icono.

 function icon(number){
                if(number == 1) {
                    return("✊ 🥌")
                } else if(number == 2) {
                    return("✋ 📄")
                } else { return("✌ ✂")}
            }
            
            alert("Elegiste " + icon(jugador))
            alert("El PC eligio " + icon(pc))

Lo más conciso que pude. Aunque no logré optimizar la parte de combate, me fue bien con la de selección

En vez de tener un bloque de código para mandar la alerta de la elección del jugador y otro para la elección de la pc, creé una función de las opciones del juego (piedra, papel y tijera), que sería como tener los dos bloques en uno.
Solo haría falta, como se ve en el código, invocar la función 2 veces: uno para enviar la alerta del la elección del jugador y otro para la alerta de la pc.

// Pequeño juego de priedra, papel o tijera
function aleatorio (min, max) {
    return Math.floor( Math.random() * (max - min + 1) + min );
}
function seleccion (opcion) {
    switch (parseInt(opcion)) {
        case 1:
            return "Priedra 🥌";
        case 2:
            return "Papel 📄";
        case 3:
            return "Tijeras ✂";
        default:
            return "Perder.";
    }
}
function resultado(pc, jugador) {
    if (pc == jugador) {
        return "Empate!";
    } else if ((jugador == 1 && pc == 3) || (jugador == 2 && pc == 1) || (jugador == 3 && pc == 2)) {
        return "Ganaste!!!";
    } else {
        return "Perdiste :C";
    }
}

// 1 es piedra, 2 es papel, 3 es tijera
let continuar = 1;
let jugador, pc = 0;
while (continuar == 1) {
    pc = aleatorio (1, 3);
    jugador = prompt("Elige 1 para piedra, 2 para papel y 3 para tijeras.");
    alert("Elegiste: " + seleccion(jugador) + ". La PC eligió: " + seleccion(pc) + ". El resultado es: " + resultado(pc,jugador));
    continuar = confirm("¿Volver a jugar?");
}

Hola! Saben como adjunto imagenes a este chat?

//COMBATE
if(pc == jugador){
alert(“EMPATE”);
} else if ((jugador == 1 && pc == 3) || (jugador == 2 && pc == 1) || (jugador == 3 && pc == 2)){
alert(“GANASTE”);
} else {
alert(“PERDISTE”);
}

Nunca creí que a mis 42 años iba a estar programando así… ¿me cuesta? (del 1 al 10) Me cuesta un montón… pero lo estoy logrando de a poco.
Gracias Freddy por ser tan claro!
Todo un logro para mi

El profe nos tiene mucha fe ¿como que comprimir ?😔

yo estaba teniendo un problema con la fórmula y era que mi variable pc valía cero siempre, le pedí ayuda a mi hermano y resulta que en vez de poner max - min puse min - max jajsjsjdjs tengan mucho cuidado con esos detalles 😅

Tantas formas diferentes para lograr el mismo resultado.

yo casi me voy hasta que freddy dijo: ! No te vayas no te vayas vuelve¡ 🤣🤣🤣😂

Pasé 1 hora buscando el error de mi código por no pensar en las mayúsculas.
díganme que no solo me pasa a mi 😂😂😂😂

        let jugador = 0
        let min     = 1
        let max     = 3
        let pc      = Math.floor(math.random() * (max - min + 1) + min)

        jugador = prompt("Elige:1 para 🧱, 2 para 📃, 3 para ✂");

Hola a todos, he intengado optimizar un poco y reutilizar una funcion para el caso de que eligio la pc y el jugador y la funcionalidad de 3 vidas para salirse del juego.

   function aleatorio(min, max) {
            return Math.floor(Math.random() * (max - min + 1) + min)
        }
        function choose(propiedad, valor) {
            let tipo
            if (valor == 1) {
                tipo = 'Piedra'
            } else if (valor == 2) {
                tipo = 'Papel'
            } else if (valor == 3) {
                tipo = 'Tijera'
            } else {
                tipo = 'Perder!!!'
            }
            return alert(propiedad + 'elige: ' + tipo);}

        let num1 = 1
        let num2 = 3
        let pc = aleatorio(num1, num2);
        contador = 3
        // 1 = Piedra, 2 = Papel, 3 = Tijera.
        while (contador > 0) {
            let jugador = prompt('Piedra, Papel o Tijera 1,2,3!!');
            choose('Jugador ', jugador);
            choose('pc ', pc);
            if (jugador == pc) {
                alert('Es un empate')
                status = false
            } else if (jugador == 1 && pc == 3) {
                alert('GANASTE!!')
                status = false
            } else if (jugador == 2 && pc == 1) {
                alert('GANASTE!!')
                status = false
            } else if (jugador == 3 && pc == 2) {
                alert('GANASTE!!')
                status = false
            } else {
                alert('HAS PERDIDO');
                contador--
            }
            document.write('Te quedan ' + contador + ' vidas!!')

Les comparto mis notas de clase, por ahora estan en construcción mientras voy avanzando!

Enjoy

me tarde un muy buen rato, pero con un arreglo puedes eliminar muchos condicionales IF

Ayudandome con aportes de otra gente pude reducir la parte de combate.

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <title>Piedra papel o tijera</title>
    <script>
        function aleatorio (min, max){
            return Math.floor(Math.random()* (max - min +1 )+ min)
        }
        //1 es piedra, 2 es papel, 3 es tijera
        let jugador = 0
        let pc = aleatorio(1,3)
        jugador = prompt ("Elije:1 para piedra, 2 para papel, 3 para tijera")
        //alert("elejiste "+ jugador)
        if(jugador==1) {
            alert("Elegiste 💎")
        }
        else if(jugador==2) {
            alert ("elegiste 📄")
        }
        else if(jugador==3) {
            alert ("elegiste ✂")
        }
        else {
            alert("elegiste perder")
        }
        
        if(pc==1) {
            alert(" Pc elige 💎")
        }
        else if(pc==2) {
            alert ("pc elige 📄")
        }
        else if(pc==3) {
            alert ("pc elige ✂")
        }
      //COMBATE
        if (pc == jugador){
            alert("empate")
        } else if( (jugador == 1 && pc == 3 ) || (jugador==2 && pc == 1) || (jugador==3 && pc == 2))  {
            alert("ganaste")
        }
        else{
            alert("perdiste")
        }
     </script>
</head>
<body>
    <h1> Piedra papel o tijera</h1>
    
</body>
</html>

Declaración de funciones

  1. Nombre clave—> function
  2. Nombre de la función
  3. Parámetros (entre paréntesis y separados por comas)
  4. Abrir llaves {aqui colocar las declaraciones que definen a funcion }

Math.floor() (redondea hacia abajo al entero más cercano)
Math.ceil() (redondea hacia arriba al entero más cercano).
Math.random() devolverá un número de coma flotante mayor o igual que 0 y menor que (pero nunca igual a) 1

Para generar un numero entero del 1 al 3, a mi me funciono lo siguiente:

let pc = Math.floor(Math.random()*3 + 1);

El reto

const promptText = "1:Rock, 2:Paper, 3:Scissors";
const options = {
  1: "🗿",
  2: "📄",
  3: "✂️",
};

/**
 * Return a random interger number between the given range
 * @param {int} min Lowest number of the range
 * @param {int} max Highest number of the range
 * @returns {int} Random Number between min and max
 */
function randomPick(min, max) {
  return Math.floor(Math.random() * (max - min + 1) + min);
}
let jugador = 0;
let pc = randomPick(1, 3);

jugador = prompt("Choose: " + promptText);
if (jugador == 1) {
  alert("You choose 🗿");
} else if (jugador == 2) {
  alert("You choose 📄");
} else if (jugador == 3) {
  alert("You choose ✂️");
} else {
  alert('Your Lose "L" ');
}

// Bender choose what?
alert("🤖 Bender pick " + options[pc]);

if (pc == jugador) {
  alert("Tie");
} else if (
  (jugador == 1 && pc == 3) ||
  (jugador == 2 && pc == 1) ||
  (jugador == 3 && pc == 2)
) {
  alert("You win");
} else {
  alert("Hahaha GAME OVER 💀");
}

a penas entiendo lo que escribi

La compuerta lógica or en JavaScript es así ||, dos palitos que están arriba del tab y con ese or, se puede condicionar en una sola línea de código así:

if (player == pc){
  alert("Empate")
}else if (player == 1 && pc == 3 || player == 2 && pc == 1 || player == 3 && pc == 2){
  alert("Ganaste")
}else {
  alert("Perdiste")
} 

Quiero mostrarles esta pequeña corrección que realicé; la función logout(), antes había compartido un video de un bug en el programa donde después de ingresar una opción diferente a 1, 2 y 3 en el código de Piedra, Papel y Tijeras el programa me seguía mostrando otras ventanas, creo haberlo corregido y lo comparto con vosotros, me alegro porque la verdad es que no se mucho. recibo retroalimentación, thank.

https://youtu.be/Hsg9cB-2ZlI

Bueno, les cuento que me autosupere, logre ubicar los emojis, colocarlo en los alerts. Despues de casi llorar 😂😂.
Desde que comencé el curso he logrado encontrar los emojis, cortar la pantalla y pegar para mostrar mis errores y adivinar cual es la tecla WIN. Por ahí para la maypría es una pavada, para mi fue un gran esfuerzo y me siento autosuperada!!! Gracias por el aguante.

Un punto a mejorar, en la plataforma como tal, es que, en tu dashboard de la semana te indique los minutos estudiados contando si volviste a repasar el curso o si lo retrocediste. Me pasa mucho que primero veo la clase y presto atencion e intento ir a la par en el VScode luego rebobino para tomar notas de los conceptos como tal e inclusive a veces vuelvo a rebobinar para hacer la practica pura y dura y en eso una clase de 10min se me convierten en 40min de los cuales 30 fuera volviendo a repasar conceptos en el video y no me los cuenta platzi 😞

Una de las mejores maneras de aprender un poco más es con los comentarios de los otros compañeros, hay algunos que tienen más conocimientos y lo comparten con nosotros
que apenas estamos iniciando. 🫶

“PC” me hizo revisar 20 veces el código (que estaba bien), porque se le dio la gana de elegir tijera como 5 veces seguidas.

Alguien sabe porque no me funciona el return?? me vi el video otra vez y lo tengo todo como debe estar.

Hola 😊

Mis aportes son los siguientes:

  1. Yo opté por crear una FUNCIÓN llamada “eleccion” para dar a conocer, valga la redundancia; la elección del usuario y la PC, ya que de esta manera NO NECESITAMOS ESCRIBIR DOS VECES las mismas instrucciones.

  2. Implementar en una sola condicional if, las comparaciones necesarias para saber cuándo resultamos ganadores, apoyandome de los operadores lógicos AND ( &&) y OR ( || ) para obtener las posibles jugadas ganadoras en una sola condición. En caso de no cumplirse esta condicional, se da por hecho que hemos perdido.
    Cuando el usuario y la PC realizan la misma elección, se genera un empate.

Aquí mi código:

Un compañero los compartio antes, pero ya no encontre el comentario cuando lo codifique, por si no lo vieron.
La parte izquierda del cuadrante es el Jugador y la superior es el PC. Los escenarios “Gana” y “Pierde” hacen referencia al Jugador

Aqui el codigo con la seccion COMBATE

//COMBATE

        if (resta == 0) {
            alert("EMPATE")
        }else if (resta == -2 || resta == 1){
            alert("El Jugador GANA")
        }else if (resta == -1 || resta == 2){
            alert("El PC GANA")
        }

Aqui el codigo completo

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <title>Piedra, papel o tijera</title>
    <script>
        function aleatorio(min,max){
            return Math.floor(Math.random() * (max - min + 1) + min) 
        }
        
        //1.Piedra 2.Papel 3.Tijera
        
        let jugador = 0
        let pc = 0
        let min = 1
        let max = 3
        let resta = 0

        jugador = prompt("Elige: 1.Piedra 2.Papel 3.Tijera")
        pc = aleatorio(1,3)
       
        if (jugador == 1) {
            
            alert("Usted eligio piedra 🪨")
        }else if (jugador == 2){

            alert("Usted eligio Papel 📃")
        }else if (jugador == 3){
            
            alert("Usted eligio tijera ✂️")
        }else { 

            alert("Debe elegir entre las opciones dadas anteriormente: \n🪨 📃 ✂️")
        }

        if (pc == 1) {
            
            alert("El pc eligio piedra 🪨")
        }else if (pc == 2){

            alert("El pc eligio papel 📃")
        }else if (pc == 3){
            
            alert("El pc eligio tijera ✂️")
        }else{

            alert("El pc esta bien BRUTO " + pc)
        }

        resta = jugador - pc 

        //COMBATE

        if (resta == 0) {
            alert("EMPATE")
        }else if (resta == -2 || resta == 1){
            alert("El Jugador GANA")
        }else if (resta == -1 || resta == 2){
            alert("El PC GANA")
        }else {
            alert("Algo salio mal!")
        }
        
    </script>
</head>
<body>
    <h1>
        Piedra, papel o tijera
    </h1>
</body>
</html>

Aquí está mi contribución… me tomé el tiempo de hacerlo un poco distinto y con multijugador. Se puede pulir bastante pero lo importante es aprender jeje

https://gitlab.com/JesusMohali/piedrapapeltijera

Aleatorio en HTML

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <title>Piedra, Papel o tijera</title>
        <script>
            function aleatorio(min, max){
               return Math.floor( Math.random() * (max - min + 1) + min)
            }
            //1 es piedra, 2 es papel, 3 es tijera
            let jugador = 0
            let pc = aleatorio(1, 3)
            jugador = prompt("Elige: 1 para piedra 🪨, 2 para papel 📃, 3 para tijera .✂️")            
            //alert("Elegiste "+ jugador)
            if(jugador == 1) {
                alert("Elegiste 🪨")   
            }
            else if(jugador == 2) {
                alert("Elegiste 📃")   
            }
            else if (jugador == 3) {
                alert("Elegiste ✂️")   
            }
            else  {
                alert("Elegiste perder")   
            }
            if(pc == 1) {
                alert("Pc eligió 🪨")   
            }
            else if(pc == 2) {
                alert("Pc eligió 📃")   
            }
            else if (pc == 3) {
                alert("Pc eligió ✂️")   
            }
            //COMBATE
            if(pc==jugador){
                alert("EMPATE")
            }
            /*else if(jugador == 1 && pc ==3){
                alert("GANASTE")
            }
            else if(jugador == 2 && pc == 1) {
                alert("GANASTE")
            }
            else if(jugador == 3 && pc == 2) {
                alert("GANASTE"/
            }*/
            else if((jugador == 1 && pc ==3) || (jugador == 2 && pc == 1) || (jugador == 3 && pc == 2)) {
                alert("GANASTE")
            }
            else{
                alert("PERDISTE")
            }
        </script>
    </head>
    <body>
        <h1>Piedra, Papel o tijera</h1>
    </body>
</html>

Aleatorio en Python

import random
#1 es piedra, 2 es papel, 3 es tijera
comienza = random.randint(1, 3)
jugador = 0
pc = comienza
jugador = int(input("Elige: 1 para piedra , 2 para papel , 3 para tijera: "))           
#alert("Elegiste "+ jugador)
if jugador == 1:
  print("Elegiste piedra")
elif jugador == 2:
  print("Elegiste papel")
elif jugador == 3:
  print("Elegiste tijera")
else:
  print("Perdiste")  
  
if pc == 1:
  print("Pc eligió piedra")
elif pc == 2:
  print("Pc eligió papel")
elif pc == 3:
  print("Pc eligió tijera")

#combate
if pc == jugador:
  print("EMPATE")
elif ((jugador == 1 and pc == 3) or (jugador == 2 and pc == 1)or (jugador == 3 and pc == 1)):
  print("GANASTE")
else:
  print("PERDISTE")
    

🤔 Creo que logré cumplir el reto
Estuve intentando por varios días, finalmente llegué una forma de “optimizar” el código. Lo que hice fue unir las tres condicionales en una sola eliminando algunos pasos, aunque la desventaja es que no es práctico. Luego vi el aporte de Ronny ( @ronnyjm06 ), que de hecho ayudó a simplificar increíblemente el código por el uso de booleanos.
🎮 Intenta jugarlo: https://fernanshay.github.io/rock-paper-scissor/

  • 1/4- Este es el código para el combate inspirado en la solución de Ronny ↓

  • 2/4 - Y así quedaría el código con las alertas de las selecciones (“elegiste tijera” ✂) ↓

  • 3/4 - Y ahora este el código que yo hice, si lo observas con detenimiento es sencillo de entender ↓

    Finalmente, descarté mi solución por ser poco práctica y me quedé con la solución de Ronny…

  • 4/4 - Este es el código completo junto al resultado ↓

    Puedes ver el repositorio en GitHub, espero les guste mi aporte. 💚

eh aqui mi aporte🙀:

    //FUNCION PARA ALEATORIEDAD
    function aleatorio(min,max){
        return Math.floor(Math.random()*(max-min+1)+min)
    }

    //FUNCION PARA MOSTRAR ELECCIONES
   function mostrar(turno,quien){
    if(turno==1) {
        alert(quien + "🥌")
    }else if(turno==2) {
        alert(quien + "🧻")
    }else if(turno==3){
        alert(quien + "✂")
    }else{
        alert("Elegiste perder")
    }
   }

   //FUNCION DE COMBATE Y RESULTADOS
   function combate(persona1,persona2){
    if(persona1==persona2) {
        alert("Es un empate 😢")
    }else if(persona1==1&&persona2==3 || persona1==2 && persona2==1||persona1==3 && persona2==2 ){
        alert("ganaste 😘")
    }else{
        alert("Perdiste 😢")
    }
   }

    //VARIABLES
    let jugador=0
    let pc=aleatorio(1,3)
    jugador=prompt("Elige: 1 para piedra, 2 es papel y 3 es tijera")
    
    //EJECUCION DEL ALGORITMO
   mostrar(jugador,"Elegiste: ")
   mostrar(pc,"El pc eligió: ")
   combate(jugador,pc)

Dejo mi aporte con menos líneas de código, saludos.

<!DOCTYPE html>

<head>
    <meta charset="utf-8">
    <title>Piedra, papel o tijera</title>
    <script>
        function aleatorio(min, max) {
            return Math.floor(Math.random() * (max - min + 1) + min)
        }

        function elige(ppt) {
            switch (ppt) {
                case 1:
                    alert("La PC elige 🥌")
                    break
                case 2:
                    alert("La PC elige 📰")
                    break
                case 3:
                    alert("La PC elige ✂️")
                    break
            }
        }

        function combate(jugador, pc) {
            if (pc == jugador) {
                alert("EMPATE")
            } else if (jugador == 1 && pc == 3) {
                alert("GANASTE")
            } else if (jugador == 2 && pc == 1) {
                alert("GANASTE")
            } else if (jugador == 3 && pc == 2) {
                alert("GANASTE")
            } else {
                alert("PERDISTE")
            }
        }
        let pc = aleatorio(1, 3)
        let jugador = prompt("Elige 1 es piedra, 2 es papel, 3 es tijera")
        elige(pc)
        combate(jugador, pc)
    </script>
</head>

<body>
    <h1> Piedra, papel o tijera</h1>
</body>

</html>
if(jugador == pc){
            alert("Empate!!, juguemos nuevamente"
        }
        else if ((jugador == "🥌" && pc == "📝") || (jugador == "📝" && pc == "✂") || (jugador== "✂" && pc == "🥌")){
            alert("Has perdido!!")
        else if ((jugador == "🥌" && pc == "✂") || (jugador == "📝" && pc == "🥌") || (jugador == "✂" && pc == "📝")) {
            alert("Has ganado!!")
        }
        else{
            alert("PERDISTE!!")

Aqui mi aporte de codigo realizado en python

import random
jugador = 0
pc = 0
print("""Bienvenido al juego de piedra papel o tijeras
      Instrucciones para jugar:
      1 para piedra
      2 para papel
      3 para tijera
      """)
# Ingreso de datos
jugador = int(input("Ingresa un numero: "))

pc: int = random.randint(1,3)

print("Usted elgio ", jugador)
print("Pc eligio ", pc)

#inicio del juego
if jugador == pc:
      print("Esto fue un empate!")
elif jugador == 2 and pc == 1:
      print("Felicidades Ganaste!")
elif jugador == 1 and pc == 3:
      print("Felicidades Ganaste!")
elif jugador == 3 and pc == 2:
      print("Felicidades Ganaste!")
else:
      print("Perdiste")
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Piedra, papel, o tijera</title>
        <script>
            function aleatorio(min, max)
            {
                return Math.floor(Math.random() * (max - min + 1) + min)
            }
            function elige(participante)
            {
                let mensaje = ""
                if(participante == 1){
                    mensaje = "🥌"
                }
                else if(participante == 2){
                    mensaje = "📄"
                }
                else if(participante == 3){
                    mensaje = "✂"
                }
                else{
                    mensaje = "PERDER"
                }
                return mensaje
            }
            // 1 es piedra, 2 es papel, 3 es tijera
            let jugador = 0
            let pc = aleatorio(1, 3)
            jugador = prompt("Elige: 1 para piedra, 2 para papel y 3 para tijera")
            //alert("Elegiste " + jugador)
            alert("Elegiste " + elige(jugador))
            alert("PC elige " + elige(pc))
            //COMBATE
            if(jugador == pc)
            {
                alert("EMPATE")
            }else if((jugador == 1 && pc == 3) || (jugador == 2 && pc == 1) || (jugador == 3 && pc == 2))
            {
                alert("GANASTE")
            }
            else{
                alert("PERDISTE")
            }
        </script>
    </head>
    <body>
        <h1>Piedra, papel o tijera</h1>
    </body>
</html>

Justo en el curso anterior quede donde explicaba lo de generar números aleatorios(clase 18), eso me quemo la cabeza :p. Ahora entiendo un poco mejor así que genial, esta vez sí lo probare a ver que tal me sale.

Les comparto mi código humildemente, seguimos aprendiendo!

Siempre tuve la duda de como hacer que el computador escogiera algo al azar, en este caso los número y me parece excelente. Me voy a poner un poco creativo en el juego a ver que tal me va. De repente pedir al usuario que diga si va a jugar contra la computadora o un versus contra un amigo en la misma pc jajajaja

Excelente curso ya estaba pensando en retirarme de la programación

tiene toda la razón cuando dice que es mágico, me cae tan Bien El profe ♥️

Con lo que he aprendido así me salió mi código con la mínima cantidad de código

      //Variables globales del juego
      jugador = 0;
      pc = Math.floor(Math.random()*3)+1;

      //Capturar desición
      jugador = prompt ("1.Piedra, 2.Papel, 3.Tijeras");

      //Proporcionar desiciones 
      if(jugador == 1)
      {
        alert("Escogiste piedra");
      }
      else if(jugador == 2)
      {
        alert("Escogiste papel");
      }
      else if(jugador == 3)
      {
        alert("Escogiste tijeras");
      }
      else
      {
        alert("Opción no valida");
      }

      if(pc == 1)
      {
        alert("Pc escogió piedra");
      }
      else if(pc == 2)
      {
        alert("Pc escogió papel");
      }
      else if(pc == 3)
      {
        alert("Pc escogió tijeras");
      }

      //Combate
      if(jugador != 1 && jugador != 2 && jugador != 3)
      {
        alert("Perdiste por defecto")
      }
      else if (jugador == pc)
      {
        alert("Empate");
      }
      else if ((jugador == 1 && pc == 2) || (jugador == 2 && pc == 3) || (jugador == 3 && pc == 1))
      {
        alert("Perdiste");
      }
      else
      {
        alert("Ganaste");
      }

Intente hacer un algoritmo de números aleatorios sin ver la clase.
Tal vez no es la mejor manera ni la más eficiente, pero hice mi mejor intento.
¿Qué opinan de mi código?

    let numeroMin = parseInt(prompt('pon el numero minimo'));
    let numeroMax = parseInt(prompt('pon el numero maximo'));
    let promedio = ((numeroMin + numeroMax)/2)*5;
    let numeroDefinitivo = numeroMax + 1;
    let condicion = false;

    while (condicion == false) {
        let aleatorio = Math.random();
        numeroDefinitivo = promedio*aleatorio;
        if(numeroMax > numeroDefinitivo && numeroDefinitivo > numeroMin){
            document.write(numeroDefinitivo + '</br>')
            condicion = true;
        }
        
    }

Fantastic!

  • Bueno esta es una opción fácil pero algo engañosa pues el juego ya esta arreglado porque tu le das que opción sacar al jugador y al pc. 😐
var jugador = "tijeras";
var cpu = "piedra";

if (jugador == cpu) {
    console.log("Perdiste");
} else if (jugador == "piedra" && cpu == "papel") {
    console.log("Perdiste");z
} else if (jugador == "papel" && cpu == "tijeras") {
    console.log("Perdiste");
} else if (jugador == "tijeras" && cpu == "piedra") {
    console.log("Perdiste");
} else {
    console.log("Ganaste");
}
  • Esta pues es casi lo mismo del video, solo que unas 6 lineas menos xd
var jugador = prompt("🪨 es 1, 📃 es 2, ✂️ es 3. ¿Que eliges?");
var cpu = aleatorio(1, 3);

function aleatorio(min, max) {
  return Math.floor(Math.random() * (max - min + 1) + min)
}

if(cpu == 1) {
  alert("La maquina eligio 🪨")
} else if (cpu == 2) {
  alert("La maquina eligio 📃")
} else if (cpu == 3) {
  alert("La maquina eligio ✂️")
}

if (jugador == cpu) {
  alert("empate");
} else if (jugador == 1 && cpu == 2) {
  alert("Perdiste");
} else if (jugador == 2 && cpu == 3) {
  alert("Perdiste");
} else if (jugador == 3 && cpu == 1) {
  alert("Perdiste");
} else {
  alert("Ganaste");
}

Este resultado me apareció mientras estaba en chat gpt, este código se ve hermoso ```js <script> function aleatorio(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); } function obtenerEleccion(numero) { switch (numero) { case 1: return "🥌"; case 2: return "📃"; case 3: return "✂"; default: return null; } } function mostrarResultado(jugador, pc) { if (jugador === pc) { return "EMPATE"; } else if ( (jugador === 1 && pc === 3) || (jugador === 2 && pc === 1) || (jugador === 3 && pc === 2) ) { return "GANASTE MI NIÑO LINDO"; } else { return "PERDISTE"; } } // 1 is piedra, 2 is papel, 3 is tijera let pc = aleatorio(1, 3); let jugador = parseInt(prompt("Elige: 1 para piedra, 2 para papel, 3 para tijera")); let eleccionJugador = obtenerEleccion(jugador); let eleccionPC = obtenerEleccion(pc); if (eleccionJugador) { alert(`Elegiste ${eleccionJugador}`); alert(`PC elige ${eleccionPC}`); alert(mostrarResultado(jugador, pc)); } else { alert("Elección no válida. PERDISTE."); } </script> ```
Mi solución fue hacerlo basándome en este cuadrito que alguien publicó en una de las anteriores clases. Establece una relación entre las 3 opciones restándolos contra las otras 3 opciones del oponente y los resultados determinan quien gano ![]()![](https://static.platzi.com/media/user_upload/image-3c7bbbd5-ed7e-43a5-a25c-965ecec002a2.jpg) El script me quedó así ```js <html> <head> <title>Piedra Papel o tijera</title> <script> function aleatorio(min, max) { return Math.floor(Math.random() * (max - min + 1) + min) } let jugador = 0, min = 1, max = 3, pc = aleatorio(1,3) // 1 es piedra, 2 es papel y 3 es tijera jugador =prompt("Elige entre 1, 2 y 3") if(jugador == 1) { alert("elegiste 🪨") } else if(jugador == 2) { alert("elegiste 🧻") } else if(jugador == 3) alert("elegiste ✂️") else { alert("Recargue para volver a jugar") } // PC if(pc == 1) { alert("Pc escogio 🪨") } else if(pc == 2) { alert("Pc escogio 🧻") } else if(pc == 3) { alert("pc escogio ✂️") } //COMBATE let COMBATE = (jugador - pc) if(pc == jugador) { alert("Empate") } else if(jugador !=4 && COMBATE == 1 || COMBATE == -2) { alert("GANASTE") } else { alert("PERDISTE") } </script> </head> <body>

Piedra Papel o Tijera

</body> </html> ```
```js function aleatorio(min,max) { return Math.floor(Math.random()*(max-min+1)+min) } function combate(jugador,pc) { if(jugador == pc) {return "empate"} else if (jugador == 1 && pc == 3 || jugador == 2 && pc == 1 || jugador == 3 && pc == 2){return "GANASTE"} else return "PERDISTE" } let jugador = 0 let pc = aleatorio(1,3) jugador= prompt("Elige 1 para piedra, 2 para papel, 3 para tijera") if(jugador == 1){alert("Elegiste 🥌")} else if(jugador == 2){alert("Elegiste 📋")} else if (jugador == 3) {alert("Elegiste ✂")} else alert("no valido") if(pc == 1){alert("Pc elije 🥌")} else if(pc == 2){alert("Pc elije 📋")} else alert("Pc elije ✂") //COMBATE alert(combate(jugador,pc)) ```
Hola! 👋 Este es mi resultado con menos líneas de código utilizando condicionales ternarias, ya llevo algunos años programando, pero me gusta retomar las bases y espero todos podamos seguir aprendiendo. ```html function Inicio(nombre, eleccion, pc){ alert(`¡Bienvenido ${nombre}! \nLa eleccion es ${eleccion == 1 ? "🤜🏼" : eleccion == 2 ? "🫱🏼" : eleccion == 3 ? "✌🏼" : " que no has elegido ninguna opción"}`); alert(`${pc == 1 ? "El PC eligió 🤜🏼 " : pc == 2 ? "El PC eligió 🫱🏼 " : pc == 3 ? "El PC eligió ✌🏼 " : "El PC no eligió ninguna opción"}`) return eleccion; } function Aleatorio(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function Combate(jugador, pc){ if((jugador - pc) == -2 || (jugador - pc) == 1){ alert(`Ganaste`) } else if(jugador == pc){ alert(`Empate`) } else { alert(`Perdiste`) } } let nombre = prompt("¿Cual es tu nombre?"); let eleccion = prompt("¿Cual es tu elección? \n Elije: \n1 - Piedra, \n2 - Papel, \n3 - Tijera"); let pc = Aleatorio(1,3); let jugador = Inicio(nombre, eleccion, pc); Combate(jugador, pc); ```
### Opinión sobre la Implementación de ITIL en Eurotrans y Outsorcing S.A La implementación de ITIL (Information Technology Infrastructure Library) en empresas como Eurotrans en Holanda y Outsorcing S.A en Colombia demuestra cómo esta estructura puede optimizar la gestión de servicios de TI, mejorando la eficiencia y efectividad operativa. ITIL proporciona un marco integral que abarca desde la perspectiva del negocio hasta la gestión de la infraestructura, lo cual es esencial para empresas que buscan mejorar la calidad y la consistencia de sus servicios. **Eurotrans y la Adopción de ITIL** En el caso de Eurotrans, una empresa dedicada al transporte de mercancías y pasajeros por carretera, la implementación de ITIL fue crucial para evolucionar su operativa y alcanzar los objetivos organizacionales. El análisis inicial de los procesos definidos por ITIL permitió identificar qué aspectos ya estaban implementados y cuáles requerían desarrollo. Este análisis detallado, incluyendo un estudio de viabilidad y valoración de la situación actual, fue esencial para asegurar que la transición fuera coherente y alineada con los objetivos de ITIL. La integración de PRINCE2 para evaluar la coherencia y aproximación de los proyectos relacionados con ITIL refuerza la estructura de gestión de proyectos de Eurotrans. La decisión de implantar un servicio de escritorio centralizado resalta la necesidad de mejorar la interacción entre clientes, proveedores y la organización. La adopción de estrategias para la gestión de incidencias, problemas, cambios, configuración y software muestra un enfoque holístico hacia la mejora continua y la resolución de problemas. **Outsorcing S.A y la Eficiencia Operativa mediante ITIL** Outsorcing S.A, una empresa colombiana de servicios de TI, también experimentó mejoras significativas al implementar ITIL. Esta empresa se benefició de las buenas prácticas de ITIL para optimizar sus procesos de entrega y soporte de servicios. La gestión de niveles de servicio, disponibilidad, capacidad, continuidad y financiera, permitió a Outsorcing S.A no solo mejorar sus servicios actuales, sino también prepararse para futuras demandas y desafíos. **Reflexión y Conclusión** La implementación de ITIL en estas dos empresas evidencia cómo un marco bien estructurado puede transformar la gestión de servicios de TI. ITIL proporciona una guía clara y detallada que ayuda a las empresas a identificar áreas de mejora, establecer procesos eficientes y garantizar una entrega de servicios consistente y de alta calidad. La adopción de ITIL no solo mejora la satisfacción del cliente, sino que también aumenta la eficiencia operativa y la capacidad de adaptación ante cambios en el entorno empresarial. (Nota es un trabajo de mi escuela.)
El mismo juego de piedra, papel o tijera con menos lineas de codigo seria esta usando otros elementos como la variable const, parseInt y modificando la formula para tener el numero aleatorio: ```js <html> <head> <meta charset="utf-8"/> <title>Piedra, papel, tijera</title> <script> const opciones = ["piedra 🥌", "papel 📄", "tijera ✂️"]; const resultados = ["Empate", "GANASTE", "PERDISTE!!!"]; const perdidas = ["Papel envuelve piedra 📄🥌", "Tijera corta papel ✂️📄", "Piedra mata tijera 🥌✂️"]; const aleatorio = () => Math.floor(Math.random() * 3); const evaluar = (jugador, pc) => { if (jugador === pc) return 0; if ((jugador === 0 && pc === 2) || (jugador === 1 && pc === 0) || (jugador === 2 && pc === 1)) return 1; return 2; } let jugador = parseInt(prompt("Elige: 0 para piedra, 1 para papel, 2 para tijera")); let pc = aleatorio(); if (jugador >= 0 && jugador <= 2) { alert(`Elegiste {opciones[jugador]}`); alert(`PC Elige {opciones[pc]}`); let resultado = evaluar(jugador, pc); alert(resultados[resultado] + (resultado === 2 ? ": " + perdidas[(jugador + 2) % 3] : "")); } else { alert("Opción no válida. Inténtalo de nuevo."); } </script> </head> <body>

Piedra, papel, tijera

</body> </html> ```\ \<html> \<head> \<meta charset="utf-8"/> \<title>Piedra, papel, tijera\</title> \<script> const opciones = \["piedra 🥌", "papel 📄", "tijera ✂️"]; const resultados = \["Empate", "GANASTE", "PERDISTE!!!"]; const perdidas = \["Papel envuelve piedra 📄🥌", "Tijera corta papel ✂️📄", "Piedra mata tijera 🥌✂️"]; const aleatorio = () => Math.floor(Math.random() \* 3); const evaluar = (jugador, pc) => { if (jugador === pc) return 0; if ((jugador === 0 && pc === 2) || (jugador === 1 && pc === 0) || (jugador === 2 && pc === 1)) return 1; return 2; } let jugador = parseInt(prompt("Elige: 0 para piedra, 1 para papel, 2 para tijera")); let pc = aleatorio(); if (jugador >= 0 && jugador <= 2) { alert(`Elegiste {opciones\[jugador]}`); alert(`PC Elige {opciones\[pc]}`); let resultado = evaluar(jugador, pc); alert(resultados\[resultado] + (resultado === 2 ? ": " + perdidas\[(jugador + 2) % 3] : "")); } else { alert("Opción no válida. Inténtalo de nuevo."); } \</script> \</head> \<body> \

Piedra, papel, tijera\

\</body> \</html>
Gracias Platzi y a Freddy Vega por compartir sus conocimientos. Es un excelente tutor para enseñar a programar. Saludos desde Perú.
* **Objetos** ➜ (guarda)➜ **Variables** -(que se llaman) propiedades (cuando viven dentro de un objeto) * **Funciones** ➜ -(que se llaman **métodos** (cuando viven dentro de un objeto)) *  Matemáticas divertidas: Crear un número aleatorio, los números aleatorios en las computadoras, no se crean en rangos, se cran entre el  y el 1, como el 0.6, 0.200 , 0,4 , 0,9999 , realmente internamente es como si fuera un % * Si multiplicamos el 20 x 0.5 me da 10, por que es el 50%, si yo multiplico 20 x 0.1 me da 2 por que es el 10% - Podemos crear una pequeña fórmula matemática con ayuda de java script para que estos % se arreglen * Nos debe enseñar las 2 funciones que necesito y cómo combinarlas, una que quita los decimales y otra que genera los números aleatorios. * Jugando con nuestro juego… * Math.floor(3.141592654) * 3 * Math.floor(4.1) * 4 * **Math.floor = Sirve para quitarnos los decimales,**  * **Math.random()** * 0.4497681559780047 * Math.random() * 0.5882156495859907 * Math.random() * 0.4126558956103237 * **Math.random() = Cada vez que lo invoque voy a tener un número distinto. Nunca es 0 pero tampoco es 1.** * Tengo que primero declarar la variable de el rango, entre mínimo y máximo. MIN=1 MAX=3  * min = 15 * 15 * max = 19 * 19 * Math.floor(Math.random() \* (max - min + 1) + min) // para generar en mi juego la aleatoriedad * 15
![](https://static.platzi.com/media/user_upload/image-be87cfca-cf64-414d-b7cc-9843d81c2e1e.jpg)

De tan aleatorio que está, la máquina se pasa ganando jaja

Les presento mi aporte, es un ejercicio excelente para aprender lo básico de programación.

Juega a piedra, papel o tijeras aquí

// Selecting elements
const result = document.getElementById('result_txt');
const modal = new bootstrap.Modal(document.getElementById('resultModal'));
const options = [null, document.getElementById("opt1"), document.getElementById("opt2"), document.getElementById("opt3")];
const pcOptions = [null, document.getElementById("pc1"), document.getElementById("pc2"), document.getElementById("pc3")];

// Function to set the display of options
function setDisplay(elements, display) {
  elements.forEach((element) => {
    if (element) {
      element.style.display = display;
    }
  });
}

// Function to handle the player's choice
function selection(opc) {
  if (opc >= 1 && opc <= 3) {
    setDisplay(options, 'none');
    setDisplay([options[opc]], 'block');
    humanOpt = opc;
  }
}

// Function to handle the PC's choice
function pcSelection() {
  const opc = pcChoice(1, 3);
  if (opc >= 1 && opc <= 3) {
    setDisplay(pcOptions, 'none');
    setDisplay([pcOptions[opc]], 'block');
    pcOpt = opc;
  }
}

// Function to generate a random PC choice
function pcChoice(min, max) {
  return Math.floor(Math.random() * (max - min + 1) + min);
}

function game() {
  pcSelection();
  const human = humanOpt;
  const pc = pcOpt;
  console.log(`${human} vs ${pc}`);

  // Determine the game result
  if (human === pc) {
    result.textContent = "DRAW";
  } else if ((human === 1 && pc === 3) || (human === 2 && pc === 1) || (human === 3 && pc === 2)) {
    result.textContent = "HUMAN WINS";
  } else {
    result.textContent = "PC WINS";
  }

  setTimeout(() => {
    modal.show();
  }, 2000);
}
Cuando renuevo me dice escogiendo cualquier variable Pc elige: MAL ELEGIDO JUGADOR ELIGE: LO QUE ALLÁ ELEGIDO Y SIEMPRE PIERDO Y NO ENCUENTRO EL ERROR 😩
Utilizando lo aprendido hasta ahora, he modificado el código agregando una función que permite imprimir la elección del jugador, ya sea el humano o la maquina, logrando con ésto cumplir con el reto de reducir el código ![](https://static.platzi.com/media/user_upload/reduccion_code-bce8068e-8191-4998-b883-34731025e30b.jpg)![](https://static.platzi.com/media/user_upload/reduccion_code-6851cefa-c741-4a6d-994b-807c9940e8ca.jpg)

La verdad no se como hacerlo ams pequeño ya que es mi primer contacto con programacion y no me quiere enredar con informacion que puede que me confunda 😢 pero aun asi lo intentare

Acabo de leer un comentario de que le costo entender, bueno a mi me costo tanto que hasta me quede dormida lo tuve que ver 2 veces pero realmente es bastante sencillo.