Saltar al contenido
Contenido de Programación

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

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

JavaScript
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 min y max.

No hace falta entenderla entera: es de las funciones que se copian.

El juego

JavaScript
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

Ejercicio

Si pulsas Cancelar, el juego sigue preguntando sin parar. Haz que termine.

Pistas:

  • Al cancelar, prompt() devuelve null.
  • break sale de un bucle en el acto.
  • El mensaje final solo debe salir si se acertó.
Ver la solución
JavaScript
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; break sale de un bucle.