Cuando un juego llega a su desenlace, ya sea victoria o derrota, necesitas dos cosas fundamentales: impedir que el jugador siga interactuando con los controles y ofrecer la opción de volver a empezar. Estas dos funcionalidades son esenciales para una experiencia de usuario completa, y resolverlas con JavaScript resulta más sencillo de lo que parece.
¿Cómo hacer funcionar el botón de reiniciar con location.reload?
El primer paso es conectar el botón de reiniciar con una función que recargue todo el juego. Dentro de la función iniciarJuego, donde ya se encuentran todos los event listeners de los botones de mascotas y ataques, se crea una nueva variable para seleccionar el botón de reiniciar [03:30]:
javascript
let botonReiniciar = document.getElementById('boton-reiniciar')
botonReiniciar.addEventListener('click', reiniciarJuego)
La función reiniciarJuego utiliza una herramienta poderosa del navegador: location.reload() [05:10]. El objeto location representa la ubicación actual en la que se encuentra el navegador. No es lo mismo que window o document; location se refiere específicamente a la URL o ruta que está cargada. Su método reload funciona exactamente como presionar el botón de recargar del navegador:
javascript
function reiniciarJuego() {
location.reload()
}
Al ejecutarse, la página se recarga por completo: las vidas vuelven a su valor original, no hay mascotas seleccionadas y no existen ataques previos. Es un reinicio limpio y total.
¿Por qué es necesario deshabilitar los botones de ataque al terminar?
Existe un problema que ocurre cuando una mascota llega a cero vidas: los botones de ataque siguen activos. Esto permite que el jugador continúe lanzando ataques incluso después de que el juego ha terminado, generando resultados absurdos como vidas en números negativos [06:20].
Para solucionarlo se utiliza el atributo disabled, una propiedad de los elementos HTML que impide la interacción con un botón [07:05]. Cuando un botón tiene este atributo, se muestra visualmente más transparente y no responde a clics.
¿Cómo aplicar disabled desde JavaScript?
En lugar de escribir disabled directamente en el HTML, se puede controlar dinámicamente desde JavaScript. Dentro de la función crearMensajeFinal, que solo se ejecuta cuando alguna mascota llega a cero vidas, se seleccionan los tres botones de ataque y se les asigna la propiedad disabled como true [08:15]:
javascript
function crearMensajeFinal() {
// lógica del mensaje de victoria o derrota
let botonFuego =document.getElementById('boton-fuego')botonFuego.disabled=truelet botonAgua =document.getElementById('boton-agua')botonAgua.disabled=truelet botonTierra =document.getElementById('boton-tierra')botonTierra.disabled=true
}
Esta es la diferencia entre hacerlo en HTML y hacerlo en JavaScript: en HTML se escribe el atributo disabled directamente en la etiqueta del botón, mientras que en JavaScript se modifica la propiedad del elemento del DOM en el momento preciso que se necesita.
¿Cuál es el flujo completo del final del juego?
El flujo funciona así:
El jugador o el enemigo llega a cero vidas.
Se ejecuta crearMensajeFinal, que muestra el mensaje de victoria o derrota.
Dentro de esa misma función, los tres botones de ataque se deshabilitan con disabled = true.
El jugador ya no puede lanzar más ataques.
Al presionar el botón de reiniciar, location.reload() recarga la página y el juego comienza desde cero.
Con estos dos mecanismos trabajando juntos, la jugabilidad queda controlada: no hay ataques después del final y siempre existe la posibilidad de una revancha. Si implementaste una solución diferente para alguno de estos problemas, comparte tu enfoque en los comentarios.
Creé una nueva función para que aparezca el botón de reiniciar con el mensaje final (así no tenerlo desde un principio)
.
Yo pensé en hacer lo mismo, pero luego creí que sería algo molesto no poder reiniciar cuando yo quiera, tal vez solo soy un usuario quisquilloso :p .
Pd: que bonitos colores los de tu vsc :3
jaja! bueno, yo llego hasta el final para ver si gano, a pesar de cualquier cosa.
Tema; Tokyo Night✌🏼
Este objeto, el cual puede utilizarse sin el prefijo window, nos sirve tanto para obtener la url o parte de ella, de la web donde nos encontramos como para redireccionarnos hacia otra página. 😎😎
Genial, gracias por el dato👍
Asi va quedando mi version, quiero poner dos opciones mas de personaje (cada personaje tiene diferentes estadísticas).
sume más elementos y cada elemento tiene 5 ataques con diferente daño y curación(la curación sólo afecta el escudo).
estoy seguro que cuando le meta css quedará más bonito, además quiero hacer unas cards para cada personaje y para cada ataque :3
te quedo muy piola quisiera saber mas o menos como lo hiciste :D
¡Amo tu juego! Dime como puedo poner puntos de defensa por favor. Es más, comparteme tu código, estaré encantado de leerlo.
esto es lo que hice antes de ver la solución del profe
gracias me sirvio
que tema usas bro?
A si va quedando
se ve bien
Que bonito
Mi forma de resolver este reto fue al utilizar la propiedad disabled para desactivar los botones justo despues de que se conoce si se perdio o se gano, es decir dentro de la función revisaVidas
Para bloquear el boton de seleccionar jugador, justo despues de seleccionarlo seria asi:
el profe hace preguntan que te replantean la vida,. duere como 1 hora pensando, como reiniciar el juego
pero como todo en la vida es mejor no complicarse y reiniciar con dos palabras, descansar e iterar.
Hola!!! primero gracias por explicar tan bien!
Segundo, estuve muchas horas intentando q me funcione el programa sin errores (antes del modulo de reiniciar y de deshabilitar los botones), estaba todo el codigo igual al tuyo. finalmente reinicie la pc cerrando el VSC y me anduvo perfecto.
Cuando puse funcion reiniciar, me dejo de funcionar el tema de poder seleccionar mascotas y todo eso. Hago click y el click no queda, y me sale el alerta de "seleccionar mascota".
Quiero llorar jajajaja
Ana enviamos tu codigo cuando puedas, porfavor. Para poder revisar y realizar sugerencias.
¿Puedes compartir tu código para revisarlo?
Una ayuda es que si sus disabled no funcionan, revisen si estan bien escritos, yo tenia dias con ese error hasta que me di cuenta que no era disable, si no disabled, con "d" al final 😂
si no fuera por tu mensaje me hubiera pasado lo mismo jajaja
Muchisimas gracias por tu aporte, tenía el mismo error
Hola!
Yo hice que cuando las vidas (del enemigo o las propias) lleguen a 0, se reinicie la partida automáticamente:
Yo cree una función llamada bloquearAtaques, donde use las variables de botones con su respectivo id, para ponerle con la condición de si la vidas del enemigo o jugador sean 0 se bloqueara los botones de ataques, con su respectivo llamado hacia finalizar el combate.
Hola, no logro hacer funcionar el botón de reiniciar juego,
quise compartir el código acá y el error q me da la consola y me lo corta cuando lo publico
Ya lo solucionamos. ¿Podrías probar de nuevo, Simón?
Me está pasando lo mismo, cómo lo solucionaste?
Cuál es la diferencia cuando coloco tildes dobles y tildes simples. A veces me confundo y me da error en la ejecución porque coloco mal dichas tildes
Hola, Giovanni. 👋 En general, ambas son aceptadas para crear textos en JavaScript y HTML; no obstante, suele preferirse el uso de comillas dobles (" ") en HTML (por ejemplo, <img src="foto.png" />), mientras que se prefieren las simples (' ') para JavaScript (por ejemplo, let name = 'Gio';).
Pero cabe decir que si abres un texto con unas, debes cerrarlas con las del mismo tipo; es decir, no puedes empezar un texto con comilla doble, pero terminarla con una simple. Eso arrojaría un error.
En sí, la única diferencia que encuentro es que puede aprovechar utilizar las comillas simples cuando ocupas utilizar en el texto las comillas dobles o viceversa. Puede no ser lo óptimo, pero funciona.
alguien vivo en 2025??
Yo 🤙🏻
Les comparto un error que tuve:
Seguí los pasos para crear la función reiniciarJuego, creando los EventListener para el botón, pero por costumbre, coloqué "Click" en lugar de "click". Me tardé, pero encontré el error 🤦♂️
Para las personas que les falla (como a mi) o simplemente no quieren complicarse creando funciones para el boton de reiniciar, lo pueden hacer en una sola linea de codigo, aqui les dejo como.
Deben quitar el id del button reiniciar - Espero haber ayudado
Muchas gracias. Aunque no se ve muy bien la imagen me sirvió esta solución. En el HTML: