Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

Error de código

Hola, algo no estoy haciendo bien y al cambiar la ultima funcion para que se vaya completando la lista, se me desaparecen las condiciones iniciales, especificamente los textos:

let numeroSecreto = obtenerNumeroAleatorio(); let intentos = 0; let listaNumerosSorteados = [];

function asignarTextoElemento(elemento, texto) { let elementoHTML = document.querySelector(elemento); elementoHTML.innerHTML = texto; return; } function verificarIntento() { let numeroDeUsuario = parseInt(document.getElementById('valorUsuario').value);//busca la etiqueta input y obtiene el valor, aparte parseint convierte el valor a numero if (numeroDeUsuario === numeroSecreto) { asignarTextoElemento('p', ¡Adivinaste!, en ${intentos} ${(intentos === 1) ? 'intento' : 'intentos'});//se usa el acento grave para poder usar la variable intentos asignarTextoElemento('h1', '¡Felicidades!');//se usa el acento grave para poder usar la variable intentos asignarTextoElemento('h1', 'El número secreto era ' + numeroSecreto); document.getElementById('reset').removeAttribute('disabled'); } else { if (numeroDeUsuario > numeroSecreto) { asignarTextoElemento('p', '¡El número secreto es menor!'); } else { asignarTextoElemento('p', '¡El número secreto es mayor! ¡Intenta de nuevo!'); } intentos++; limpiarCaja(); } return; }

function limpiarCaja() { document.querySelector('#valorUsuario').value = '';//limpia la caja de texto }

function condicionesInciales() { asignarTextoElemento('p', 'Adivina el número secreto entre 1 y 10'); asignarTextoElemento('h1', 'Juegazo del número secreto'); asignarTextoElemento('p', 'Puedes intentar hasta 10 veces'); numeroSecreto = obtenerNumeroAleatorio(); intentos = 1; return; } function reiniciarJuego() { //limpiar caja limpiarCaja(); //indiciar mensajes de itervalos condicionesInciales(); document.querySelector('#reset').setAttribute('disabled', 'true'); }

condicionesInciales(); //esta funciona: function obtenerNumeroAleatorio() { let numeroAleatorio = Math.floor(Math.random() * 10) + 1;//floor genera un nuemero decimal, y math.random genera un numero aleatorio entre 0 y 1, por eso se multiplica por 10, y se le suma 1 para que no sea 0 return numeroAleatorio; } //al querer sustituirla por esta, se quiebra. function obtenerNumeroAleatorio() { let numeroAleatorio = Math.floor(Math.random() * 10) + 1; if (listaNumerosSorteados.includes(numeroAleatorio)) { return obtenerNumeroAleatorio(); }else { listaNumerosSorteados.push(numeroAleatorio); return numeroAleatorio; } }

2 respuestas

Hola Rodrigo,

Parece que estás enfrentando un problema al intentar implementar la función obtenerNumeroAleatorio con recursividad para evitar la repetición de números sorteados.

El problema que mencionas, donde las condiciones iniciales desaparecen, podría estar relacionado con cómo estás utilizando la función asignarTextoElemento.

Aquí hay algunas sugerencias que podrían ayudarte a resolver el problema:

  1. Verifica el uso de asignarTextoElemento: Asegúrate de que estás utilizando correctamente la función asignarTextoElemento. Si estás llamando a esta función varias veces para el mismo elemento, el texto se sobrescribirá cada vez. Por ejemplo, si llamas a asignarTextoElemento('p', 'Texto nuevo'), el texto anterior en el elemento 'p' será reemplazado.

  2. Revisa la lógica de la función recursiva: La función obtenerNumeroAleatorio que estás utilizando es recursiva, lo que significa que se llama a sí misma hasta encontrar un número que no esté en la lista. Sin embargo, si todos los números posibles ya están en la lista, la función seguirá llamándose indefinidamente, lo que podría causar que el navegador se quede sin memoria o que se detenga el script.

  3. Condición de salida: Asegúrate de tener una condición de salida en tu función recursiva. Por ejemplo, podrías verificar el tamaño de listaNumerosSorteados y compararlo con el rango de números posibles. Si todos los números ya fueron sorteados, podrías reiniciar el juego o mostrar un mensaje al usuario.

  4. Depuración con console.log: Utiliza console.log para depurar el estado de tu aplicación. Puedes imprimir el valor de numeroAleatorio y el contenido de listaNumerosSorteados para ver cómo está evolucionando tu lista y detectar posibles problemas.

Aquí tienes un ejemplo de cómo podrías modificar la función para incluir una condición de salida:

function obtenerNumeroAleatorio() {
    if (listaNumerosSorteados.length >= 10) {
        console.log("Todos los números han sido sorteados.");
        return null; // O reinicia el juego aquí
    }
    let numeroAleatorio = Math.floor(Math.random() * 10) + 1;
    if (listaNumerosSorteados.includes(numeroAleatorio)) {
        return obtenerNumeroAleatorio();
    } else {
        listaNumerosSorteados.push(numeroAleatorio);
        return numeroAleatorio;
    }
}

Espero que estas sugerencias te ayuden a resolver el problema. ¡Bons estudios!

Muchas gracias por la pronta respuesta, lo implementaré.

Atte