Hola Adrian, recuerda que no existe una sola solución, ni una solución correcta, cada programador puede llegar al mismo resultado pero con diferente enfoque. Si bien tu código agrega ciertas validaciones que son excelentes para evitar errores, el código pudiera ser modificado para reducir un poco las líneas de código.
// Variables
let numeroUsuario = 0;
let intentos = 1;
let maximosIntentos = 0;
let numeroMaximo = 0;
while (numeroMaximo < 1 || isNaN(numeroMaximo)) {
numeroMaximo = parseInt(prompt("Quieres adivinar un numero entre 1 y ..?"));
console.log(numeroMaximo);
console.log(typeof (numeroMaximo));
if (isNaN(numeroMaximo) || numeroMaximo < 1) {
alert("Disculpe, debe ingresar un numero mayor que 0");
}
}
while (maximosIntentos < 1 || isNaN(maximosIntentos)) {
maximosIntentos = parseInt(prompt("En cuantos intentos?"));
if (isNaN(maximosIntentos) || maximosIntentos < 1) {
alert("Disculpe, debe ser un numero mayor que 0");
}
}
let numeroSecreto = Math.floor(Math.random() * numeroMaximo) + 1;
while ((numeroUsuario !== numeroSecreto) && intentos <= maximosIntentos) {
numeroUsuario = parseInt(prompt("Me indicas un número entre 1 y " + numeroMaximo + " por favor:"));
console.log(numeroUsuario);
console.log(typeof (numeroUsuario));
if (numeroUsuario === numeroSecreto) {
//Acertamos, fue verdadera la condición
alert(`Acertaste, el número es: ${numeroUsuario}. Lo hiciste en ${intentos} ${intentos === 1 ? 'vez' : 'veces'}`);
} else {
if (numeroUsuario > numeroSecreto) {
alert('El número secreto es menor');
} else {
alert('El número secreto es mayor');
}
// Validar el número de intentos realizados
if (intentos === maximosIntentos) {
alert(`Llegaste al número máximo de ${maximosIntentos} intentos`);
}
//Incrementamos el contador cuando no acierta
intentos++;
}
}
Toma en cuenta las siguientes observaciones:
- La validación de los primeros dos
if
puede ser la misma ya que lo que quieres lograr es lo mismo, obtener un número entero positivo mayor a cero. - En tu código la sentencia
if
del tercer ciclo while
no es necesaria ya que anteriormente te cercioraste de que numeroMáximo
sea un entero positivo mayor a cero. - La variable
numeroMáximo
tiene un acento en la letra a, no es recomedable utilizar carácteres no ingléses en el código (como letras con acento, carácteres de otros alfabetos como el chino, etc). Si bien JS puede y está preparado para permitir carácteres unicode, no es una práctica muy realizada debido a que el inglés suele ser mejor en cuanto a legibilidad pensando en una audiencia global. Sí que los puedes usar en los comentarios, pero no es recomendable hacerlo en el código fuente, como en los nombres de variables en este caso. - Como recomendación, siempre es una buena práctica eliminar código que no se utiliza.
- La condición del ciclo while puede cambiar a la propuesta y con eso te ahorras utilizar el
break;
. Claro, tienes que hacer las modificaciones adecuadas. - Otra recomendación que haría, es eliminar los
console.log()
, si bien es una recomendación hacer uso de ellos, en especial durante la fase de desarrollo, no es estrictamente necesario utilizar este método. - Adicionalmente, recuerda siempre indentar tu código para mejorar su legibilidad.
Como podrás darte cuenta, las recomendaciones anteriores fueron hechas desde mi punto de vista y alguien más podrá diferir de mí o incluso estar de acuerdo conmigo, lo que te quiero dar a entender es que nadie tiene la verdad absoluta y siempre es bueno tener distintos puntos de vista, eso te será de utilidad en tus futuros trabajos de programación.