Una alternativa flexible, en la cual el usuario puede escoger el intervalo de números en el que hay que adivinar, y puede decidir el máximo de intentos que quiera, además, tiene validaciones para cuando se cambie de pestaña y se quiera volver a jugar.
function solicitarIntervalo() {
let rangoMinimo = parseInt(prompt('Elige un número mínimo para el intervalo'));
let rangoMaximo = parseInt(prompt('Elige un número máximo para el intervalo, que no sea más de 100'));
if (rangoMaximo <= 100) {
if (rangoMinimo != 0 && rangoMaximo != 0) {
if (rangoMinimo < rangoMaximo) {
let numeroSecreto = Math.floor(Math.random() * (rangoMaximo - rangoMinimo + 1)) + rangoMinimo;
console.log(numeroSecreto);
let numeroUsuario = 0;
let contador = 1;
let maximosIntentos = parseInt(prompt('Elige el número máximo de intentos'));
while (numeroUsuario != numeroSecreto) {
numeroUsuario = parseInt(prompt(`Elige un número entre ${rangoMinimo} y ${rangoMaximo}`));
if (numeroUsuario < rangoMinimo || numeroUsuario > rangoMaximo) {
alert(`El número debe estar en el intervalo de ${rangoMinimo} y ${rangoMaximo}`);
break;
}
if (numeroUsuario == numeroSecreto) {
alert(`¡Adivinaste el número ${numeroSecreto}!`);
alert(`Número de intentos: ${contador}`);
break;
} else {
if (numeroUsuario > numeroSecreto) {
alert('¡El número secreto es menor!');
contador++;
} else {
alert('¡El número secreto es mayor!');
contador++;
}
}
if (contador > maximosIntentos) {
alert(`¡Número de intentos máximo (${contador - 1}) alcanzado!`);
alert(`¡El número era ${numeroSecreto}!`);
break;
}
}
} else {
alert('El número mínimo debe ser menor que el número máximo');
}
} else {
alert('Los números no pueden ser 0');
}
} else {
alert('El número máximo no puede ser mayor a 100');
}
if (confirm("¿Quieres jugar de nuevo?")) {
solicitarIntervalo();
} else {
alert("¡Gracias por jugar!");
return;
}
}
document.addEventListener('DOMContentLoaded', function() { solicitarIntervalo(); });
document.addEventListener('visibilitychange', function() { if (!document.hidden) { solicitarIntervalo(); } });