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 { }.
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.
Por lo tanto, para conseguir que la computadora elija aleatoriamente, necesitaríamos el siguiente código:
//OBTENIENDO LA ELECCIÓN DEL COMPUTADORlet 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 COMPUTADORfunctionnumeroAleatorio( min , max ) {
returnMath.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 🙂
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.
Supongamos que queremos números aleatorios entre 1 y 5:
Definimos nuestro rango: En papel sería hacer 5 - 1= 4 En nuestro código hacemos:
(max - min) _
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.
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
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í
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.
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!
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>
¡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ónque necesita la función para procesarla. Cuando se coloca aquí esta informaciónse le llama **argumentos**. Es necesario enviar _argumentos_ para que sean recibidos en los _parámetros_ dela 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)
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. :´)
-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 :
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
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
Ahora esto lo multiplicamos por lo observado en el punto 1.
todo multiplicado por 6
0 <= 6 x < 6
Como podemos ver hasta este punto tendriamos los numeros aleatorios mayores o iguales que cero y menores que 6. Lo cual no queremos 😦
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
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)
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
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.
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
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 😅
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.
functionaleatorio(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min)
}
functionchoose(propiedad, valor) {
let tipo
if (valor == 1) {
tipo = 'Piedra'
} elseif (valor == 2) {
tipo = 'Papel'
} elseif (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
} elseif (jugador == 1 && pc == 3) {
alert('GANASTE!!')
status = false
} elseif (jugador == 2 && pc == 1) {
alert('GANASTE!!')
status = false
} elseif (jugador == 3 && pc == 2) {
alert('GANASTE!!')
status = false
} else {
alert('HAS PERDIDO');
contador--
}
document.write('Te quedan ' + contador + ' vidas!!')
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:
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")
}elseif (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.
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. 🫶
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.
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.
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
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
🤔 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. 💚
import random
jugador = 0
pc = 0print("""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 juegoif jugador == pc:
print("Esto fue un empate!")
elif jugador == 2and pc == 1:
print("Felicidades Ganaste!")
elif jugador == 1and pc == 3:
print("Felicidades Ganaste!")
elif jugador == 3and pc == 2:
print("Felicidades Ganaste!")
else:
print("Perdiste")
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.
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
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('ponelnumerominimo'));
let numeroMax = parseInt(prompt('ponelnumeromaximo'));
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;
}
}
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
![]()
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>
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>
\
* **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
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

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.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?