Tienes lista la lógica para preparar al mokepon del jugador y el mokepon del enemigo para el combate. Aun resta finalizar la lógica del propio combate para lograr determinar al ganador a partir de la cantidad de ataques ganados.
Cambiando la lógica del combate
Comienza declarando dos variables que utilizaremos para mostrar en el HTML el tipo de ataque del jugador y del enemigo (fuego, agua, tierra).
let indexAtaqueJugador;let indexAtaqueEnemigo;
Luego de que la lógica de los ataques del jugador y del enemigo esté lista, ejecuta una nueva función iniciarPelea() que determinará si el combate está listo para iniciar o no.
Implementaremos una nueva lógica para el combate donde es necesario que el jugador haya seleccionado el orden de sus cinco ataques para iniciar el combate. Para determinar esta lógica, utilizaremos el length del arreglo que guarda los ataques del jugador. Recuerda que, por cada ataque del jugador, se selecciona un ataque enemigo de forma aleatoria.
Declara otra nueva función llamada indexAmbosOponente() que usaremos para renderizar en el HTML el orden de los ataques del mokepon del jugador y del enemigo.
Si la lógica para iniciar el combate se cumple, el mismo inicia y se realiza el cálculo para evaluar quién es el ganador de cada ataque del combate o si hay empate.
functioncombate(){for(let index =0; index < ataqueJugador.length; index++){if(ataqueJugador[index]=== ataqueEnemigo[index]){indexAmbosOponente(index, index);crearMensaje("EMPATE");}// RETO: Determinar lógica del combate por cada ataque}revisarVidas();}
Queda pendiente un reto para ti. Cada ataque del jugador puede ganar, empatar o perder. Implementa esta lógica en la función combate() y realiza el cálculo para determinar al ganador de la pelea al mejor de 5 ataques.
Haz un esfuerzo por resolver este reto. En la siguiente clase, encontrarás la solución al mismo.
Al igual que muchas otras personas en las anteriores clases y comentarios, pienso que el grado de dificultad va avanzando pero seguimos el ritmo y repetimos algunas clases para analizar.
Hay algo que me deja pensando y es por que nunca establecieron un diagrama de flujo para el juego. Es fundamental para saber en que parte del procedimiento estas y como vas a trabajar.
Durante el transcurso del curso los profesores fueron cambiando el mismo funcionamiento del juego y no me parece mal pero hay personas que se están involucrando con términos y algoritmos de la programación y es posible que no tengan acceso a otros cursos para aclarar dudas.
Solo quiero dar mi aporte para que lo tengan en cuenta, lo he leído a lo largo del curso y me dejo pensando. Yo sin embargo seguiré con la escuela de desarrollo para aclarar y seguir aprendiendo.
Saludos.
Hola Santiago, tienes razon mas sin embargo pienso que esta bien, ya que te vas preparando a la realidad, es decir inicias un proyecto el cual pensabas que iba a ser de X forma, lo lograste, pero se decidio ir mejorando o optimizando y paso a revision de diferentes personas los cuales fueron mejorandolo o perfeccionando, y llego a un punto a que se volvio complejo, y opino que se deberia agradecer porque si esperamos a que todo sera facil no es asi, uno aprende mas de esta manera, tratando de entender cosas complejas iniciando de lo mas basico, en el futuro lo agradeceras
Tenés toda la razón, aparte que para hacerlo mas visual, al momento de explicar y entender a qué queremos llegar.
Asi va mi Mokepon
esta brutal te felicito
felicitacions! cuando sea grande quiero ser como tu!
Me cuesta mucho concentrarme en aprender cuando el que me está enseñando no lee lo que está escribiendo y sigue como si nada, ya van varias veces y desconozco el motivo pero es muy frustrante.
Trato de concentrarme en el concepto y pierdo el escaso hilo, por tanto error de escritura 😑
La dificultad con este profe es más grande pero al parecer es porque maneja un nivel más alto. Toca repetir el video las veces que sea necesario, así he hecho yo y he aprendido jaja
Gente que ha llegado a este punto del curso, no desfallezcan, yo me he demorado unos días en repasar mi código, compararlo con el del profesor, pero lo que más me ha ayudado ha comprender y poder seguir el nivel es usar la consola en el navegador, imprimiendo las variables los arreglos eso me ha ayudado un montón, no desesperen solo continúen que se puede.
Muchas gracias por tus palabras, la verdad que he estado unos 10 días desconectado el curso estudiando otro curso de Platzi sobre LinkedIn pero ahora he vuelto a estudiar programación básica y seguir repasando unas clases atrás y ahora estoy aquí... estoy hasta los mokepones de código pero poco a poco voy entendiendo cosas y espero poder continuar. Un punto importante es estar "verdaderamente" descansado, con la casa limpia y duchado para decir OK a estudiar programación enfocado con la técnica POMODORO a mi me funciona.
No me gusta como va el juego, eso de generar 5 ataques y validarlos en una vez, es aburrido. Y también en el fondo sigue siendo un piedra, papel o tijera porque los ataques son 3: fuego, agua y tierra.
También me parece más divertido el sistema de vidas.
opino lo mismo que tu, pero recuerda que apenas estamos aprendiendo, cuando ya estemos mas avanzados y sepamos como modificar el codigo a nuestro gusto podremos cambiar el sistema del juego como se nos de la gana
También estoy de acuerdo, en el fondo es un piedra, papel y tijera. En mi caso, yo seguí con piedra,papel,tijera desde las primeras clases. No cambie a mokepones. Y llegó un punto donde es aburrido, porque en la práctica el juego es simple al ser contra una computadora, por lo que ahora empecé a generar una batalla contra un amigo, que es la forma que me pareció un poco divertida
Lo que hice para las validaciones fue coger las condiciones ya establecidas y agregarles el índice.
A las cuales le s agregué un contador para que el juego funcione con victorias.
amigo una inquietud, como agregaste la imagen de tu codigo en este comentario, yo he tratado de hacerlo pero no me lo permite
para agregar imágenes a los cometarios, solo guarda la imagen en una capeta, y arrastras la imagen al lugar donde se comenta.
Creo que hay un pequeño error cuando se escribe la función indexAmbosOponentes, según mi lógica, debería ser:
De lo contrario, el resultado de los mensajes será el mismo.
¡Espero sea útil, saludos! :)
Yo también lo arreglé en el momento, ya sabemos que a este punto, más adelante lo va a modificar 😁👍
No entendi, exactamente que cambiaste, pero igual les agregare el ";"
Me rindo, sinceramente este bloque del curso no es claro. Es muy difícil seguirlo y no se trata de frustración se trata de falta de claridad. El profesor en otros cursos es muy claro pero la dinámica de cambiar todo cada clase sin que tengamos claras muchas cosas no ayuda mucho al aprendizaje.
Creo que deberíamos tener un grupo de entre los que estamos estudiando el curso de programación y Javascript y ayudarnos entre nosotros porque aunque la gente se ayuda por acá los comentarios se pierden fáciles, creo que hay un grupo de Telegram para javascript yo estoy en uno de backend debería haber un grupo para los que son nuevos en el tema de la programación
Leonardo, pon el link de los grupos.
¿Qué se hace en esta clase?
Se comparan las secuencias de ataques (los arreglos) del jugador y el enemigo
¿Cómo se hace?
Se hace la comparación (el combate) únicamente una vez se han seleccionado los ataques
if (ataqueJugador.length === 5) { combate() }
En la función del combate se crea un ciclo para que reccorra ambas secuencias
for (let index = 0; index < ataqueJugador.length; index++) { }
Dentro del ciclo se hace una validación para determinar si el jugador GANÓ, PERDIÓ o EMPATO
Gente entiendo su frustación por el nivel de las clases pero me parece que deberían dejarla de lado y prestar atención a lo que la clase quiere que hagamos que es abrir la mente al análisis de programación. Es obvio que no están esperando que programemos el lanzamiento de un cohete o un GOTY en 3 días. Es una demostración de lo que podemos llegar a hacer, que nos impulse a seguir aprendiendo, a investigar por nuestra cuenta y adentrarnos en el tema. Es difícil manejar la frustacion pero peor es no aprender algo que te gusta porque la frustacion te controla.
Yo opte por mantenerme en la mecanica anterior:
siento que si se evalua un encuentro a la vez, se me hace mas "tradicional" jajaja
Este curso va bien, he aprendido mucho y solidado conocimientos que ya tenia, pero no estaria mal darle un repaso a cada clase cuando termine el curso
totalmente
de pana
Hola! Yo cambie un poco la logica para que cada vez que se le de click a un ataque el enemigo elija uno al azar y se comparen uno a uno y se vayan contando las victorias y las derrotas. de esa manera no habria que esperar a elegir los cinco ataques:
en la funcion combate le agregue un contador con los indices para no tener que hacer un ciclo y se compraren cada uno de los los ataques dependiendo de su indice y ademas agregue dos contadores mas para verificar las victorias y las derrotas:
functioncombate(){if(attackCounter[combatCounter]== enemyAttackCounter[combatCounter]){ result ="Empate";}elseif(attackCounter[combatCounter]=="Fire"&& enemyAttackCounter[combatCounter]=="Earth"){ result ="Ganaste 🎉"; victoryCounter++;}elseif(attackCounter[combatCounter]=="Water"&& enemyAttackCounter[combatCounter]=="Fire"){ result ="Ganaste 🎉"; victoryCounter++;}elseif(attackCounter[combatCounter]=="Earth"&& enemyAttackCounter[combatCounter]=="Water"){ result ="Ganaste 🎉"; victoryCounter++;}else{ result ="Perdiste 😢"; lossCounter++;}createMessage();endGame(); enemysLife.innerHTML= lossCounter; playersLife.innerHTML= victoryCounter; combatCounter++}
En el minuto 13:12 el profesor se equivoco y puso ataqueEnemigo tanto al jugador como al enemigo, asi que si cuando les salgan los mensajes en pantallas son los mismos ya saben por que es 😄
Jajajaja no lo note pero de primera yo si lo puse bien
Saludos, recomiendo a todos mis compañeros de curso que hagan un esfuerzo en mejorar su ortografía, recuerden que un programador, además de saber programar, debe saber escribir. No podemos desarrollar una web que contengan palabras mal escritas o verbos mal conjugados.
Yo llevo varios cursos en Platzi y sigo con el entusiasmo, pero alguien que apenas conoce estos conceptos (el curso es básico) la frustración lo debe llevar a renunciar. Entiendo también que pueda ser una clase de manejo de la frustración (Ya Freddy lo ha dicho) pero se están excediendo. En lugar de enamorar lo que generan es que se fastidien. Mal ahí...
Por que e ambos casos aqui estamos llamando ataque enemigo, tanto para eemigo como para jugador ?
Efectivamente es un error. Deberías seleccionar al ataque correspondiente de cada combatiente. Más adelante lo solucionaremos. :D
Es un error, coloca ataqueJugador y listo!
Listo, espero te sirva
Recomiendo leer este aporte en una nueva pestaña para una lectura mas amena.
Me demoré unas horas, pero creo que valió la pena.
Hemos cambiado el modelo de combate, ya no es por vidas, sino por rondas de cinco ataques (el que obtenga mas victorias gana.
functioncombate(){// fuego le gana a tierra, agua le gana a fuego, tierra le gana a agualet resultado
for(let i =0; i < ataqueJugador.length; i++){if(ataqueJugador[i]=== ataqueEnemigo[i]){indexAtaques(i, i) resultado ="EMPATE 🙂"}elseif((ataqueJugador[i]=="FUEGO"&& ataqueEnemigo[i]=="TIERRA")||(ataqueJugador[i]=="AGUA"&& ataqueEnemigo[i]=="FUEGO")||(ataqueJugador[i]=="TIERRA"&& ataqueEnemigo[i]=="AGUA")){indexAtaques(i, i) resultado ="GANASTE 😎"}else{indexAtaques(i, i) resultado ="PERDISTE 😫"}console.log(ataqueJugador[i], ataqueEnemigo[i])}crearMensaje(resultado)iniciarValidacion()}
Es similar a la funcion anterior en cuanto a la logica de victorias.
He creado una variable "let resultado" que guardara el valor de cada combate individual en vez de llamar a la funcion crearMensaje() al final de cada bucle, (volveremos a esta funcion mas tarde).
Seguimos usando la funcion de IndexAtaques() que explico el profesor.
Antigua función crearMensaje()
functioncrearMensaje(resultadoCombate){ sectionResultadoCombate.innerHTML= resultadoCombate
functioncrearMensajeAtaqueJugador(){let parrafo =document.createElement("li") parrafo.innerHTML="Atacó con "+ ataqueJugador
statusJugador.appendChild(parrafo)}functioncrearMensajeAtaqueEnemigo(){let parrafo =document.createElement("li") parrafo.innerHTML="Atacó con "+ ataqueEnemigo
statusEnemigo.appendChild(parrafo)}crearMensajeAtaqueJugador()crearMensajeAtaqueEnemigo()}
Quizas se vea mas grande de lo que es (tal vez sea por los if; estos son detalles mio, permiten designar un color dependiento el resultado del combate; rojo para derrotas y verdede para victorios, esto para jugador y enemigo).
Decidi cambiar de lugar estas lineas de código de combate() a una de las subfunciones de crearMensaje() dependiento si son del jugador o enemigo, son las siguinetes lineas
...sigue, esto lo hice asi porque me di cuenta de que si dejo que fluya como lo hace siempre la funcion combate() con las lineas anteriormente mencionadas, en vez de esperar a una validacion que nos muestre al final cual fue el resultado de los cinco ataques como lo dijo el profe (cosa que no me gusto, despues te explico la secuencia) me junta los resultados anteriores mostrando 15 ataques en vez de 5 (1 + 2 + 3 + 4 + 5 = 15, esto cada vez que se seleciona un ataque y se suma al array), espor eso que decidi ponerlas aqui.
Veamos la secuencia impuesta por el profesor para la función combate()
De esta manera los combates se imprimen en momento real, en ves de esperar la validación (lo hice de esta manera para que se sienta mas real, nosotros al programas esto sabemos que el ataque del enemigo es completamente aleatorio, pero el usuario final no lo sabe, se sentiria como si el enemigo ya supiera nuestros ataques de antemano y podria tomar ventaja.
.
Recuerda que la funcion iniciar validacion es llamada al final de combate(), por lo que se enterara cuando el array tenga los elementos suficientes (en este caso 5) y llamara a la funcion revisarVictorias()
Mi antigua función
functionrevisarVidas(){if(vidasEnemigo ==0){crearMensajeFinal("GANASTE LA BATALLA✌")}elseif(vidasJugador ==0){crearMensajeFinal("PERDISTE LA BATALLA😞")}}//Recordemos que antes aun era por vidas
Mi nueva función
functionrevisarVictorias(){if(victoriasJugador > victoriasEnemigo){crearMensajeFinal("GANASTE LA BATALLA✌")}elseif(victoriasJugador < victoriasEnemigo){crearMensajeFinal("PERDISTE LA BATALLA😞")}else{crearMensajeFinal("HA SIDO UN EMPATE⚖")}}// La nueva modalidad impera por la victorias
Y así es como se ve:
Aqui mi repositorio: Mokepon
Tambien puedes probarlo: ¡Juega ahora!
Te agradezco mucho por leer hasta el final💚💚💚
Me encantó tu codigo, justamente estaba pensado hacerlo parecido, tomare tu código como referencia. muchas gracias por tu aporte
Mis validaciones! je
Tengo la sensación desde que el bloque de Programación Básica lo está explicando el profesor Diego, el nivel a subido excesivamente para alguien que está empezando en programación como es mi caso aunque estoy más especializado en marketing digital algo básico conozco de código.
A modo de feedback la curva de aprendizaje es demasiado brusca y también es como agotadora 40 clases con el ejemplo de los mokepones, desde las últimas clases ya uno no sabe claramente el porque se hace esto o lo otro, el cerebro como que desconecta.
Voy a seguir adelante porque me he marcado aprender programación con 37 años pero de verdad que estas clases se están haciendo pesadas.
Hola Josué. Me da gusto leer tu comentario. Me siento similar a ti. Y al parecer no somos los únicos.
Seguiré con el curso, solo que en este punto si me sentí frustrada y desmotivada