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 215

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

vamos a reiniciar el juego
Esto lo vamos a realizar cuando una de las mascotas llegue a cero.
Esto lo haremos desabilitando los botones cuando se llegue a cero vidas y mostrar un boton de reiniciar
Podemos usar el método location.reload(); para que cuando se presione el botón de reiniciar, se reinicie todo el juego

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

Ahora vamos a desabilitar los botones

Esto lo haremos con el atributo disabled como lejemplo podríamos tener un botón desabilitado de esta forma

<button id = "boton-fuego" disabled>Fuego 🔥</button>

Pero como lo que queremos hacer es cambiar las propiedades de un botón, haremos lo siguiente

function crearMensajeFinal(resultadoFinal){
    let sectionMensaje = document.getElementById("mensajes");

    let parrafo = document.createElement("p");
    parrafo.innerHTML = resultadoFinal;

    sectionMensaje.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;
}

Como podemos ver, esto va incluido en la función de mensaje final dado que se desabilitará cuando alguna de las vidas llegue a cero

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()🔄

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

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

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;
}
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
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()

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. 😐
Les presento mi excelente y triste de manera de ver que si funcionó el código jajaja :( ![](https://static.platzi.com/media/user_upload/image-dfb1aa2a-8f26-4e28-88c6-29a620c3a179.jpg)
No tiene sentido pedir por una mascota, el juego se centra en el poder. Me tomo como reto, cambiar la logica del juego dejando solamente la mascota asociandola a un poder.
function revisarVidas(){            if(vidasEnemigo == 0){                             //   location.reload()             let botonFuego = document.getElementById("boton-fuego")             botonFuego.addEventListener("click", ataqueFuego)             botonFuego.disabled= true              let botonAgua = document.getElementById("boton-agua")             botonAgua.addEventListener("click", ataqueAgua)             botonAgua.disabled= true              let botonTierra = document.getElementById("boton-tierra")             botonTierra.disabled= true              alert("JUGADOR GANA ")                }else if(vidasJugador == 0){                                let botonFuego = document.getElementById("boton-fuego")                botonFuego.addEventListener("click", ataqueFuego)                botonFuego.disabled= true                 let botonAgua = document.getElementById("boton-agua")                botonAgua.addEventListener("click", ataqueAgua)                botonAgua.disabled= true                 let botonTierra = document.getElementById("boton-tierra")                botonTierra.disabled= true                //location.reload()// con esta funcion podemos recargar la pagina automaticamente                alert("ENEMIGO GANA")               }                   }         function reiniciarJuego(){            location.reload()        }
![](https://static.platzi.com/media/user_upload/Captura%20de%20pantalla%202024-04-14%20185941-1708a710-acd3-4b90-bea3-d34caef66417.jpg)
XD el mensaje que puse pa cuanod pierden fue : perdiste ji ji ji ja tu abuela juega mejor que ti eso manco XD esta el menssaje no
Buenas, lo que habia hecho es que salga un Alert si alguno de los jugadores se quedo sin vida al querer hacer un ataque. Pero me encantó haber aprendido sobre "disabled". ```js function attackSelection(selection) { if (livesPlayer > 0 && livesEnemy > 0) { attackPlayer = selection.currentTarget.myParam selectAttackEnemy() battle(attackPlayer, attackEnemy) } else { alert('The game is over.\nPlease press the RESET button to play again.') } } ```
profe en la clase # 25; (Imprimiendo ataques del enemigo) al darle clic a cualquier botón el mensaje del navegador siempre me sale Tu mascota ataco con Fuego , la mascota del enemigo ataco con undefined - PERDISTES Tu mascota ataco con Agua , la mascota del enemigo ataco con undefined - PERDISTES Tu mascota ataco con Tierra , la mascota del enemigo ataco con undefined - PERDISTES Tu mascota ataco con Tierra , la mascota del enemigo ataco con undefined - PERDISTES
creo que en las funciones de los botones
:)
hola solo uses así fuction cuentaVidas if vidaenemigo==0 alerta has ganado location.reload if vidajugador==0 alerta has perdido location.reload así cuando gano o pierda al darle aceptar al "alert" me reinicia el juego y elimino el botón de reinicio
objet
yap
lindo
hola tengo un error en el código de javascript ¿Cómo lo puedo corregir? ![](https://static.platzi.com/media/user_upload/image-51255185-c818-408a-8563-28ec743a5d0f.jpg)![](https://static.platzi.com/media/user_upload/image-cd7a31ec-940e-4ce9-853f-48769f66f441.jpg)
La frase "Pausa la clase" me da nervios...
```txt ´ ``` `````js function CrearMensajeFinal(resultadofinal){ alert(resultadofinal) reiniciar_juego } ````function CrearMensajeFinal(resultadofial){` `alert(resultadofinal)` `reiniciar_juego` `}` `````
yo lo colocaría antes de revisar vidas
Cuando utilizo la herramienta location.reload(), el radio sigue seleccionado. La única forma que he encontrado para que no se seleccione nada después de recargar la pagina es abriéndola en una nueva ventana. ![](https://static.platzi.com/media/user_upload/image-f1513f5b-6f02-460b-a8f6-52835e5ede83.jpg)
Considero que debe ir en la función revisar vidas o combate.
al momento que proponen resolverlo por nuestros propios medios, yo que estoy iniciando de 0 intento usar if o whiles... y cuando no me sale le doy continuar a la clase y terminan usando nuevas cosas que ni sabia que exista para resolver :')
yo estaba probando el juego y me di cuenta de que si no escojo un mokepon y le doy al boton seleccionar, yo me quedaba sin escoger pero el pc si escogía. así que puse un if antes para validar que el humano selecciono algún pokemon, si selecciono uno y le da al boton seleccionar, entonces juega, si solo le dio al boton seleccionar, entonces ahí si la alerta y ya no escoge solo la maquina.![](file:///C:/Users/juanj/Desktop/sw.jpg) ![]() ```js if(inputHipodoge.checked || inputCapipepo.checked || inputRatigueya.checked ){ if (inputHipodoge.checked == true) { spanMascotaJugador.innerHTML = 'Hipodogue' } else if (inputCapipepo.checked == true) { spanMascotaJugador.innerHTML = 'Capipepo' } else if (inputRatigueya.checked == true) { spanMascotaJugador.innerHTML = 'Ratigueya' } seleccionMascotapc() } else { alert("Selecciona un MOKEPON ") } ```    if(inputHipodoge.checked || inputCapipepo.checked || inputRatigueya.checked ){                if (inputHipodoge.checked == true) {            spanMascotaJugador.innerHTML = 'Hipodogue'        } else if (inputCapipepo.checked == true) {            spanMascotaJugador.innerHTML = 'Capipepo'        } else if (inputRatigueya.checked == true) {            spanMascotaJugador.innerHTML = 'Ratigueya'           }        seleccionMascotapc()     } else {        alert("Selecciona un MOKEPON ")           }
![](https://static.platzi.com/media/user_upload/image-91500b7d-68c5-4347-9e02-9ab8fb93e331.jpg) Lo que hice para evitar que el Jugador continué manteniendo activos los ataques fue deshabilitar todos los botones de ataque de esta manera solamente mantiene el resultado final y su única opción sea reiniciar el juego.