Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

Problema con recursividad

Al jugar, me permite sortear todos los números pero, al final no entra en la condición de "todos los números han sido sorteados". Y se queda pidiendo un número que no está en la lista. ¿Qué error tengo?

// Variables necesarias 
let numeroSecreto = 0, intentos = 0, numeroMaximo = 5;
let numerosAleatorios = [];

//Inicializando el Juego
inicializarJuego();

//Función para asignar texto por ID
function asignarTexto(id, texto)
{
    let elemento = document.getElementById(id);
    elemento.innerHTML = texto;
}

//Función para generar el número pseudoaleatorio
function generarNumeroSecreto()
{
     let numeroGenerado = Math.floor ((Math.random() * numeroMaximo) + 1);

     if (numerosAleatorios.length == numeroMaximo) 
     {  
        asignarTexto('parrafo', 'Fin Del Juego');
     }
     else
     {
        if(numerosAleatorios.includes(numeroGenerado))
        {
           return generarNumeroSecreto();  
        }
        else
        {  
           numerosAleatorios.push(numeroGenerado);
           return numeroGenerado;
        }
     }    
}

//Función para limpiar elemento por ID
function limpiarElemento(id)
{
    document.getElementById(id).value = '';
}

//Función que pone las condiciones iniciales
function inicializarJuego()
{
    numeroSecreto = generarNumeroSecreto();
    intentos = 1;

    asignarTexto('parrafo', `Elige Un Número Entre 1 y ${numeroMaximo}`);
    asignarTexto('h1', 'Adivina El Número Secreto');

    document.getElementById('reiniciar').setAttribute('disabled', true);
    limpiarElemento('numeroUsuario');
}

//Función para comparar el número del usuario con el número secreto
function verificarIntento()
{
    let numeroUsuario = document.getElementById('numeroUsuario').value;

    if(numeroSecreto == numeroUsuario)
    {
        asignarTexto('parrafo', `Ganaste! Te tomó ${intentos} ${ intentos <= 1 ? 'intento' : 'intentos'}`);
        document.getElementById('reiniciar').removeAttribute('disabled');
    }
    else
    {
        if(numeroUsuario > numeroSecreto)
        {
            asignarTexto('parrafo', 'El Número Es Menor');
        }
        else
        {
            asignarTexto('parrafo', 'El Número Es Mayor')
        }
        limpiarElemento('numeroUsuario');
        intentos++;
    }
}
1 respuesta
solución!

Hola Estudiante, ¡espero que estés bien!

Gracias por compartir tu duda con nosotros. Parece que estás teniendo un problema con la recursividad en tu juego. Después de sortear todos los números posibles, el juego sigue pidiendo un número que no está en la lista.

El error está en la función generarNumeroSecreto(). Después de verificar si numerosAleatorios.length es igual a numeroMaximo, deberías mostrar un mensaje en la pantalla y salir del juego. En lugar de eso, estás llamando nuevamente a la función generarNumeroSecreto(), lo que provoca que se siga pidiendo un número.

Aquí te muestro cómo puedes corregirlo:

function generarNumeroSecreto() {
    if (numerosAleatorios.length == numeroMaximo) {
        asignarTexto('parrafo', 'Fin Del Juego');
        return;
    }

    let numeroGenerado = Math.floor((Math.random() * numeroMaximo) + 1);

    if (numerosAleatorios.includes(numeroGenerado)) {
        return generarNumeroSecreto();
    } else {
        numerosAleatorios.push(numeroGenerado);
        return numeroGenerado;
    }
}

Con esta corrección, cuando se hayan sorteado todos los números posibles, se mostrará el mensaje "Fin Del Juego" y el juego se detendrá.

Espero que esta solución te sea útil. Si tienes alguna otra pregunta, no dudes en preguntar. ¡Buena suerte con tu juego!