Fundamentos de Programación

1

Bienvenida a Platzi: ¿qué necesitas para tomar el curso?

2

Programación en Navegadores: Primeros Pasos

3

Crea tu primer sitio web

4

Sitios web con HTML

5

Estructura de árbol en HTML

6

Instalando tu primer editor de código

7

Cómo declarar variables y usar prompt

8

Algoritmo de piedra, papel o tijera

9

Algoritmo avanzado de piedra, papel o tijera

10

Aleatoriedad

11

Refactor del código usando funciones

12

Ciclos

13

Gana 3 veces

14

Archivos de HTML y JavaScript

15

¿Qué es el DOM?

Quiz: Fundamentos de Programación

Desarrollando un juego con HTML y JavaScript

16

Maquetación con HTML

17

Sección de elegir mascota

18

¿Dónde ubicar la etiqueta script? Conectando HTML con JavaScript

19

Escuchando eventos con JavaScript

20

addEventListener

21

Manipulación del DOM

22

Enemigos aleatorios

23

Ataques en JavaScript

24

Ataques aleatorios del enemigo

25

Imprimiendo ataques del enemigo

26

¿Ganaste, perdiste o empataste?

27

Tablas de verdad

28

Creando el contador de vidas

29

¿Quién ganó el juego?

30

Reiniciando el juego

31

Ocultando elementos HTML con JS para mejorar la UX del juego

Quiz: Desarrollando un juego con HTML y JavaScript

Estilos con CSS

32

Anatomía de CSS

33

Tipos de display

34

Flexbox

35

Modelo de caja

36

Imágenes para los Mokepones

37

Estilos del botón

38

Adaptando HTML al diseño del juego

39

Layout: título y ataques

40

Adaptando JavaScript al diseño del juego

41

CSS Grid

42

Responsive Design

43

Detalles finales

Quiz: Estilos con CSS

Optimización de código

44

Revisión de código

45

Don't repeat yourself (DRY)

46

Clases y objetos

47

Clases y objetos de Mokepon

48

Arrays o arreglos

49

Objetos vs. arreglos

50

Ciclos: manipulando el DOM con iteradores

51

Declaración lenta de variables

52

Una sola fuente de la verdad

53

Mascotas aleatorias con arreglos

54

Ataques dinámicos por cada mascota: extraer

55

Renderizado dinámico en HTML

56

Eventos de click dinámicos

57

Secuencia de ataques del enemigo

58

Iniciando el combate

59

Resolviendo el reto de condicionales

60

Optimizando el frontend del juego

Quiz: Optimización de código

Mapa con canvas

61

Introducción a canvas: dibujando con JavaScript

62

Moviendo a Capipepo hacia la derecha

63

Movimiento hacia todas las direcciones

64

Movimientos con el teclado

65

Imágenes y personajes de fondo

66

Métodos en las clases

67

Obstáculos y colisiones

68

Combate entre mokepones colisionados

69

Mapa responsive

70

Botones bonitos y viewport

Quiz: Mapa con canvas

Backend: videojuego multijugador

71

¿Qué es backend?

72

Instalación de Node.js y NPM

73

Terminal de comandos y Node.js

74

Servidor web con Express.js

75

HTTP, localhost, servidores y puertos

76

Express.js y fetch: API REST con JavaScript

77

JSON y POST: mokepon online

78

Transmisión de coordenadas

79

Mokepones dinámicos en el mapa

80

Optimizando el mapa del juego

81

Batalla entre jugadores

82

Consumiendo la API de ataques del enemigo

Quiz: Backend: videojuego multijugador

Próximos pasos

83

Probando el juego en varios dispositivos

84

¿Y ahora qué curso tomar?

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso Gratis de Programación Básica

Curso Gratis de Programación Básica

Juan David Castro Gallego

Juan David Castro Gallego

Reiniciando el juego

30/84
Recursos

Aportes 238

Preguntas 61

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Creé una nueva función para que aparezca el botón de reiniciar con el mensaje final (así no tenerlo desde un principio).

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. 😎😎

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

esto es lo que hice antes de ver la solución del profe

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

function revisarVidas() {
    if(vidasEnemigo == 0){
        crearMensajeFinal("FELICITACIONES GANASTE✨");
        botonFuego.disabled = true;
        botonAgua.disabled = true;
        botonTierra.disabled = true;
    } else if(vidasJugador == 0) {
        crearMensajeFinal("UPS, LASTIMOSAMENTE PERDISTE😪");
        botonFuego.disabled = true;
        botonAgua.disabled = true;
        botonTierra.disabled = true;
    }
};```



![plat.jpg](https://static.platzi.com/media/user_upload/plat-d7496e19-6d13-4372-8db8-5f7664372040.jpg)

A si va quedando

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

Hola!

Yo hice que cuando las vidas (del enemigo o las propias) lleguen a 0, se reinicie la partida automáticamente:

function revisarVidas() {
    if (VidasEnemigo == 0) {
        location.reload()
        alert('GANASTE!!!')
        //crearMensajeFinal('GANASTE!!!')
    } else if (VidasJugador == 0) {
        location.reload()
        alert('PERDISTE :(')
        //crearMensajeFinal('PERDISTE :(')
    }
}

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 😂

Creo que ya esta todo y asi me quedo:

location.reload()🔄

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

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.

para los HTML lovers, así lo modifican directamente desde el DOM y se ahorran 3 lineas de código 😉

document.getElementById("button-fire").disabled = true
        document.getElementById("button-water").disabled = true
        document.getElementById("button-grass").disabled = true 

Asi va quedando:

A mi me ha pasdo que he seguido los pasos correctamente y cuando le daba correr al juego no me reiniciaba todo y tampoco desde la consola del html me dejaba. Asi que consulte y para que se ejecutara correctamente solo hay que agregarle unos "()" parentesis desdepues de location.reload() y alli si me funciono correctamente

de esta forma puedes deshabilitar todos los botones que quieras al mismo tiempo.

 let btn = document.getElementsByClassName('btn')
function msgFinal(result){
    mensajeFinal.innerHTML = result
    for (const item of btn) {
        item.disabled =true
    }

El tema de los botones y no poder usarlos lo que hice fue, que no funcionaran los botones de ataque hasta que no se eligiera una mascota, luego al momento de elegir la mascota deshabilite el boton de elegir, se coloca su respectivo nombre, vidas y comienza el juego, al momento de llegar a 0 vidas aparece tu victoria y coloque una condicional de que si alguna de las dos vidas llega a 0 los botones dejan de funcionar 😃
Estoy feliz de poder haberlo hecho hace como 4 clases atras por pura curiosidad, siento que voy por buen camino

ahh bueno con disabled queda mejor que mi solución del retrun jajajajajajjajajaa 🤪

💚Así lo hice💚:


  1. Primero genero una función que me permita deshabilitar lo botones de ataque una vez que hayamos perdido o ganado.
function deshabilitarBotones(){
    let botonFuego = document.getElementById("boton-fuego")
    botonFuego.disabled = true

    let botonAgua = document.getElementById("boton-agua")
    botonAgua.disabled = true

    let botonTierra = document.getElementById("boton-tierra")
    botonTierra.disabled = true
}
  1. Usamos el atributo .disabled = true para hacer que estos pierdan su uso al llamarla en la función “revisarVidas()”:
function revisarVidas(){

    if(vidasEnemigo == 0){
        crearMensajeFinal("GANASTE LA BATALLA✌")
        deshabilitarBotones()
    }else if(vidasJugador == 0){
        crearMensajeFinal("PERDISTE LA BATALLA😞")
        deshabilitarBotones()
    }

}
  1. Al final creamos las siguientes variables en la función “iniciarJuego()”:
let botonReciniciar = document.getElementById("boton-reiniciar")
botonReciniciar.addEventListener("click", reiciciarjuego)
  1. Para después usar “location.reload()” al hacer clic en el botón “reiniciar”:
function reiciciarjuego(){
    location.reload()
}

Yo para que los botones de los ataques no funcionen una vez llegado a “0” hice esto:

function combate() {
    
    let spanVidasJugador = document.getElementById("vidas-jugador")
    let spanVidasEnemigo = document.getElementById("vidas-enemigo")

  if (vidasEnemigo > 0 && vidasJugador > 0) {
    
    if (ataqueEnemigo == ataqueJugador) {
      crearMensaje("🤝EMPATE🤝");
      ;
    } else if (
      (ataqueJugador == "FUEGO🔥" && ataqueEnemigo == "PLANTA🍃") ||
      (ataqueJugador == "AGUA💦" && ataqueEnemigo == "FUEGO🔥") ||
      (ataqueJugador == "PLANTA🍃" && ataqueEnemigo == "AGUA💦")
    ) {
      crearMensaje("🏆GANASTE!!🏆");
      vidasEnemigo--
      spanVidasEnemigo.innerHTML = vidasEnemigo
      ;
    } else {
      crearMensaje("😢 PERDISTE No te Desanimes 😢")
      vidasJugador--
      spanVidasJugador.innerHTML = vidasJugador;
      ;
    }
    revisarVidas()
  }

Y yo que estaba reiniciando todo manualmente para luego el profe mostrar que se hacia con una sola linea 😦 jsjsj

Adicionalmente, para controlar la activacion de los botones, se puede crear una función que reciba como parametro true o false. True para desactivarlos, false para activarlos.

/**
 * Cambia el estado de los botones de ataque, si están habilitados los deshabilita y viceversa.
 */
function estaDesactivadoBotonesAtaque(estado) {
    botonFuego.disabled = estado;
    botonAgua.disabled = estado;
    botonTierra.disabled = estado;
}
La función `function reiniciarJuego(){ location.reload(); }` es una manera eficaz de reiniciar el juego, ya que recarga la página y restablece todas las variables y estados a su valor inicial. Esto es muy útil en el contexto de un juego web, donde los estados del juego se mantienen en la memoria del navegador. Sin embargo, considera que esta acción puede ser más abrupta que implementar una lógica más personalizada para reiniciar el juego, como reiniciar variables específicas y actualizar la interfaz sin recargar la página. Ambas opciones tienen sus pros y contras, dependiendo de la experiencia que desees ofrecer al usuario.
Tambien deshabilite el boton de seleccionar. Ya que sino podemos jugar porque ya ganamos o perdimos, no tiene sentido que nos deje cambiar de personaje. ```js function crearMensajeFinal(resultadoFinal){ let sectionMensajes = document.getElementById("mensajes") let parrafo = document.createElement("p") parrafo.innerHTML = resultadoFinal sectionMensajes.appendChild(parrafo) let botonFuego = document.getElementById("boton-fuego") botonFuego.disabled = true let botonAgua = document.getElementById("boton-agua") botonAgua.disabled = true let botonTierra = document.getElementById("boton-tierra") botonTierra.disabled = true let botonSeleccionar = document.getElementById("boton-mascota") botonSeleccionar.disabled = true } ```
también se puede usar en la función seleccionarMascotaJugar: let botonCapipepo = documento.getElementById ("capipepo") botonCapipepo.disabled = true (con cada una) para que no puedan cambiar al haber seleccionado una mascota o hay una forma más corta?
Hola. Para acortar código tuve la idea de agrupar todos los botones de ataque con el atributo "name" en el código Html y luego deshabilitarlos en java de la siguiente manera:```js function mensajeFinal(veredicto) { let ubicación = document.getElementById("mensajes") let párrafo = document.createElement("p") párrafo.innerHTML= veredicto ubicación.appendChild(párrafo) //deshabilitar botones document.getElementsByName("botones-ataques").disabled = true } ```la cuestión es que eso no funciona y no sabía por qué, así que por curiosidad se lo pregunte a la IA de microsoft y me lo corrigió: ![](https://static.platzi.com/media/user_upload/image-f78c2506-94c6-49eb-8d4f-440ddc6fb5ea.jpg)nos van a reemplazar 😔![]()
Yo agregue una funcion finDelJuego para hacer mas legible el codigo, y solo la mando llamar cuando el contador llega a 0 ![](https://static.platzi.com/media/user_upload/image-26c49259-4fb0-4205-a3e7-7ab0af81b0d3.jpg) Y para el reiniciar tambien me encontre el location.reload()
Hola Chicos! Por ejemplo cuando seleccionamos la mascota apenar de iniciar el juego aun puedes seleccionar otra y cambia pero las vidas no, entonces opté por sedhabilitar el boton luego de seleccionar mascota ![](https://static.platzi.com/media/user_upload/image-ba9350ca-f099-4c54-aaa3-b10f5d338dcd.jpg) document.getElementById('button-card').disabled = true Esta forma corta del código la aprendí del compañero @albertoAngelVillanueva, Gracias por el aporte.
Yo tuve una idea la cual fue esta ![](https://static.platzi.com/media/user_upload/image-9b27437d-5207-45f8-9d4d-480dc7843e71.jpg) hacer que cuando el jugador o el enemigo tengan 0 vidas automaticamente desabilitar los botones de una forma mas sencilla
alguien me ayuda, no se me deshabilitan los botones. ```js let atakeJugador let atakeEnemigo let vidasJugador = 3 let vidasEnemigo = 3 function iniciarJuego() { let botonMascotaJugador = document.getElementById("boton-monstruo") botonMascotaJugador.addEventListener("click", seleccionarMascotaJugador) let botonMasa = document.getElementById("boton-masa") botonMasa.addEventListener("click", atakeMasa) let botonAcido = document.getElementById("boton-acido") botonAcido.addEventListener("click", atakeAcido) let botonLogica = document.getElementById("boton-logica") botonLogica.addEventListener("click", atakeLogica) let botonReiniciar = document.getElementById("boton-riniciar") botonReiniciar.addEventListener("click" , reiniciarJuego) } function seleccionarMascotaJugador() { let inputGravitas = document.getElementById("Gravitas") let inputRelativor = document.getElementById("Relativor") let inputÉstero = document.getElementById("Éstero") let inputCarbónix = document.getElementById("Carbónix") let inputNewtonius = document.getElementById("Newtonius") let inputGaussus = document.getElementById("Gaussus") let spamMonstruoJugador = document.getElementById ("monstruo-jugador") if (inputGravitas.checked){ spamMonstruoJugador.innerHTML = "Gravitas" } else if (inputRelativor.checked){ spamMonstruoJugador.innerHTML = "Relativor" } else if(inputÉstero.checked){ spamMonstruoJugador.innerHTML = "Éstero" } else if(inputCarbónix.checked){ spamMonstruoJugador.innerHTML = "Carbónix" } else if(inputNewtonius.checked){ spamMonstruoJugador.innerHTML = "Newtonius" } else if(inputGaussus.checked){ spamMonstruoJugador.innerHTML = "Gaussus" } else { alert("selecciona a tu monstruo") } seleccionarMascotaenemigo() } function seleccionarMascotaenemigo(){ let monstruoAleatorio = aleatorio(1,6) let spamMonstruoEnemigo = document.getElementById("monstruo-enemigo") if (monstruoAleatorio == 1){ spamMonstruoEnemigo.innerHTML = "Gravitas" } else if (monstruoAleatorio == 2){ spamMonstruoEnemigo.innerHTML = "Relativor" } else if (monstruoAleatorio == 3){ spamMonstruoEnemigo.innerHTML = "Éstero" } else if (monstruoAleatorio == 4){ spamMonstruoEnemigo.innerHTML = "Carbónix" } else if (monstruoAleatorio == 5){ spamMonstruoEnemigo.innerHTML = "Newtonius" } else { spamMonstruoEnemigo.innerHTML = "Gaussus" } } function atakeMasa(){ atakeJugador = "MASA" atakeAleatorioEnemigo() } function atakeAcido(){ atakeJugador = "ACIDO" atakeAleatorioEnemigo() } function atakeLogica(){ atakeJugador = "LOGICA" atakeAleatorioEnemigo() } function atakeAleatorioEnemigo(){ let atakeAleatorio = aleatorio(1,3) if (atakeAleatorio == 1){ atakeEnemigo = "MASA" } else if (atakeAleatorio == 2){ atakeEnemigo = "ACIDO" } else { atakeEnemigo = "LOGICA" } combate() } function combate(){ let spamVidasJugador = document.getElementById("vidas-jugador") let spamVidasEnemigo = document.getElementById("vidas-enemigo") if(atakeEnemigo == atakeJugador ){ crearMensaje("EMPATE") }else if((atakeJugador == "MASA" && atakeEnemigo == "LOGICA") || (atakeJugador == "LOGICA" && atakeEnemigo == "ACIDO") || (atakeJugador == "ACIDO" && atakeEnemigo == "MASA")){ crearMensaje("GANASTE!!") vidasEnemigo-- spamVidasEnemigo.innerHTML = vidasEnemigo }else{ crearMensaje("PERDISTE") vidasJugador-- spamVidasJugador.innerHTML = vidasJugador } revisarVidas() } function revisarVidas(){ if (vidasEnemigo == 0){ crearMensajeFinal("VICTORIA 🎉🎉") } else if (vidasJugador == 0){ crearMensajeFinal("PERDEDOR 😭😭") } } function crearMensaje(resultado){ let sectionMensajes = document.getElementById("mensajes") let parrafo = document.createElement("p") parrafo.innerHTML = "Tu monstruo atako con " + atakeJugador + ", El monstruo enemigo atako con " + atakeEnemigo + "- " + resultado sectionMensajes.appendChild(parrafo) } function crearMensajeFinal(resultadoFinal){ let sectionMensajes = document.getElementById("mensajes") let parrafo = document.createElement("p") parrafo.innerHTML = resultadoFinal sectionMensajes.appendChild(parrafo) let botonMasa = document.getElementById("boton-masa") botonMasa.disable = true let botonAcido = document.getElementById("boton-acido") botonAcido.disable = true let botonLogica = document.getElementById("boton-logica") botonLogica.disable = true } function reiniciarJuego(){ location.reload() } function aleatorio(min, max){ return Math.floor(Math.random() * (max - min + 1) + min) } window.addEventListener("load", iniciarJuego) ```let atakeJugadorlet atakeEnemigolet vidasJugador = 3let vidasEnemigo = 3 function iniciarJuego() {    let botonMascotaJugador = document.getElementById("boton-monstruo")    botonMascotaJugador.addEventListener("click", seleccionarMascotaJugador)     let botonMasa = document.getElementById("boton-masa")        botonMasa.addEventListener("click", atakeMasa)    let botonAcido = document.getElementById("boton-acido")        botonAcido.addEventListener("click", atakeAcido)    let botonLogica = document.getElementById("boton-logica")        botonLogica.addEventListener("click", atakeLogica)     let botonReiniciar = document.getElementById("boton-riniciar")    botonReiniciar.addEventListener("click" , reiniciarJuego)} function seleccionarMascotaJugador() {    let inputGravitas = document.getElementById("Gravitas")    let inputRelativor = document.getElementById("Relativor")    let inputÉstero = document.getElementById("Éstero")    let inputCarbónix = document.getElementById("Carbónix")    let inputNewtonius = document.getElementById("Newtonius")    let inputGaussus = document.getElementById("Gaussus")    let spamMonstruoJugador = document.getElementById ("monstruo-jugador")     if (inputGravitas.checked){        spamMonstruoJugador.innerHTML = "Gravitas"     } else if (inputRelativor.checked){        spamMonstruoJugador.innerHTML = "Relativor"     } else if(inputÉstero.checked){        spamMonstruoJugador.innerHTML = "Éstero"     } else if(inputCarbónix.checked){        spamMonstruoJugador.innerHTML = "Carbónix"     } else if(inputNewtonius.checked){        spamMonstruoJugador.innerHTML = "Newtonius"     } else if(inputGaussus.checked){        spamMonstruoJugador.innerHTML = "Gaussus"     } else {        alert("selecciona a tu monstruo")    }      seleccionarMascotaenemigo()} function seleccionarMascotaenemigo(){    let monstruoAleatorio = aleatorio(1,6)    let spamMonstruoEnemigo = document.getElementById("monstruo-enemigo")     if (monstruoAleatorio == 1){        spamMonstruoEnemigo.innerHTML = "Gravitas"    } else if (monstruoAleatorio == 2){        spamMonstruoEnemigo.innerHTML = "Relativor"    } else if (monstruoAleatorio == 3){        spamMonstruoEnemigo.innerHTML = "Éstero"    } else if (monstruoAleatorio == 4){         spamMonstruoEnemigo.innerHTML = "Carbónix"    } else if (monstruoAleatorio == 5){        spamMonstruoEnemigo.innerHTML = "Newtonius"    } else {        spamMonstruoEnemigo.innerHTML = "Gaussus"    }} function atakeMasa(){    atakeJugador = "MASA"    atakeAleatorioEnemigo()    }function atakeAcido(){    atakeJugador = "ACIDO"     atakeAleatorioEnemigo()   } function atakeLogica(){    atakeJugador = "LOGICA"    atakeAleatorioEnemigo()    } function atakeAleatorioEnemigo(){    let atakeAleatorio = aleatorio(1,3)     if (atakeAleatorio == 1){        atakeEnemigo = "MASA"    } else if (atakeAleatorio == 2){        atakeEnemigo = "ACIDO"    } else {        atakeEnemigo = "LOGICA"    }        combate()} function combate(){    let spamVidasJugador = document.getElementById("vidas-jugador")    let spamVidasEnemigo = document.getElementById("vidas-enemigo")     if(atakeEnemigo  == atakeJugador ){        crearMensaje("EMPATE")    }else if((atakeJugador == "MASA" && atakeEnemigo == "LOGICA") || (atakeJugador == "LOGICA" && atakeEnemigo == "ACIDO") || (atakeJugador == "ACIDO" && atakeEnemigo == "MASA")){        crearMensaje("GANASTE!!")        vidasEnemigo--        spamVidasEnemigo.innerHTML = vidasEnemigo    }else{        crearMensaje("PERDISTE")        vidasJugador--        spamVidasJugador.innerHTML = vidasJugador    }     revisarVidas()         } function revisarVidas(){    if (vidasEnemigo == 0){        crearMensajeFinal("VICTORIA 🎉🎉")    } else if (vidasJugador == 0){        crearMensajeFinal("PERDEDOR 😭😭")    } } function crearMensaje(resultado){    let sectionMensajes = document.getElementById("mensajes")     let parrafo = document.createElement("p")    parrafo.innerHTML = "Tu monstruo atako con " + atakeJugador + ", El monstruo enemigo atako con " + atakeEnemigo +  "- " + resultado     sectionMensajes.appendChild(parrafo)}       function crearMensajeFinal(resultadoFinal){    let sectionMensajes = document.getElementById("mensajes")     let parrafo = document.createElement("p")    parrafo.innerHTML = resultadoFinal     sectionMensajes.appendChild(parrafo)     let botonMasa = document.getElementById("boton-masa")        botonMasa.disable = true    let botonAcido = document.getElementById("boton-acido")        botonAcido.disable = true    let botonLogica = document.getElementById("boton-logica")        botonLogica.disable = true } function reiniciarJuego(){    location.reload()} function aleatorio(min, max){    return Math.floor(Math.random() \* (max - min + 1) + min)} window.addEventListener("load", iniciarJuego)
Cree una nueva sección para el resultado, por si acaso alguien también la quiera poner :)![](https://static.platzi.com/media/user_upload/image-5d7a634a-d7ea-48ab-8046-cf46dc70800a.jpg)![](https://static.platzi.com/media/user_upload/image-5c979144-d4a7-402a-97d4-3aedd67b0dcb.jpg)
Para el minuto, 1:45 ![](https://static.platzi.com/media/user_upload/image-1070ec2d-207c-497e-9245-3c3a0df3e1ee.jpg) ![](https://static.platzi.com/media/user_upload/image-20757d36-d559-44f8-aca5-0dcedbac650b.jpg) ![](https://static.platzi.com/media/user_upload/image-f4e1dc14-b75f-421a-b0cf-8e53fc807639.jpg) ![](https://static.platzi.com/media/user_upload/image-09b1f38c-e2a2-4b71-9994-0a62b75f7b50.jpg) Función ```js function reiniciarJuego(){ if(vidasJugador==0 || vidasContrincante==0){ alert("se reinicio el juego") vidasContrincante = 3 spanVidasContrincante.innerHTML = vidasContrincante vidasJugador = 3 spanVidasJugador.innerHTML = vidasJugador } } ``` Para que funcione el botón ```js function botonesJuego(){ //botones juego let botonMascotaJugador = document.getElementById('boton-seleccionar') botonMascotaJugador.addEventListener('click', seleccionarMascotaJugador) let botonAtaqueFuego = document.getElementById('boton-fuego') botonAtaqueFuego.addEventListener('click', ataqueFuego) let botonAtaqueAgua = document.getElementById('boton-agua') botonAtaqueAgua.addEventListener('click', ataqueAgua) let botonAtaqueTierra = document.getElementById('boton-tierra') botonAtaqueTierra.addEventListener('click', ataqueTierra) let botonReiniciarJuego = document.getElementById('boton-reiniciar') botonReiniciarJuego.addEventListener('click', reiniciarJuego) } ``` ![](https://i.pinimg.com/736x/27/d5/1a/27d51a2ec6ee3c0a340584e9ba6d79e7--memes-humor.jpg)
![]()![](<function seleccionarMascotaEnemigo () { let mascotaAleatorio = aleatorio(1,3) let spanMascotaEnemigo = document.getElementById("mascota-enemigo") if (mascotaAleatorio == 1){ spanMascotaEnemigo.innerHTML = "Hipodoge" }else if (mascotaAleatorio == 2 ) { spanMascotaEnemigo.innerHTML = "Capipepo" }else { spanMascotaEnemigo.innerHTML = "Ratigueya" } let botonMascotaJugador = document.getElementById("boton-mascota") botonMascotaJugador.disabled = true }>)También use el comando disable en la funcion seleccionarMascotaenemigo para cuando seleccionas una mascota automaticamente se bloquea el boton ![](https://static.platzi.com/media/user_upload/image-8ed62a56-836e-44ac-ab64-163f3ff6f22f.jpg)

Me quedo asi, al pausar la clase fui a buscar documentacion y puesss, asi quedo 😄

function validacionVidas() {
  if (vidasIA == 0) {
    mensajeFinal("¡Ganaste el Combate!")
    apagarBotones()
  } else if (vidasPlayer == 0) {
    mensajeFinal("Perdiste...")
    apagarBotones()
  }
}

function apagarBotones() {
  let btnFire = document.getElementById("btn-fire")
  btnFire.disabled = true
  let btnWater = document.getElementById("btn-water")
  btnWater.disabled = true
  let btnEarth = document.getElementById("btn-earth")
  btnEarth.disabled = true
}

Pensé que iba a hacer una nueva función donde volviera a poner los valores iniciales de las vidas, deschequeara la mascota seleccionada y borrara el historial de combate pero mandar a recargar la página se ve mucho más práctico XD

Soy nuevo en Programación. Este es mi primer curso. Como no tenia el conocimiento, busque en mi navegador, “¿Cómo recargar la página con código JS?” y me salió el código: window.location.reload() y Listo!!

¡Nunca paren de aprender! Animo!!

let ataquejugador;
let ataquealeatorioenemigo;
let vidajugador=3;
let vidaenemigo=3;

function cargarpagina(){
    let botonMascotaJugador=document.getElementById('boton_mascota');
    botonMascotaJugador.addEventListener('click',seleccionarMascotaJugador);
    
    let botonfuego=document.getElementById('boton-fuego');
    botonfuego.addEventListener('click',ataquefuego);
    let botonagua=document.getElementById('boton-agua');
    botonagua.addEventListener('click',ataqueagua);
    let botontierra=document.getElementById('boton-tierra');
    botontierra.addEventListener('click',ataquetierra);
    let boton_reiniciar=document.getElementById('boton-reiniciar');
    boton_reiniciar.addEventListener('click',reiniciarjuego);
}
function seleccionarMascotaJugador(){
    let inputhipodoge=document.getElementById('hipodoge');
    let inputcapipepo=document.getElementById('capipepo');
    let inputratigueya=document.getElementById('ratigueya');
    let nombre_tumascota=document.getElementById('nombre-tumascota');
    if (inputhipodoge.checked){
        nombre_tumascota.innerHTML='Hipodoge';
    }else if(inputcapipepo.checked){
        nombre_tumascota.innerHTML='Capipepo';
    }else if(inputratigueya.checked){
        nombre_tumascota.innerHTML='Ratigueya';
    }else{
        alert('No has seleccionado ninguna mascota');
    }
    seleccionarmascotaenemigo();  
   
}

function aleatorio(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}

function seleccionarmascotaenemigo(){
    let nummascotaenemigo=aleatorio(1,3);
    let spammascotaenemigo=document.getElementById('nombre-mascotaenemigo');
    
   
    if (nummascotaenemigo==1){
        spammascotaenemigo.innerHTML='Hipodoge';
    }else if (nummascotaenemigo==2){
        spammascotaenemigo.innerHTML='Capipepo';
    }else{
        spammascotaenemigo.innerHTML='Ratigueya';
    }

}

function ataquefuego(){
    ataquejugador='FUEGO';
    //alert('Escogiste atacar con: '+ ataquejugador +' Enemigo escogio: '+ aleatorioenemigo());
    crearmensaje();
} 

function ataqueagua(){
    ataquejugador='AGUA';
    //alert('Escogiste atacar con: '+ ataquejugador+' Enemigo escogio: '+ aleatorioenemigo());
    crearmensaje();
}

function ataquetierra(){
    ataquejugador='TIERRA';
    //alert('Escogiste atacar con: '+ ataquejugador+' Enemigo escogio: '+ aleatorioenemigo());
    crearmensaje();
}

function aleatorioenemigo(){
    let numaleatorioenemigo=aleatorio(1,3);

    if(numaleatorioenemigo==1){
        ataquealeatorioenemigo='FUEGO';
    }else if(numaleatorioenemigo==2){
        ataquealeatorioenemigo='AGUA';
    }else{
        ataquealeatorioenemigo='TIERRA';
    }
    return ataquealeatorioenemigo;
}

function ataque(){
    let span_vidajugador=document.getElementById('spanvidamascota')
    let span_vidaenemigo=document.getElementById('spanvidaenemigo');


    if(ataquejugador==ataquealeatorioenemigo){
        return 'Es un empate';
    }else if(ataquejugador=='AGUA' && ataquealeatorioenemigo=='FUEGO'){
        vidaenemigo--;
        span_vidaenemigo.innerHTML=vidaenemigo;
        return 'Ganaste';
        
    }else if(ataquejugador=='FUEGO' && ataquealeatorioenemigo=='TIERRA'){
        vidaenemigo--;
        span_vidaenemigo.innerHTML=vidaenemigo;
        return 'Ganaste';
        
    }else if(ataquejugador=='TIERRA' && ataquealeatorioenemigo=='AGUA'){
        vidaenemigo--;
        span_vidaenemigo.innerHTML=vidaenemigo;
        return 'Ganaste';
        
    }else{
        vidajugador--;
        span_vidajugador.innerHTML=vidajugador;
        return 'Perdiste';
    }

}   
function crearmensaje(){
    let sectionmensaje=document.getElementById('mensajes');
    let parrafo=document.createElement('p');
    parrafo.innerHTML='Escogiste atacar con: '+ ataquejugador+' Enemigo escogio: '+ aleatorioenemigo()+' - '+ataque() ;
    sectionmensaje.appendChild(parrafo);
    revisarvidas();
}
function revisarvidas(){
    if(vidaenemigo==0){
        mensajefinal("--FELICIDADES GANASTE- EL JUEGO HA TERMINADO--");
        disabledbotones();
        
    }else if(vidajugador==0){
        mensajefinal("--LO SIENTO . PERDISTE- EL JUEGO HA TERMINADO--");
        disabledbotones();
    } else {
        mensajefinal("--EL JUEGO CONTINUA--");
    }
}
function mensajefinal(resultadofinal){
    let sectionmensaje=document.getElementById('mensajes');
    let parrafo=document.createElement('p');
    parrafo.innerHTML=resultadofinal;
    sectionmensaje.appendChild(parrafo);
    
    
}
function disabledbotones(){
    let botonfuego=document.getElementById('boton-fuego');
    botonfuego.disabled=true;
    let botonagua=document.getElementById('boton-agua');
    botonagua.disabled=true;
    let botontierra=document.getElementById('boton-tierra');
    botontierra.disabled=true;
}
function reiniciarjuego(){
    location.reload();
}
    window.addEventListener('load',cargarpagina);```

location.reload() --> recarga la pagina web

disable --> atributo que desabilita elemento

También de la importancia de conocer bien la herramienta, me estaba imaginando una lógica más complicada para que no se continuara restando las cifras. como con un while y colocando un mensaje reinicia el juego algo así 🙆‍♂️

Le agrege además del boton de reiniciar uno de terminar y así quedó el código

<code> 
```function iniciarJuego() {
    let botonMascotaJugador = document.getElementById ("boton-mascota")
    botonMascotaJugador.addEventListener("click",seleccionarMascotaJugador)

    let botonFuego = document.getElementById ("boton-fuego")
    botonFuego.addEventListener("click",ataqueFuego)
    let botonAgua = document.getElementById ("boton-agua")
    botonAgua.addEventListener("click",ataqueAgua)
    let botonTierra = document.getElementById ("boton-tierra")
    botonTierra.addEventListener("click",ataqueTierra)
    let botonAire = document.getElementById ("boton-aire")
    botonAire.addEventListener("click",ataqueAire)

    let botonReiniciar = document.getElementById("boton-reiniciar")
    botonReiniciar.addEventListener("click", reiniciarJuego)

    let botonTerminar = document.getElementById("boton-terminar")
    botonTerminar.addEventListener("click", terminarJuego)

}


<code>


function reiniciarJuego(){
    location.reload()
}

function terminarJuego(){
    let terminarJuego = document.getElementById("mensaje final")
    
    let parrafo = document.createElement("p")
    parrafo.innerHTML = "¡Hasta la próxima!😊"
    terminarJuego.appendChild(parrrafo)


<code> el HTML

 

```   <section id ="Reiniciar">
                <h2><p style="color:#f0b850";>¿Quieres jugar otra vez?🎉</p></h2>
                 <button id= "boton-reiniciar">¡Empezar!</button>
                 <button id= "boton-terminar"> Quizás Mas tarde 🤐</button>
            </section> 
            <section id="mensaje final">
            </section> 

``

Yo lo colocaría en la función revisarVidas cuando ganes o pierdas, inhabilitaría los botones y enviaría un mensaje que debe reiniciar el Juego.

1:36 Yo crearía una función aparte, que cree y configure el botón de reiniciar.

En la función revisar vidas podría quedar el código para reiniciar el juego

Yo creería que se puede realizar el ejercicio después de la función revisarVidas, porque determina el final de los ataques

aggrege un nivel extra de seguiridad antes de iniciar el combate, ya que si inpeccionamos elemento al HTMl y quitamos la propiedad “disabled”, aun se puede atacar, y no queremos eso 😃 , asi que de esta manera se validamos, si no hay vidas, no se ejecute el codigo de combate , y hago un reinicio forzado del juego.

if(vidasEnemigo == 0 || vidasJugador ==0){
        alert("EL JUEGO YA FINALIZO, REINICIAR")
        reiniciarJuego()

Y yo que en las primeras clases donde empezamos a escribir el HTML, le puse una etiqueta “a”, con el atributo “href”, con el parámetro del index.html dentro del botón de reinicio. jajaja Era lo único que sabía en ése momento, no me maten jaja

woooo, esto es genial, se me ha complicado un pero, cada vez me entusiasmo más

Ahí va quedando 😉

Es bueno buscar la documentación como nos enseño el profe Juan, yo busque en google y trate de entender el problema, aunque no es fácil , pero con la práctica lo vamos a lograr!!

agregué el botón reiniciar:

 let botonReiniciar = document.getElementById('boton-reiniciar')
    botonReiniciar.addEventListener('click', reiniciar)

creé la función reiniciar:

function reiniciar(){
    let spanVidasJugador = document.getElementById('vidas-jugador')
    let spanVidasEnemigo = document.getElementById('vidas-enemigo')

    vidasJugador = 3
    vidasEnemigo = 3 
    spanVidasJugador.innerHTML = vidasJugador
    spanVidasEnemigo.innerHTML = vidasEnemigo
}

y la inicié en la función revisar vidas:

function revisarVidas(){
    if (vidasJugador == 0){
        crearMensajeFinal('Lo siento PERDISTE :(')
        reiniciar()
    }
    else if (vidasEnemigo == 0){
        crearMensajeFinal('Felicitaciones GANASTE :)')
        reiniciar()
    }
}

Seguimos con la vida al máximo

En la pausa: Yo colocaría el mensaje en la anterior función que realizamos donde aparece el mensaje final.

Es increible el codigo que utilizo el profesor Juan para desabilitar los botones una vez el juego haya terminado. Despues que haya usado el codigo para desabilitar los botones del juego.

Así lo hice yo, me tocó buscar la documentación del location.reload() pero… ¡Funciona! 😄

let ataqueJugador = ""
let ataqueRival = ""
let vidasJugador = 3
let vidasRival = 3

function iniciarJuego() {
    let botonMascotaJugador = document.getElementById("boton-seleccionar-mascota")
    botonMascotaJugador.addEventListener("click", seleccionarMascotaJugador)

    let botonFuego = document.getElementById("boton-fuego")
    botonFuego.addEventListener("click", ataqueFuego)
    let botonAgua = document.getElementById("boton-agua")
    botonAgua.addEventListener("click", ataqueAgua)
    let botonPlanta = document.getElementById("boton-planta")
    botonPlanta.addEventListener("click", ataquePlanta)

    let botonReiniciar = document.getElementById("boton-reiniciar")
    botonReiniciar.addEventListener("click", reiniciarJuego)
}

function seleccionarMascotaJugador() {
    let inputFloxi = document.getElementById("floxi")
    let inputEchalot = document.getElementById("echalot")
    let inputColemani = document.getElementById("colemani")
    let spanMascotaJugador = document.getElementById("mascota-jugador")
    
    if (inputFloxi.checked) {
        spanMascotaJugador.innerHTML = "Floxi"
    } else if (inputEchalot.checked) {
        spanMascotaJugador.innerHTML = "Echalot"
    } else if (inputColemani.checked) {
        spanMascotaJugador.innerHTML = "Colemani"
    } else {
        alert("NO SELECCIONASTE NADA")
    } seleccionarMascotaRival()
}

function seleccionarMascotaRival() {
    let spanMascotaRival = document.getElementById("mascota-rival")
    let eleccionRival = random(1,3)
    if (eleccionRival == 1) {
        spanMascotaRival.innerHTML = "Floxi"
    } else if (eleccionRival == 2) {
        spanMascotaRival.innerHTML = "Echalot"
    } else {
        spanMascotaRival.innerHTML = "Colemani"
    }
}

function ataqueFuego() {
    if (vidasJugador > 0 && vidasRival > 0) {
        ataqueJugador = "🔥"
        ataqueAleatorio()
    } else {
        crearMensajeFinDelJuego()
    }
}

function ataqueAgua() {
    if (vidasJugador > 0 && vidasRival > 0) {
        ataqueJugador = "💧"
        ataqueAleatorio()
    } else {
        crearMensajeFinDelJuego()
    }
}

function ataquePlanta() {
    if (vidasJugador > 0 && vidasRival > 0) {
        ataqueJugador = "🌱"
        ataqueAleatorio()
    } else {
        crearMensajeFinDelJuego()
    }
}

function ataqueAleatorio() {
    let ataqueRandom = random(1,3)
    if (ataqueRandom == 1) {
        ataqueRival = "🔥"
    } else if (ataqueRandom == 2) {
        ataqueRival = "💧"
    } else {
        ataqueRival = "🌱"
    } crearMensaje()

}

function crearMensaje() {
    let sectionMensajes = document.getElementById("mensajes")
    let parrafo = document.createElement("p")
    parrafo.innerHTML = "¡Tu mascota atacó con " + ataqueJugador + "! - ¡La mascota del rival atacó con " + ataqueRival + "! - " + decidirGanador()
    sectionMensajes.appendChild(parrafo)
    checkVidas()
}

function crearMensajeFinal(resultadoFinal) {
    let sectionMensajes = document.getElementById("mensajes")
    let parrafo = document.createElement("p")
    parrafo.innerHTML = resultadoFinal
    sectionMensajes.appendChild(parrafo)
}

function crearMensajeFinDelJuego() {
    let sectionMensajes = document.getElementById("mensajes")
    let parrafo = document.createElement("p")
    parrafo.innerHTML = "¡Hey! El juego terminó, si quieres jugar de nuevo debes presionar el botón de reiniciar. 😉"
    sectionMensajes.appendChild(parrafo)
}

function reiniciarJuego() {
    location.reload()
}

function decidirGanador() {
    let resultado = ""
    let spanVidaJugador = document.getElementById("vida-mascota-jugador")
    let spanVidaRival = document.getElementById("vida-mascota-rival")
    if (ataqueJugador == ataqueRival) {
        resultado = "¡EMPATE! 😐"
    } else if ((ataqueJugador == "🔥" && ataqueRival == "🌱") || (ataqueJugador == "💧" && ataqueRival == "🔥") || (ataqueJugador == "🌱" && ataqueRival == "💧")) {
        resultado = "¡GANASTE! 🥳"
        vidasRival--
        spanVidaRival.innerHTML = vidasRival
    } else {
        resultado = "¡PERDISTE! 😭"
        vidasJugador--
        spanVidaJugador.innerHTML = vidasJugador
    } return resultado
}

function checkVidas() {
    if (vidasJugador == 0) {
        crearMensajeFinal("¡Suerte para la próxima! Has perdido... 😢")
    } else if (vidasRival == 0) {
        crearMensajeFinal("¡Felicidades! ¡Has ganadooo! 😍")
    }
}

function random(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min)
}

window.addEventListener("load", iniciarJuego)

Yo escribiría el código para reiniciar el juego en la función combate.

cuando se recarga la página, y no se selecciona mascota, luego del alert, lo que hace el juego es avanzar hacia la seccion de atacar. para que ello no suceda, reutilizando la funcion Reiniciar, la coloque abajo del ultimo else dentro de la funcion seleccionarMascotaJugador. De esa forma, si no se elige una mascota, arroja la alert y se reinicia el juego
function seleccionarMascotaJugador() {
let sectionSeleccionarMascota = document.getElementById(“Seleccionar-Mascota”)
sectionSeleccionarMascota.style.display = “none”

let sectionSeleccionarAtaque = document.getElementById("Seleccionar-Ataque")
sectionSeleccionarAtaque.style.display = "block"

let inputHipodoge = document.getElementById ("hipodoge")

let inputCapipepo = document.getElementById ("capipepo")

let inputRatigueya = document.getElementById ("ratigueya")

let spanMascotaJugador = document.getElementById("mascota-jugador")

if (inputHipodoge.checked){
    spanMascotaJugador.innerHTML = "Hipodoge"

} else     if ( inputCapipepo.checked){
    spanMascotaJugador.innerHTML = "Capipepo"

} else    if( inputRatigueya.checked) {
    spanMascotaJugador.innerHTML = "Ratigueya"

} else {
    alert ("Selecciona Una Mascota")
    reiniciarJuego()

}

seleccionarMascotaEnemigo()

}

aclaro: nose de programación aún pero se me ocurrió, probé y paso jajajja

Asi lo hice 🙂

const reiniciarJuego = () => {
  window.location.reload();
}

Después de la función de revisarVidas es donde colocaría la función para reiniciar el juego.

Codificando la funcionalidad de reiniciar el juego

Recargar la pagina con location.reload()

Desabilitar botones con el atributo disabled

Desactivando botones desde javascript element.disabled = true

Se debería detallar en la función y llamarla en la otra función crearMensajeFinal

siguiente de la function crearMensajeFinal,
y asi determinar el resultado y tome la function de detener el marcador de vidas.

Hola, lo hice de esta forma, funciona pero no se si es lo mejor jejejeje

function reiniciarJuego(){
location.reload();
}

A forma de criterio constructivo, estaria bueno poder iniciar con los botones de ataque en disabled TRUE y que pasen a disabled FALSE cuando ya se elija las mascotas. Del caso contrario no estariamos obligando a el usuario a que elija la mascota y este va a poder atacar sin elegir.
A modo de sugerencia…
A menos que eso sea una tarea para nosotros 😐

para mi en la function revisar vidas

yo en vez de utilizar el location reload, reinicie todas las variables que utilize para validar que se haya acabado la partida, otra que utilize para mostrar en que turno estoy y otra para que no pueda elegir una mascota despues de haver una elegido una:

function reiniciar()
{
    contador_vida_mascota_jugador = 3;//resetea los contadores de las vidas
    contador_vida_mascota_enemigo = 3;
    turno = 1;//resetea el turno inicial
    seleccionar = 1;//variable para que no vuelva a seleccionar otro personaje salvo a reset
    fin = 0;//resetea el fin del juego para que tengas que presionar resetear
    alert("Reiniciando");
    let section_mensajes = document.getElementById("mensajes");
    section_mensajes.innerHTML = " ";
}

Esta es mi opción para el boton de reinicio. Todavia no vi el método nuevo del profe. Me falta aun, borrar los mensajes de las batallas…

function reiniciarJuego (){
let spanVidasJugador = document.getElementById(‘vidas-jugador’)
let spanVidasEnemigo = document.getElementById(‘vidas-enemigo’)
vidasJugador = 3
vidasEnemigo = 3
spanVidasEnemigo.innerHTML = vidasEnemigo
spanVidasJugador.innerHTML = vidasJugador
}

Lo que yo hice fue que en la función reservas vidas al final de cada condición inserte el location.reload() y así cada vez que pierdo o gano se reinicia automáticamente

function revisarvidas(){
    if  (VidasRival == 0){
        alert("FELICIDADES HAS GANADO!! 🎇✨🎉🎊🎆")
        crearMensajefinal("FELICIDADES HAS GANADO!! 🎇✨🎉🎊🎆")
        location.reload()
    } else if(VidasPropia == 0){
        alert("HAS PERDIDO 😥😥")
        crearMensajefinal("HAS PERDIDO 😥😥")
        location.reload()

    }
}

lo hice solo un poco diferente

function combate(){
    resultado = ''
    let spamvidasJugador = document.getElementById('vidas-jugador')
    let spamvidasEnemigo = document.getElementById('vidas-ememigo')
    if (ataqueJugador == ataqueEnemigo) {
        resultado = 'EMPATASTE'
    } else if ((ataqueJugador == 'FUEGO' && ataqueEnemigo == 'TIERRA')) {
        resultado = 'GANASTE'
        spamvidasEnemigo.innerHTML = vidasEnemigo = vidasEnemigo -1
    } else if ((ataqueJugador == 'AGUA' && ataqueEnemigo == 'FUEGO')) {
        resultado = 'GANASTE'   
        spamvidasEnemigo.innerHTML = vidasEnemigo = vidasEnemigo -1       
    } else if ((ataqueJugador == 'TIERRA' && ataqueEnemigo == 'AGUA')) {
        resultado = 'GANASTE'   
        spamvidasEnemigo.innerHTML = vidasEnemigo = vidasEnemigo -1     
    } else {
        resultado = 'PERDISTE'
        spamvidasJugador.innerHTML = vidasJugador = vidasJugador -1
    }
    
    crearMensaje()
 }

function crearMensaje() {
    let sectionMensajes = document.getElementById('mensajes')
    
    let parrafo = document.createElement('p')
    parrafo.innerHTML = 'Tu mascota atacó con ' + ataqueJugador + ', las mascota del enemigo atacó con ' + ataqueEnemigo +' '+ resultado

    sectionMensajes.appendChild(parrafo)

    revisarVidas()
}
function revisarVidas() {
    if (vidasEnemigo == 0) {
      crearMensajeFinal('FELICITACIONES!!!!! Ganaste ')
    } else if (vidasJugador == 0) {
      crearMensajeFinal('LO SIENTO MUCHO!!!! Perdiste ')
    }
  }
function crearMensajeFinal(resultadoFinal) {
    let seccion = document.getElementById('mensajes')
    let parrafo = document.createElement('p')
    parrafo.innerHTML = resultadoFinal;
    seccion.appendChild(parrafo);
    document.getElementById('boton-fuego').disabled = true
    document.getElementById('boton-agua').disabled = true
    document.getElementById('boton-tierra').disabled = true
  }

Reutilicé lo que nos enseñó para inhabilitar los botones también al elegir la mascota, justo después de seleccionar a tu mascota ya no puedes cambiarla

lo agregué en la función de seleccion de la mascota del enemigo

function seleccionarMascotaEnemigo() {
    let mascotaAleatoria = aleatorio(1,3)
    let spanMascotaEnemigo = document.getElementById('mascota-enemigo')

    if(mascotaAleatoria ==1) {
        spanMascotaEnemigo.innerHTML = 'Hipodoge'
    }
    else if(mascotaAleatoria ==2) {
        spanMascotaEnemigo.innerHTML = 'Capipepo'
    }
    else {
        spanMascotaEnemigo.innerHTML = 'Ratigueya'
    }
    let botonMascotaJugador = document.getElementById('boton-mascotas')
    botonMascotaJugador.disabled = true
}

como los botones ya fueron extraidos del document en las lineas de arriba, solo puse los nombres de los botones con su propiedad .disabled = true

<code> 
 botonMascota.disabled = true
    botonAgua.disabled = true
    botonFuego.disabled = true
    botonTierra.disabled = true
</code>

Yo lo que hice fue mover de lugar las variables de los botones a la función seleccionarMascotaEnemigo()

me demora haciendo esto por que no emcomtraba un simpl error 😵😵😵
![](https://static.platzi.com/media/user_upload/upload-52a65b33-decf-4394-a38c-eea876045e4e.png)
yo lo hice así: cree los botones deshabilitados para obligar al jugador a seleccionar el mokepon ```js function iniciarJuego(){ let botonMascotaJugador = document.getElementById('boton-mascota') botonMascotaJugador.addEventListener('click', seleccionarMascotaJugador) let botonFuego = document.getElementById('boton-fuego') botonFuego.addEventListener('click' , ataqueFuego) let botonAgua = document.getElementById('boton-agua') botonAgua.addEventListener('click' , ataqueAgua) let botonTierra = document.getElementById('boton-tierra') botonTierra.addEventListener('click' , ataqueTierra) botonFuego.disabled = true; botonAgua.disabled = true; botonTierra.disabled = true; let botonReiniciar = document.getElementById('boton-reiniciar') botonReiniciar.addEventListener('click' , reiniciarJuego) } ```Luego los habilito cuando llamamos la función de seleccionar mokepon enemigo. ```js function seleccionarMascotaEnemigo() { let mascotaAleatorio = aleatorio(1,3) let spanMascotaEnemigo = document.getElementById('mascota2') let botonFuego = document.getElementById('boton-fuego'); let botonAgua = document.getElementById('boton-agua'); let botonTierra = document.getElementById('boton-tierra'); if(mascotaAleatorio == 1){ spanMascotaEnemigo.innerHTML = 'Hipodoge' //alert('Enemigo escogio Hipodoge') }else if (mascotaAleatorio == 2){ spanMascotaEnemigo.innerHTML = 'Capipepo' //alert('Enemigo escogio Capipepo') }else { spanMascotaEnemigo.innerHTML = 'Ratigueya' //alert('Enemigo escogio Ratigueya') } botonFuego.disabled = false; botonAgua.disabled = false; botonTierra.disabled = false; } ```y luego los deshabilito en la funcion que cree para validar la vida de los jugadores. ```js function revisarVidas (userLive, enemyLive) { if (userLive === 0 || enemyLive === 0) { let botonFuego = document.getElementById('boton-fuego'); let botonAgua = document.getElementById('boton-agua'); let botonTierra = document.getElementById('boton-tierra'); botonFuego.disabled = true; botonAgua.disabled = true; botonTierra.disabled = true; let mensaje = userLive === 0 ? 'ENEMIGO GANA' : 'GANASTE'; crearMensajeFinal(mensaje); } } ```function revisarVidas (userLive, enemyLive) {    if (userLive === 0 || enemyLive === 0) {        let botonFuego = document.getElementById('boton-fuego');        let botonAgua = document.getElementById('boton-agua');        let botonTierra = document.getElementById('boton-tierra');         botonFuego.disabled = true;        botonAgua.disabled = true;        botonTierra.disabled = true;         let mensaje = userLive === 0 ? 'ENEMIGO GANA' : 'GANASTE';        crearMensajeFinal(mensaje);            }}
yo solo pensé en llamarle a la funcion reiniciarJuego() ![](https://static.platzi.com/media/user_upload/image-85e9b8a9-7155-41ee-94d7-fdbcfc6651fd.jpg)
El javascript no me carga en la web. Le pincho a los botones y no aparece nada
hola tengo un muy serio problema y eque cuando se cumple la function de ganaste me quita una vida incluso en empate y el codigo es casi el mismo que el de la clase y lo otro, cuando selecciono mascota el enemigo nisiquiera selecciona y aun asi el enemigo puede lanzar ataques y otra cosa el compañero luis carlos creo una fonction para que el boton de reiniciar solo aparesca cuando se termine el combate lo use y tras cada ataque me creeaba un boton ;-;. este problema ya me esta ganando y me esta frustrando y me siento un inutil para estp porque siempre me pasa un problema que no puedo solucionar y estoy haciendo al pie de la letra el codigo que el profe utilisa en clase ayuda de verdad ya no puedo mas con el estres. ```js function combate(){ let spanVidasJugador = document.getElementById("vidas-jugador") let spanVidasEnemigo = document.getElementById("vidas-enemigo") if(ataqueEnemigo == ataqueJugador) {crearmensaje("empate") } else if ((ataqueJugador == "FUEGO" && ataqueEnemigo == "TIERRA") || (ataqueJugador == "AGUA" && ataqueEnemigo == "FUEGO") || (ataqueJugador == "TIERRA" && ataqueEnemigo == "AGUA")){ crearmensaje("ganaste") VidasEnemigo-- spanVidasEnemigo.innerHTML = VidasEnemigo }else {crearmensaje("perdiste")} VidasJugador-- spanVidasJugador.innerHTML = VidasJugador revisarVidas() ```function combate(){        let spanVidasJugador = document.getElementById("vidas-jugador")        let spanVidasEnemigo = document.getElementById("vidas-enemigo")         if(ataqueEnemigo == ataqueJugador)            {crearmensaje("empate")         } else if ((ataqueJugador == "FUEGO" && ataqueEnemigo == "TIERRA") || (ataqueJugador == "AGUA"  && ataqueEnemigo == "FUEGO")             || (ataqueJugador == "TIERRA" && ataqueEnemigo == "AGUA")){             crearmensaje("ganaste")             VidasEnemigo--             spanVidasEnemigo.innerHTML = VidasEnemigo         }else {crearmensaje("perdiste")}            VidasJugador--            spanVidasJugador.innerHTML = VidasJugador                        revisarVidas()
La diferencia entre `display: none` y `display: block` radica en cómo afectan la visibilidad y el flujo del documento HTML. - `display: none`: El elemento no se muestra en la página y no ocupa espacio. Se elimina completamente del flujo del documento. - `display: block`: El elemento se muestra como un bloque, ocupando el ancho total disponible y comenzando en una nueva línea. Usar `display: none` es útil para ocultar elementos sin destruir su existencia en el DOM, mientras que `display: block` lo hace visible y lo presenta como un bloque en la interfaz.
Mi variante del juego ![](https://i.imgur.com/U4uuZyw.png)
❗❗❗❗ Yo realicé esta forma creando un array con los botones de ataque para no tener que capturarlos uno por uno y añadiendoles el atributo "disables" con un ciclo FOR ¿Sabes cómo? mira estas interactivas láminas: ![](https://static.platzi.com/media/user_upload/BloquearBotones1-a22e17fd-4b63-4831-a481-861f162758d0.jpg) ![](https://static.platzi.com/media/user_upload/BloquearBotones2-417eed51-0524-454d-94e3-be812c54ddd2.jpg) ![](https://static.platzi.com/media/user_upload/BloquearBotones3-41c7322c-640b-4984-a200-f8b08cc8bb32.jpg) ![](https://static.platzi.com/media/user_upload/BloquearBotones4-1a9188d3-b648-40f1-8f0a-a231c992092a.jpg) ![](https://static.platzi.com/media/user_upload/BloquearBotones5-e98e0001-f87e-4ae5-8baa-22d787c6a519.jpg) ![](https://static.platzi.com/media/user_upload/BloquearBotones6-387d7809-74d5-4242-b979-ac9dd6c65fa9.jpg) ![](https://static.platzi.com/media/user_upload/BloquearBotones7-61006473-6d89-4356-ab94-41d17c2f9ca0.jpg) ![](https://static.platzi.com/media/user_upload/BloquearBotones8-b762898c-b555-4db2-a804-fda50fa39554.jpg) Ya que llegaste hasta aquí, te dejo el enlace a mi repo: <https://github.com/raulsr92/Proyecto-mokepon-platzi>
💻Esto es lo que había hecho para reiniciar el juego: ![](https://static.platzi.com/media/user_upload/Reiniciar-1-04a02a3c-f959-49d0-9103-bd4e4ed899b4.jpg) ![](https://static.platzi.com/media/user_upload/Reiniciar-2-4aa22a81-965b-4797-a69c-b37d88b44607.jpg) ![](https://static.platzi.com/media/user_upload/Reiniciar-3-46f4f47e-8031-4853-a9bf-fa44a076d22e.jpg) ![](https://static.platzi.com/media/user_upload/Reiniciar-4-dd1d6a85-63a0-468a-b3ce-48b117a79ac5.jpg) ![](https://static.platzi.com/media/user_upload/Reiniciar-5-2e8c7ade-d5d5-4f0d-9f1c-dce7b2e79e9a.jpg) En mi caso no deshabilité los botones de ataque porque añadí condicionales que al presionarlos luego de que haya un ganador, mandará mensajes de alerta: ![](https://static.platzi.com/media/user_upload/Alert-impedirJuegoConCEROVidas-46515a77-fd37-4d7d-8cf6-0255ee1378ef.jpg) ![](https://static.platzi.com/media/user_upload/Alert-impedirJuegoConCEROVidas-enemigo-18d81342-93a7-4e6b-8c8d-013bbe652d5c.jpg) ![](https://static.platzi.com/media/user_upload/Alert-impedirJuegoConCEROVidas-enemigo-demo-93477129-a349-4f27-85e5-533b6ab5dabc.jpg)
📌En mi caso, para impedir que s epueda continuar el juego una vez que ya hat ganador, establecí un condicional en cada ataque, tanto para el JUGADOR: ![](https://static.platzi.com/media/user_upload/Alert-impedirJuegoConCEROVidas-0bde6a5e-d33f-4aa0-bbf7-05b70091491a.jpg) como para el ENEMIGO:![](https://static.platzi.com/media/user_upload/Alert-impedirJuegoConCEROVidas-enemigo-68f957f6-a07a-4090-a9f3-956f5c50e940.jpg)
📌En mi caso, para impedir que s epueda continuar el juego una vez que ya hat ganador, establecí un condicional en cada ataque, tanto para el JUGADOR: ![](https://static.platzi.com/media/user_upload/Alert-impedirJuegoConCEROVidas-3582ff3f-e583-4ab8-8d5f-39a9e4c95dff.jpg) como para el ENEMIGO: ![](https://static.platzi.com/media/user_upload/Alert-impedirJuegoConCEROVidas-06d2af9d-b588-48fa-8982-a949d5d729a1.jpg)
en el principio del código agregué el siguiente alerta; alert ("hola esto es MOKEPON, prepárate.:") esto en la sexta columna con la finalidad de generar expectativa al comenzar a jugar 😆
¡Increíble! ```js let playerAttack let enemyAttack let playerLives = 3 let enemyLives = 3 function startGame(){ let buttonWarriorPlayer = document.getElementById('button-warrior') buttonWarriorPlayer.addEventListener('click', chooseWarriorPlayer) let shieldButton = document.getElementById('shield-button') shieldButton.addEventListener('click', shieldAttack) let fireButton = document.getElementById('fire-button') fireButton.addEventListener('click', fireAttack) let boomerangButton = document.getElementById('boomerang-button') boomerangButton.addEventListener('click', boomerangAttack) let restartButton = document.getElementById('restart-button') restartButton.addEventListener('click', restartGame) } function chooseWarriorPlayer(){ let inputWilliam = document.getElementById('william') let inputEdward = document.getElementById('edward') let inputRichard = document.getElementById('richard') let inputSirTom = document.getElementById('sirTom') let inputCidHenry = document.getElementById('cidHenry') let inputWallace = document.getElementById('wallace') let spanWarriorPlayer = document.getElementById('player-warrior') if (inputWilliam.checked) { spanWarriorPlayer.innerHTML = 'William' } else if (inputEdward.checked) { spanWarriorPlayer.innerHTML = 'Edward' } else if (inputRichard.checked) { spanWarriorPlayer.innerHTML = 'Richard' } else if (inputSirTom.checked) { spanWarriorPlayer.innerHTML = 'Sir Tom' } else if (inputCidHenry.checked) { spanWarriorPlayer.innerHTML = 'Cid Henry' } else if (inputWallace.checked) { spanWarriorPlayer.innerHTML = 'Wallace' } else { alert("Choose a warrior") } chooseWarriorEnemy() } function chooseWarriorEnemy(){ let randomWarriorEnemy = randomNumber(1,6) let spanWarriorEnemy = document.getElementById('enemy-warrior') if (randomWarriorEnemy == 1) { spanWarriorEnemy.innerHTML = 'William' } else if (randomWarriorEnemy == 2) { spanWarriorEnemy.innerHTML = 'Edward' } else if (randomWarriorEnemy == 3) { spanWarriorEnemy.innerHTML = 'Richard' } else if (randomWarriorEnemy == 4) { spanWarriorEnemy.innerHTML = 'Sir Tom' } else if (randomWarriorEnemy == 5) { spanWarriorEnemy.innerHTML = 'Cid Henry' } else { spanWarriorEnemy.innerHTML = 'Wallace' } } function shieldAttack(){ playerAttack = 'Shield' chooseAttackEnemy() // Correct function call // alert('Player attack: ' + playerAttack + ' | Enemy attack: ' + enemyAttack) } function fireAttack(){ playerAttack = 'Fire' chooseAttackEnemy() // Correct function call } function boomerangAttack(){ playerAttack = 'Boomerang' chooseAttackEnemy() // Correct function call } function chooseAttackEnemy(){ let randomAttack = randomNumber(1,3) let spanAttackEnemy = document.getElementById('enemy-attack') // Assume this span exists for enemy's attack display if (randomAttack == 1) { enemyAttack = 'Shield' } else if (randomAttack == 2) { enemyAttack = 'Fire' } else { enemyAttack = 'Boomerang' } combat() } function combat() { let spanPlayerlives = document.getElementById('player-lives') let spanEnemylives = document.getElementById('enemy-lives') if(enemyAttack == playerAttack) { createMessage("It's a TIE") } else if ((playerAttack == 'Shield' && enemyAttack == 'Fire') || (playerAttack == 'Fire' && enemyAttack == 'Boomerang') || (playerAttack == 'Boomerang' && enemyAttack == 'Shield')) { createMessage("You win") enemyLives-- spanEnemylives.innerHTML = enemyLives } else { createMessage("You lose") playerLives-- spanPlayerlives.innerHTML = playerLives } checkLives() } function checkLives (){ if (playerLives == 0) { alert("You lose!") createFinalMessage ("You lose!") } else if (enemyLives == 0) { alert("¡Congratulations, you win!") createFinalMessage ("¡Congratulations, you win!") } } function createMessage(result) { let messageSection = document.getElementById('message') let textArea = document.createElement('p') textArea.innerHTML = 'You attacked with ' + playerAttack + ', and the Enemy with ' + enemyAttack + '- ' + result messageSection.appendChild(textArea) } function createFinalMessage(finalResult) { let messageSection = document.getElementById('message') let textArea = document.createElement('p') textArea.innerHTML = finalResult messageSection.appendChild(textArea) let buttonWarriorPlayer = document.getElementById('button-warrior') buttonWarriorPlayer.disabled = true let shieldButton = document.getElementById('shield-button') shieldButton.disabled = true let fireButton = document.getElementById('fire-button') fireButton.disabled = true let boomerangButton = document.getElementById('boomerang-button') boomerangButton.disabled = true } function restartGame () { location.reload() } function randomNumber (min, max) { return Math.floor(Math.random() * (max - min + 1) + min) } window.addEventListener('load', startGame) ```let playerAttacklet enemyAttacklet playerLives = 3let enemyLives = 3 function startGame(){ let buttonWarriorPlayer = document.getElementById('button-warrior') buttonWarriorPlayer.addEventListener('click', chooseWarriorPlayer) let shieldButton = document.getElementById('shield-button') shieldButton.addEventListener('click', shieldAttack) let fireButton = document.getElementById('fire-button') fireButton.addEventListener('click', fireAttack) let boomerangButton = document.getElementById('boomerang-button') boomerangButton.addEventListener('click', boomerangAttack) let restartButton = document.getElementById('restart-button') restartButton.addEventListener('click', restartGame) } function chooseWarriorPlayer(){ let inputWilliam = document.getElementById('william') let inputEdward = document.getElementById('edward') let inputRichard = document.getElementById('richard') let inputSirTom = document.getElementById('sirTom') let inputCidHenry = document.getElementById('cidHenry') let inputWallace = document.getElementById('wallace') let spanWarriorPlayer = document.getElementById('player-warrior') if (inputWilliam.checked) { spanWarriorPlayer.innerHTML = 'William' } else if (inputEdward.checked) { spanWarriorPlayer.innerHTML = 'Edward' } else if (inputRichard.checked) { spanWarriorPlayer.innerHTML = 'Richard' } else if (inputSirTom.checked) { spanWarriorPlayer.innerHTML = 'Sir Tom' } else if (inputCidHenry.checked) { spanWarriorPlayer.innerHTML = 'Cid Henry' } else if (inputWallace.checked) { spanWarriorPlayer.innerHTML = 'Wallace' } else { alert("Choose a warrior") } chooseWarriorEnemy()} function chooseWarriorEnemy(){ let randomWarriorEnemy = randomNumber(1,6) let spanWarriorEnemy = document.getElementById('enemy-warrior') if (randomWarriorEnemy == 1) { spanWarriorEnemy.innerHTML = 'William' } else if (randomWarriorEnemy == 2) { spanWarriorEnemy.innerHTML = 'Edward' } else if (randomWarriorEnemy == 3) { spanWarriorEnemy.innerHTML = 'Richard' } else if (randomWarriorEnemy == 4) { spanWarriorEnemy.innerHTML = 'Sir Tom' } else if (randomWarriorEnemy == 5) { spanWarriorEnemy.innerHTML = 'Cid Henry' } else { spanWarriorEnemy.innerHTML = 'Wallace' }} function shieldAttack(){ playerAttack = 'Shield' chooseAttackEnemy() // Correct function call // alert('Player attack: ' + playerAttack + ' | Enemy attack: ' + enemyAttack)} function fireAttack(){ playerAttack = 'Fire' chooseAttackEnemy() // Correct function call} function boomerangAttack(){ playerAttack = 'Boomerang' chooseAttackEnemy() // Correct function call} function chooseAttackEnemy(){ let randomAttack = randomNumber(1,3) let spanAttackEnemy = document.getElementById('enemy-attack') // Assume this span exists for enemy's attack display if (randomAttack == 1) { enemyAttack = 'Shield' } else if (randomAttack == 2) { enemyAttack = 'Fire' } else { enemyAttack = 'Boomerang' } combat() } function combat() { let spanPlayerlives = document.getElementById('player-lives') let spanEnemylives = document.getElementById('enemy-lives') if(enemyAttack == playerAttack) { createMessage("It's a TIE") } else if ((playerAttack == 'Shield' && enemyAttack == 'Fire') || (playerAttack == 'Fire' && enemyAttack == 'Boomerang') || (playerAttack == 'Boomerang' && enemyAttack == 'Shield')) { createMessage("You win") enemyLives-- spanEnemylives.innerHTML = enemyLives } else { createMessage("You lose") playerLives-- spanPlayerlives.innerHTML = playerLives } checkLives() } function checkLives (){ if (playerLives == 0) { alert("You lose!") createFinalMessage ("You lose!") } else if (enemyLives == 0) { alert("¡Congratulations, you win!") createFinalMessage ("¡Congratulations, you win!") } } function createMessage(result) { let messageSection = document.getElementById('message') let textArea = document.createElement('p') textArea.innerHTML = 'You attacked with ' + playerAttack + ', and the Enemy with ' + enemyAttack + '- ' + result messageSection.appendChild(textArea)} function createFinalMessage(finalResult) { let messageSection = document.getElementById('message') let textArea = document.createElement('p') textArea.innerHTML = finalResult messageSection.appendChild(textArea) let buttonWarriorPlayer = document.getElementById('button-warrior') buttonWarriorPlayer.disabled = true let shieldButton = document.getElementById('shield-button') shieldButton.disabled = true let fireButton = document.getElementById('fire-button') fireButton.disabled = true let boomerangButton = document.getElementById('boomerang-button') boomerangButton.disabled = true} function restartGame () { location.reload()} function randomNumber (min, max) { return Math.floor(Math.random() \* (max - min + 1) + min)} window.addEventListener('load', startGame)
jajaja aquí se solucionaba el problemas de los botones... ya que :D
![](https://static.platzi.com/media/user_upload/imagen-f748bd78-094d-46ac-8f26-8a49ec221ea2.jpg)
creo que la opción que hace falta en el juego es que primero se debe seleccionar la mascota para poder atacar, porque esta permitiendo atacar sin elegir primero a la mascota
seria mejor empezar de nuevo
Hola, muy interesante lo que hemos hecho hasta ahora, estoy muy contenta, especialmente porque he entendido muy bien. Me pregunto si en la próxima clase se de la opción de tomar otra mascota y seguir con ella... así va mi trabajo:![](https://static.platzi.com/media/user_upload/image-65d78579-1558-40b3-a26f-6cbead776847.jpg) En el parrafo le ajusté el código para qué muestre el nombre de la mascota seleccionada en el parrafo.
La función de reiniciar el juego equivale a ejecutar un ciclo for en un lenguaje de programación
¡Funcionó! =D
*function* revisarVidas() { *let* spanVidaEnemigo = document.getElementById("vidaenemigo"); *let* spanvidaMascota = document.getElementById("vidamascota"); if (vidamascota == 0) { alert("Perdiste, vidas reiniciadas"); location.reload(); } else if (vidaenemigo == 0) { alert("Ganaste, vidas reiniciadas"); location.reload(); }} Esto es lo que se me ocurrio a mi, una funcion que revise las vidas reinicie.
alguien sabe como puedo hacer el disabled pero con los botones de las mascotas?? Quiero que luego de haber seleccionado la mascota, no se pueda elegir otra mascota. 😐