Lección 1.14: Proyecto: adivina el número
Un juego entero con todo lo de la etapa: variables, condiciones, bucles y funciones.
La idea
El ordenador piensa un número del 1 al 100. Tú intentas adivinarlo, y él te dice si es más alto o más bajo. Al acertar, te dice cuántos intentos has necesitado.
Se hace como cualquier programa: primero se piensa y después se escribe.
El plan, en pseudocódigo
Algoritmo Adivina
secreto ← un número al azar del 1 al 100
intentos ← 0
intento ← 0
Mientras intento ≠ secreto Hacer
Leer intento
intentos ← intentos + 1
Si intento < secreto Entonces
Escribir "Más alto"
SiNo
Si intento > secreto Entonces
Escribir "Más bajo"
FinSi
FinSi
FinMientras
Escribir "Acertaste en ", intentos, " intentos"
FinAlgoritmo
Es casi el bucle de la 1.5. Solo falta una pieza: el número al azar.
Un número al azar
function azar(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
Math.random()da un decimal entre 0 y 1, sin llegar a 1.Math.floor()le quita los decimales.- Juntas dan un número entero entre
minymax.
No hace falta entenderla entera: es de las funciones que se copian.
El juego
function azar(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
const secreto = azar(1, 100);
let intentos = 0;
let intento = 0;
while (intento !== secreto) {
intento = Number(prompt("Adivina el número (1-100):"));
intentos = intentos + 1;
if (intento < secreto) {
alert("Más alto");
} else if (intento > secreto) {
alert("Más bajo");
}
}
alert("¡Acertaste en " + intentos + " intentos!");
alert() enseña un mensaje en una ventana. Pega el juego entero en la consola y juega. Para jugar otra vez, recarga la página antes de pegarlo.
Cada línea es algo que ya conoces: una función (1.10), variables (1.8), un while y un if (1.9) y Number() para convertir lo que devuelve prompt().
Pruébalo
Si pulsas Cancelar, el juego sigue preguntando sin parar. Haz que termine.
Pistas:
- Al cancelar,
prompt()devuelvenull. breaksale de un bucle en el acto.- El mensaje final solo debe salir si se acertó.
Ver la solución
while (intento !== secreto) {
const respuesta = prompt("Adivina el número (1-100):");
if (respuesta === null) {
break;
}
intento = Number(respuesta);
intentos = intentos + 1;
if (intento < secreto) {
alert("Más alto");
} else if (intento > secreto) {
alert("Más bajo");
}
}
if (intento === secreto) {
alert("¡Acertaste en " + intentos + " intentos!");
}
La respuesta se guarda antes de convertirla: Number(null) da 0, y ya no se podría saber si se canceló.
En resumen
- Primero el plan en pseudocódigo; después, el código.
- Un programa entero es la suma de piezas pequeñas: variables, condiciones, bucles y funciones.
Math.random()da azar;alert()enseña un mensaje;breaksale de un bucle.