Ya casi amigos!!
Fundamentos de Programación
Bienvenida a Platzi: ¿qué necesitas para tomar el curso?
Programación en Navegadores: Primeros Pasos
Crea tu primer sitio web
Sitios web con HTML
Estructura de árbol en HTML
Instalando tu primer editor de código
Cómo declarar variables y usar prompt
Algoritmo de piedra, papel o tijera
Algoritmo avanzado de piedra, papel o tijera
Aleatoriedad
Refactor del código usando funciones
Ciclos
Gana 3 veces
Archivos de HTML y JavaScript
¿Qué es el DOM?
Quiz: Fundamentos de Programación
Desarrollando un juego con HTML y JavaScript
Maquetación con HTML
Sección de elegir mascota
¿Dónde ubicar la etiqueta script? Conectando HTML con JavaScript
Escuchando eventos con JavaScript
addEventListener
Manipulación del DOM
Enemigos aleatorios
Ataques en JavaScript
Ataques aleatorios del enemigo
Imprimiendo ataques del enemigo
¿Ganaste, perdiste o empataste?
Tablas de verdad
Creando el contador de vidas
¿Quién ganó el juego?
Reiniciando el juego
Ocultando elementos HTML con JS para mejorar la UX del juego
Quiz: Desarrollando un juego con HTML y JavaScript
Estilos con CSS
Anatomía de CSS
Tipos de display
Flexbox
Modelo de caja
Imágenes para los Mokepones
Estilos del botón
Adaptando HTML al diseño del juego
Layout: título y ataques
Adaptando JavaScript al diseño del juego
CSS Grid
Responsive Design
Detalles finales
Quiz: Estilos con CSS
Optimización de código
Revisión de código
Don't repeat yourself (DRY)
Clases y objetos
Clases y objetos de Mokepon
Arrays o arreglos
Objetos vs. arreglos
Ciclos: manipulando el DOM con iteradores
Declaración lenta de variables
Una sola fuente de la verdad
Mascotas aleatorias con arreglos
Ataques dinámicos por cada mascota: extraer
Renderizado dinámico en HTML
Eventos de click dinámicos
Secuencia de ataques del enemigo
Iniciando el combate
Resolviendo el reto de condicionales
Optimizando el frontend del juego
Quiz: Optimización de código
Mapa con canvas
Introducción a canvas: dibujando con JavaScript
Moviendo a Capipepo hacia la derecha
Movimiento hacia todas las direcciones
Movimientos con el teclado
Imágenes y personajes de fondo
Métodos en las clases
Obstáculos y colisiones
Combate entre mokepones colisionados
Mapa responsive
Botones bonitos y viewport
Quiz: Mapa con canvas
Backend: videojuego multijugador
¿Qué es backend?
Instalación de Node.js y NPM
Terminal de comandos y Node.js
Servidor web con Express.js
HTTP, localhost, servidores y puertos
Express.js y fetch: API REST con JavaScript
JSON y POST: mokepon online
Transmisión de coordenadas
Mokepones dinámicos en el mapa
Optimizando el mapa del juego
Batalla entre jugadores
Consumiendo la API de ataques del enemigo
Quiz: Backend: videojuego multijugador
Próximos pasos
Probando el juego en varios dispositivos
¿Y ahora qué curso tomar?
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Convierte tus certificados en títulos universitarios en USA
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Diana Martínez
Te encuentras muy cerca de finalizar tu primer backend y tu primera aplicación completa. ¡Solo un esfuerzo más!
Si tu proyecto aún no funciona como debe, te recomiendo realizar una comparación con el código de los profesores que lo crearon originalmente. También puedes compartir y buscar ayuda en la sección de comentarios.
Notarás que el código fuente se encuentra alojado en una plataforma llamada GitHub que utiliza un software llamado Git. Git será uno de tus próximos pasos en el mundo de la programación y GitHub es una “red social para programadores”. La misma te permite llevar un control de versiones del código fuente y es la herramienta perfecta para guardar tu código.
Te tocará aprender Git en el futuro. De momento, concentra tu energía en finalizar tu primera aplicación. Solo falta desarrollar unos endpoints más para completar el videojuego.
Contribución creada por: Kevin Fiorentino (Platzi Contributor).
Aportes 63
Preguntas 31
Ya casi amigos!!
Hahaha yo cada que me tengo que devolver a lo que escribí hace una semana XD
¡¡¡Créditos a @ric.arellano92!!!
Para evitar el error “mokepon.js:448 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘nombre’)” lo que hice fue agregar un if que evalué si el mokepon existe o no, esta validación también se aplica en la parte de pintar mokeponEnemigo:
//---------------------Al recuperar enemigos--------------------------
mokeponesEnemigos = enemigos.map(function (enemigo)
{
let mokeponEnmigo = null
if(enemigo.mokepon != undefined)
{
const mokeponNombre = enemigo.mokepon.nombre
switch (mokeponNombre)
{
case "Hipodoge":
mokeponEnmigo = newMokepon('Hipodoge', './assets/mokepons_mokepon_hipodoge_attack.png', 5, './assets/hipodoge.png', enemigo.id)
break
case "Capipepo":
mokeponEnmigo = newMokepon('Capipepo', './assets/mokepons_mokepon_capipepo_attack.png', 5, './assets/capipepo.png', enemigo.id)
break
case "Ratigueya":
mokeponEnmigo = newMokepon('Ratigueya', './assets/mokepons_mokepon_ratigueya_attack.png', 5, './assets/ratigueya.png', enemigo.id)
break
default:
break
}
mokeponEnmigo.x = enemigo.x
mokeponEnmigo.y = enemigo.y
}
return mokeponEnmigo
})
//---------------------------------Al tratar de pintar enemigos----------------------------------------
mokeponesEnemigos.forEach(function (mokepon)
{
if(mokepon != undefined){
mokepon.pintarMokepon()
revisarColision(mokepon)
}
})
Decidí subir la respuesta de @ric.arellano92 porque estuve rompiéndome la cabeza durante una semana y quiero que otros lo puedan solucionar, ya que desde las carpetas del curso da error. saludos!
Yo creo que a este punto prácticamente nadie entiende, solo copian porque sixdd.
Los primeros profesores lo hacían bien, y explicando, el resto ya solo comenzó a escribir como si nada
Haciendo todo este proceso de juego “online” me doy cuenta de lo absurdamente detallado que debe ser la lógica de un juego, cada pequeña validación importa en el proceso, si alguna validación está mal hecha se rompe la lógica.
He Sufrido como no tienen idea en esta parte del juego por habermelas dado de “creativo” y haber puesto rondas y contadores de choques y otras cosas XD… no se si lo lograre con lo poco que sé pero seguro llegaré hasta donde me llegue el conocimiento.
Acá queda rotísimo…
¡Hasta la próxima amigos!
Un curso espectacular 🔥
Bueno… creo que me devuelvo a fundamentos de la programación, o quizá me haga unas clasesitas de diagramas de flujo jajaja
Para mi desde la clase 79 no función el código hice todas las correcciones , copie el Cod. desde el Github y nada, y por lo que leo en los comentarios varias personas presentan el mismo error, y al estar empezando es difícil poder detectar fallos en el cód… fácilmente.
lo dejare pendiente y cuando este mas capacitado y vea donde están los fallos regresare y compartiré la solución.
Por acá mencióno algunas de las correcciones que hice y que igual no funcionaron:
Bueno finalizare el programa pero una pena que al final luego de casi 80 clases este roto en las ultimas.
TIP: Para que no tengan que cortar y pegar pueden mover lineas de código arriba y abajo usando ALT
y la teclas de arriba o abajo.
Nunca me había sentido tan frustrado y perdido !
Hola, Alguien mas le sale este error, la cariable nombre esta con el mismo nombre que la variable de los nombres de los ataques, pense que erra erros mio pero mire con el codigo de la clase y sale el mismo.
resistan spartanos ya falta poco.
Pdt: para finalizar la intro.
Con mucho esfuerzo, lo voy logrando!!
Les recomiendo buscar comparador de textos en internet y comparar el código que hicieron con el que se descarga de la clase, es increible que un simple espacio en blanco puede alterar todo, hay muchos, yo estoy usando este
Yo despues de Terminar el curso de Programacion Básica, 1 mes despues… NUEVO CURSO Gratis de Programacion basica… ok otro reto, ventra el otro nuevo curso grati…?
Quiero hacer esto en unity, está muy genial!
CUANDO ESTAS APUNTO DE TERMINAR … !
y no funciona con todos los mokepones, cuando chocan, quisas algun dia encuentre la solucion
A mi hasta ahora me funciona perfecto pero hasta que ingreso una simple linea de codigo
revisarColision(mokepon)
Las colisiones funcionan antes, no se porque con solo escribir esa linea, ya nisiquiera me aparecen todos los mokepones en pantalla al tiempo.
Mi texto sobrevivió a todo a duras penas, pero sigue funcionando! 😄
Segun como lo veo yo, este curso es simplemente para ver los diferentes aspectos del desarrollo web y en 15 horas no te van a explicar todo. Yo terminando este curso voy a tomar el de HTML y CSS y luego el de Javascritpt que son mas profundo. Este es un camino muy largo y por no entender al principio no significa que no es lo tuyo, todo se aprende con tiempo, esfuerzo y disciplina.
A solo 3 clases y mi codigo esta roto ! Increible jejeje !
wow esto si se me puso dificil
Seria bueno que para un futuro agregaran la posibilidad de poder cambiarle la calidad a los videos. Como no tengo un internet muy bueno, me ha costado, un poco mas de lo normal terminar el curso.
Creo que en el examen de este modulo si me voy a pegar la rajada del siglo jejjejeje. Pero no entender aun no me destruye la moral.
Yo tengo el código un poquito diferente, porque yo evaluaba ataque por ataque y no esperaba a que se realicen los 5, pero a ver si resulta skldjaskdljsakldja
1+
ya casi siiiiiiiiiiiiiuuuuuuuuuuuuuuuuuu
Me he dado cuenta que la muchos errores que me pasaban era por iniciar mal el servidor y la actualización de la página.
Como consejo, les recomiendo tener mucho cuidado al iniciar y cerrar el servidor. 😄
Yo me pregunto , ¿Qué está pasando? , jaja me lo pregunto cada 1 minuto aproximadamente.
Es un poco triste como es que está terminando este curso, la verdad que tengo mucha más frustración e entendimiento que sensación de éxito , definitivamente para aprender no creo que sea tan buena esa sensación . Una mezcla extraña entre aprender pero también con mucho entendimiento.
En fin, vamos que ya queda poquito! los que llegamos hasta aquí, deberíamos estar orgullosos porque esto ha sido todo un desafío , en mi caso yo partí el 18 de abril … para ser mi primer curso en programación a la final me voy contento , un poco frustrado pero a la final orgulloso y contento
Buenas. Tengo un problema similar al resto que publica. Igualmente, es curioso lo que me paso, lo comento:
Esto puede ayudarlos! si por ahí les sale un error con un Undefined
const enemigos = jugadores.filter((jugador) =>
jugador.id !== jugadorId && jugador.mokepon !== undefined)
Casi que no doy con el chiste para que funcionará la colisión, pero es porque si al refrescar el enlace, no se escoje mokepon, igual se crea un nuevo enemigo que no tiene mokepon, por lo que este mokepon indefinido entra a la lista de mokepones enemigos y se paletea todo, para corregirlo agregué un condicional en la función del servidor, en la cual solo agrego el jugador a la lista de enemigos en caso de que ya haya elegido un mokepon
basic course
Estuve hasta acá pensando como hacian los profes para no perder la secuencia del código, los nombres de las variables, funciones y métodos. Observé entonces cómo de manera muy sutil miraba al lado izquierdo cada vez que iba a escribir alguno de ellos. Definitivamente se requiere un mapa o diagrama previo para programar. Les agradezco si me recomiendan la mejor forma de aprenderlo
Lo que me pasa es que se me duplican los botones de ataques pero no me aparece error, me tocara mirar como podré encontrar una solución 😃
Tengo una duda, porque se quita la condicional del si el personaje se mueve para verificar las colisiones?
Funcionando ya merito coronamos.
Viendo la clase y pausando a 0.85x (porque vuelvan esos profes) y con el vsCode con su autocompletar y aun así errores de typing 😅
Estamos a un solo paso de terminar este viaje. Vamooooooos.
En el código , en la función enviarAtaques ()
En este código pudimos ver como nos falto el puerto 8080 y el http : / / localhost .
Que quedaría así:
necesito fortalecer mi html
En mi proyecto, ya llevo varias docenas de juegos y subjuegos a partir de puro trabajo con idiomas, es decir no he usado muñecos sino palabras de ciertos idiomas.
He aprendido MUCHO elevado a la Platzi, en este curso, maravilloso, y lo bueno es que he aprendido muchas instancias de disciplina de programador.
Ahora ya paso a hacer juegos con movimientos…
Me esperan unos dos meses de trabajo intenso, dado el caso que estoy en plena producción pagada del año 2023 y debo ajustarme al horario de mi empleador.
Esto va bien.
He encontrado la solución gracias a usar CHAT GPT PLUS - GPT4 le he pasado el todo el código de mokepon.js y después de analizarlo me ha dicho que existía algunos problemas, y le he dicho:
Yo: Puedes solucionar los problemas que consideras que se tiene que ajustar?
Y la IA me dice: Sí, puedo hacer ajustes en el código para resolver algunos de los problemas mencionados. A continuación, se presenta el código modificado, en el que he reorganizado la estructura de algunas funciones para asegurar que todos los elementos estén definidos antes de ser utilizados:
// Código ajustado
const sectionSeleccionarAtaque = document.getElementById('seleccionar-ataque');
const sectionReiniciar = document.getElementById('reiniciar');
const botonMascotaJugador = document.getElementById('boton-mascota');
const botonReiniciar = document.getElementById('boton-reiniciar');
sectionReiniciar.style.display = 'none';
const sectionSeleccionarMascota = document.getElementById('seleccionar-mascota');
const spanMascotaJugador = document.getElementById('mascota-jugador');
const spanMascotaEnemigo = document.getElementById('mascota-enemigo');
const spanVidasJugador = document.getElementById('vidas-jugador');
const spanVidasEnemigo = document.getElementById('vidas-enemigo');
const sectionMensajes = document.getElementById('resultado');
const ataquesDelJugador = document.getElementById('ataques-del-jugador');
const ataquesDelEnemigo = document.getElementById('ataques-del-enemigo');
const contenedorTarjetas = document.getElementById('contenedorTarjetas');
const contenedorAtaques = document.getElementById('contenedorAtaques');
const sectionVerMapa = document.getElementById('ver-mapa');
const mapa = document.getElementById('mapa');
// Resto del código...
function iniciarJuego() {
sectionSeleccionarAtaque.style.display = 'none';
sectionVerMapa.style.display = 'none';
mokepones.forEach((mokepon) => {
opcionDeMokepones = `
<input type="radio" name="mascota" id=${mokepon.nombre} />
<label class="tarjeta-de-mokepon" for=${mokepon.nombre}>
<p>${mokepon.nombre}</p>
<img src=${mokepon.foto} alt=${mokepon.nombre}>
</label>
`;
contenedorTarjetas.innerHTML += opcionDeMokepones;
});
inputHipodoge = document.getElementById('Hipodoge');
inputCapipepo = document.getElementById('Capipepo');
inputRatigueya = document.getElementById('Ratigueya');
botonMascotaJugador.addEventListener('click', seleccionarMascotaJugador);
botonReiniciar.addEventListener('click', reiniciarJuego);
unirseAlJuego();
}
// Resto del código...
En este ajuste, he reorganizado el código para asegurar que los elementos del DOM se definan antes de ser utilizados. También he corregido la falta de puntos y comas al final de algunas líneas, para mantener una sintaxis consistente y evitar posibles problemas en la ejecución del código.
A mi se me rompio todo el codigo :C, no entienndo que hice mal aun, estoy esperando terminar el curso y asi poder revisarlo
Quede impresionado de como funciona el metodo de de mover el mapa e interactuar con una colision. Tuve mushos problemas para que este metodo funcionara, pero con paciencia y tiempo puede salir. La cosa es no darse por vencido.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?