Type something to search...
Juego de adivinar el número

Juego de adivinar el número

Proyecto: Juego de Adivinar el Número

Objetivo

Crear un juego interactivo en el que el usuario debe adivinar un número aleatorio entre 1 y 100. El juego brindará retroalimentación indicando si el número ingresado es mayor, menor o correcto, y mostrará la cantidad de intentos realizados.


Paso 1: Preparar el Entorno

  1. Crear la carpeta del proyecto:
    Nómbrala, por ejemplo, juego_adivina_numero.

  2. Dentro de la carpeta, crear los siguientes archivos:

    • index.html
    • styles.css
    • script.js
  3. Abrir los archivos en tu editor de código favorito.


Paso 2: Estructura HTML

En el archivo index.html, coloca la siguiente estructura básica que incluye la interfaz del juego:

<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Juego: Adivina el Número</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header>
    <h1>Juego: Adivina el Número</h1>
  </header>
  
  <section>
    <p>Adivina el número entre 1 y 100:</p>
    <input type="number" id="guess" placeholder="Ingresa tu número">
    <button id="guessBtn">Adivinar</button>
    <p id="result"></p>
    <p id="attempts"></p>
  </section>
  
  <script src="script.js"></script>
</body>
</html>

Explicación:

  • Se crea una cabecera (<header>) con el título del juego.
  • En la sección principal se coloca un párrafo con las instrucciones, un campo de entrada para el número, un botón para enviar el intento y dos párrafos para mostrar el resultado y el número de intentos.
  • Se enlaza el archivo de estilos (styles.css) y el script de JavaScript (script.js).

Paso 3: Agregar Estilos con CSS

En el archivo styles.css, agrega los siguientes estilos para mejorar la apariencia del juego:

/* Estilos generales */
body {
  font-family: Arial, sans-serif;
  background-color: #f4f4f4;
  margin: 0;
  padding: 20px;
  text-align: center;
}

/* Cabecera */
header {
  background-color: #333;
  color: #fff;
  padding: 20px 0;
  margin-bottom: 20px;
}

/* Sección del juego */
section {
  background: #fff;
  padding: 20px;
  max-width: 500px;
  margin: 0 auto;
  border-radius: 8px;
  box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}

/* Campo de entrada y botón */
input[type="number"] {
  padding: 10px;
  font-size: 16px;
  width: 200px;
  margin-right: 10px;
}

button {
  padding: 10px 20px;
  font-size: 16px;
  cursor: pointer;
}

/* Mensajes de resultado */
#result {
  font-size: 18px;
  margin-top: 20px;
}

Explicación:

  • Se establecen estilos generales para el cuerpo y se centra el contenido.
  • La cabecera tiene un fondo oscuro y texto blanco.
  • La sección del juego se destaca con fondo blanco, bordes redondeados y una sombra para darle profundidad.
  • Se definen estilos para el campo de entrada y el botón, haciendo la interfaz clara y usable.

Paso 4: Lógica con JavaScript

En el archivo script.js, implementa la lógica del juego para generar un número aleatorio, recibir la entrada del usuario y brindar retroalimentación:

// Genera un número aleatorio entre 1 y 100
const numeroSecreto = Math.floor(Math.random() * 100) + 1;
let intentos = 0;

// Seleccionar elementos del DOM
const guessInput = document.getElementById('guess');
const guessBtn = document.getElementById('guessBtn');
const resultDisplay = document.getElementById('result');
const attemptsDisplay = document.getElementById('attempts');

// Función que se ejecuta al hacer clic en el botón
guessBtn.addEventListener('click', function() {
  const guess = Number(guessInput.value);
  intentos++;

  // Validar que el número esté entre 1 y 100
  if (!guess || guess < 1 || guess > 100) {
    resultDisplay.textContent = 'Por favor, ingresa un número entre 1 y 100.';
    return;
  }

  // Comparar el número ingresado con el número secreto
  if (guess === numeroSecreto) {
    resultDisplay.textContent = `¡Felicidades! Adivinaste el número en ${intentos} intentos.`;
    guessBtn.disabled = true;
    guessInput.disabled = true;
  } else if (guess < numeroSecreto) {
    resultDisplay.textContent = 'Demasiado bajo. Intenta nuevamente.';
  } else if (guess > numeroSecreto) {
    resultDisplay.textContent = 'Demasiado alto. Intenta nuevamente.';
  }

  attemptsDisplay.textContent = `Intentos: ${intentos}`;
  guessInput.value = '';
  guessInput.focus();
});

Explicación:

  • Se genera un número aleatorio entre 1 y 100 y se inicializa un contador de intentos.
  • Se seleccionan los elementos necesarios del DOM para interactuar con el usuario.
  • Al hacer clic en el botón, se captura el número ingresado y se valida que esté dentro del rango.
  • Se compara el número ingresado con el número secreto:
    • Si es igual, se muestra un mensaje de éxito y se deshabilitan el campo de entrada y el botón.
    • Si es menor o mayor, se muestra un mensaje indicando si el número es “demasiado bajo” o “demasiado alto”.
  • Se actualiza y muestra la cantidad de intentos realizados.

Paso 5: Probar y Mejorar el Juego

  1. Abrir el archivo index.html en el navegador:
    Verifica que la interfaz se muestre correctamente y que el juego funcione como se espera.

  2. Probar el juego:
    Ingresa diferentes números y observa la retroalimentación. Asegúrate de que el juego cuente correctamente los intentos y que el mensaje de acierto se muestre al adivinar el número correcto.

  3. Personalizar y Extender:

    • Reiniciar el juego: Puedes agregar un botón “Reiniciar” para que el usuario pueda jugar nuevamente sin recargar la página.
    • Agregar animaciones o efectos: Usa CSS para mejorar la experiencia visual, como transiciones o cambios de color.
    • Guardar puntajes: Experimenta guardando el número de intentos en el almacenamiento local del navegador.

Guía Detallada del Juego de Adivinanzas

  1. Reiniciar el juego sin recargar la página.
  2. Guardar puntajes en el almacenamiento local del navegador.

Código Completo Mejorado

index.html

<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <title>Juego de Adivinanzas</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <div class="container">
    <h1>Juego de Adivinanzas</h1>
    <p>Intenta adivinar el número secreto entre 1 y 100.</p>
    
    <div class="game">
      <input type="number" id="guess" placeholder="Ingresa un número">
      <button id="guessBtn">Adivinar</button>
      <button id="resetBtn">Reiniciar</button>
    </div>
    
    <p id="result"></p>
    <p id="attempts">Intentos: 0</p>
    <p id="bestScore">Mejor puntaje: N/A</p>
  </div>
  <script src="script.js"></script>
</body>
</html>

style.css


/* Estilos generales */
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
  font-family: Arial, sans-serif;
}

body {
  background-color: #f2f2f2;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}

/* Contenedor principal */
.container {
  background-color: #fff;
  padding: 20px 40px;
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.1);
  text-align: center;
}

/* Encabezado */
h1 {
  margin-bottom: 20px;
}

/* Sección del juego */
.game {
  margin-bottom: 20px;
}

/* Estilos para el campo de entrada */
input[type="number"] {
  width: 60%;
  padding: 8px;
  margin-bottom: 10px;
  border: 1px solid #ddd;
  border-radius: 4px;
}

/* Estilos para los botones */
button {
  padding: 8px 12px;
  margin: 5px;
  border: none;
  background-color: #4285F4;
  color: #fff;
  border-radius: 4px;
  cursor: pointer;
  transition: background-color 0.3s ease;
}

button:hover {
  background-color: #357ae8;
}

button:disabled {
  background-color: #aaa;
  cursor: not-allowed;
}

/* Estilos para los párrafos */
p {
  margin-top: 10px;
}


script.js


// Genera un número aleatorio entre 1 y 100
let numeroSecreto = Math.floor(Math.random() * 100) + 1;
let intentos = 0;

// Seleccionar elementos del DOM
const guessInput = document.getElementById('guess');
const guessBtn = document.getElementById('guessBtn');
const resultDisplay = document.getElementById('result');
const attemptsDisplay = document.getElementById('attempts');
const resetBtn = document.getElementById('resetBtn');
const bestScoreDisplay = document.getElementById('bestScore');

// Función para actualizar el mejor puntaje en el DOM
function actualizarMejorPuntaje() {
  const bestScore = localStorage.getItem('bestScore');
  if (bestScore) {
    bestScoreDisplay.textContent = `Mejor puntaje: ${bestScore} intentos`;
  } else {
    bestScoreDisplay.textContent = 'Mejor puntaje: N/A';
  }
}

// Función que se ejecuta al hacer clic en el botón de adivinar
guessBtn.addEventListener('click', function() {
  const guess = Number(guessInput.value);
  intentos++;

  // Validar que el número esté entre 1 y 100
  if (!guess || guess < 1 || guess > 100) {
    resultDisplay.textContent = 'Por favor, ingresa un número entre 1 y 100.';
    return;
  }

  // Comparar el número ingresado con el número secreto
  if (guess === numeroSecreto) {
    resultDisplay.textContent = `¡Felicidades! Adivinaste el número en ${intentos} intentos.`;
    guessBtn.disabled = true;
    guessInput.disabled = true;

    // Guardar puntaje en localStorage si es el mejor (menos intentos)
    const bestScore = localStorage.getItem('bestScore');
    if (!bestScore || intentos < Number(bestScore)) {
      localStorage.setItem('bestScore', intentos);
    }
    actualizarMejorPuntaje();
  } else if (guess < numeroSecreto) {
    resultDisplay.textContent = 'Demasiado bajo. Intenta nuevamente.';
  } else if (guess > numeroSecreto) {
    resultDisplay.textContent = 'Demasiado alto. Intenta nuevamente.';
  }

  // Actualizar el contador de intentos y limpiar el campo de entrada
  attemptsDisplay.textContent = `Intentos: ${intentos}`;
  guessInput.value = '';
  guessInput.focus();
});

// Función para reiniciar el juego
function reiniciarJuego() {
  numeroSecreto = Math.floor(Math.random() * 100) + 1;
  intentos = 0;
  guessBtn.disabled = false;
  guessInput.disabled = false;
  resultDisplay.textContent = '';
  attemptsDisplay.textContent = 'Intentos: 0';
  guessInput.value = '';
  guessInput.focus();
}

// Agregar el evento al botón de reiniciar
resetBtn.addEventListener('click', reiniciarJuego);

// Actualizar el mejor puntaje al cargar la página
actualizarMejorPuntaje();


Explicación Detallada del Código

1. Generación del Número Secreto

  • Código:
    let numeroSecreto = Math.floor(Math.random() * 100) + 1;
  • Explicación:
    Se genera un número aleatorio entre 1 y 100 utilizando Math.random(). La función Math.floor redondea hacia abajo el resultado y se le suma 1 para asegurarse de que el rango sea de 1 a 100.

2. Variables y Selección de Elementos del DOM

  • Variables principales:
    • intentos: Inicializado en 0 para contar la cantidad de intentos.
  • Selección de elementos:
    Se obtienen referencias a los elementos HTML necesarios usando document.getElementById:
    • guessInput\: Campo de entrada para el número que ingresa el usuario.
    • guessBtn\: Botón que el usuario presiona para enviar su conjetura.
    • resultDisplay\: Área de la página donde se muestra el resultado (mensajes de retroalimentación).
    • attemptsDisplay\: Área donde se muestra el número de intentos.
    • resetBtn\: Botón para reiniciar el juego.
    • bestScoreDisplay\: Elemento para mostrar el mejor puntaje, obtenido del almacenamiento local.

3. Manejo del Evento “Click” en el Botón de Adivinar

  • Proceso:
    Al presionar el botón guessBtn\, se ejecuta una función que:
    • Obtiene el valor ingresado en guessInput\ y lo convierte a número.

    • Incrementa el contador de intentos\.

    • Valida que el número esté en el rango de 1 a 100, mostrando un mensaje de error si no es válido.

    • Compara el número ingresado (guess\) con el numeroSecreto\:

      • Si acierta:
        • Muestra un mensaje de felicitaciones junto con el número de intentos.
        • Deshabilita el botón y el campo de entrada.
        • Guarda el puntaje en el localStorage\ si es el mejor (menos intentos) hasta el momento.
      • Si es menor:
        Muestra un mensaje indicando que el número es “demasiado bajo”.
      • Si es mayor:
        Muestra un mensaje indicando que el número es “demasiado alto”.
    • Actualiza la visualización del número de intentos y limpia el campo de entrada.

4. Guardar Puntajes en el Almacenamiento Local (localStorage)

  • Proceso:
    Cuando el usuario adivina correctamente el número:
    • Se obtiene el mejor puntaje almacenado con localStorage.getItem('bestScore').
    • Si no existe un puntaje anterior o si el puntaje actual es menor (mejor desempeño), se guarda el nuevo puntaje usando localStorage.setItem('bestScore', intentos).
    • La función actualizarMejorPuntaje() actualiza el elemento del DOM que muestra el mejor puntaje.

5. Funcionalidad de Reiniciar el Juego

  • Función reiniciarJuego():
    • Genera un nuevo numeroSecreto.
    • Resetea el contador de intentos a 0.
    • Habilita nuevamente el botón y el campo de entrada.
    • Limpia los mensajes y actualiza la visualización de los intentos.
  • Evento:
    Se añade un evento click al botón resetBtn para ejecutar la función y reiniciar el juego sin necesidad de recargar la página.

6. Inicialización al Cargar la Página

  • Al cargar la página, se llama a la función actualizarMejorPuntaje() para mostrar el mejor puntaje almacenado en el localStorage.

Resumen de las Nuevas Funcionalidades

  • Reiniciar el Juego sin Recargar la Página:
    Se ha agregado un botón “Reiniciar” que llama a la función reiniciarJuego()\, la cual restablece todas las variables y elementos del juego para que el usuario pueda empezar de nuevo sin necesidad de actualizar el navegador.

  • Guardar Puntajes en el Almacenamiento Local:
    Cuando el usuario adivina el número correctamente, el juego guarda el número de intentos en el localStorage\. Se compara con el mejor puntaje (el mínimo número de intentos) y se actualiza en caso de lograr un nuevo récord. Esto permite llevar un seguimiento del desempeño del usuario.


Publicaciones relacionadas

Semáforo sencillo

Semáforo sencillo

// C++ code //// Pines de los LEDs del semáforo sencillo const int LED_VERDE = 2; const int LED_AMARILLO = 3; const int LED_ROJO = 4;void setup() { // Configuración de los pines OUTPUT

read more
Web climatológica con hora

Web climatológica con hora

ÍndiceÍndice ¿Qué es una página web? Ejemplos de páginas web: [¿Cómo se construye una página web?](#cómo-se-construye-u

read more
Semáforos Coordinados

Semáforos Coordinados

Semáforos coordinados Introducción En este proyecto, vamos a crear un sistema de semáforos coordinados utilizando Arduino.

read more
Markdown Style Guide

Markdown Style Guide

Here is a sample of some basic Markdown syntax that can be used when writing Markdown content in Astro. Headings The following HTML <h1>—<h6> elements represent six levels of section headings

read more
Pantallas LCD

Pantallas LCD

Introducción a las Pantallas LCD Las pantallas LCD (Liquid Crystal Display) son dispositivos electrónicos utilizados para mostrar información de manera clara y eficiente. Estas pantallas son muy co

read more
Personalizar caracteres en LCD

Personalizar caracteres en LCD

ÍndiceExplicación del Código Componentes Clave del Código Librería LiquidCrystal_I2C [In

read more
Semáforo Doble

Semáforo Doble

Descripción del código Este programa controla el funcionamiento de dos semáforos simulados utilizando un Arduino. Cada semáforo cuenta con tres luces LED: verde, amarillo y rojo. El programa altern

read more
Galería Web

Galería Web

Introducción Este proyecto está diseñado para comprender las bases del desarrollo web, comenzando con HTML y CSS básicos y progresando a JavaScript interactivo. Se divide en **cuatro etapas evoluti

read more
Controlador L298N DC Motor para Arduino

Controlador L298N DC Motor para Arduino

Introduccion Si bien eventualmente necesitarás aprender a controlar motores de CC para construir tu propio robot, probablemente necesitarás algo un poco más fácil para comenzar, y ahí es donde entr

read more
Componentes HTML

Componentes HTML

import YouTubeEmbed from '../../layouts/components/YouTubeEmbed.astro'; Componentes HTML y Estilos CSS En este blog explicativo se muestran los componentes principales de HTML y estilos CSS para

read more
Portafolio web

Portafolio web

Proyecto: Página Personal o Portafolio Web Objetivo Crear una página web personal en la que se muestre:Una cabecera con tu nombre y un menú de navegación. Una sección "Sobre Mí" co

read more
Introducción a Javascript

Introducción a Javascript

Test Código<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <title>Introducción a JavaScript</title> <style> /* E

read more
Examen Práctico: Mi Página Personal

Examen Práctico: Mi Página Personal

Examen Práctico: Objetivo Crear una página web personal con diseño moderno en la que se muestre:Una cabecera fija con tu nombre y un menú de navegación interactivo. **Una sección "Sob

read more
Bases para la Elaboración del Reporte Breve del Proyecto

Bases para la Elaboración del Reporte Breve del Proyecto

📝 Bases para la Elaboración del Reporte Breve del ProyectoFormato: Documento Word (máximo 4 páginas)Entrega: En formato digital (PDF), cargar en el apartado de Archivos.

read more
Mascota virtual

Mascota virtual

🐾 Proyecto: Mascota Virtual en Escritorio con Python Este proyecto te guiará paso a paso para crear una mascota virtual que se mueva por tu pantalla de Windows y muestre mensajes motivadores c

read more
Mascota virtual

Mascota virtual

🐾 Proyecto: Mascota Virtual en Escritorio con Python Este proyecto te guiará paso a paso para crear una mascota virtual que se mueva por tu pantalla de Windows y muestre mensajes motivadores c

read more