Fundamentos de Programación

1

Programación desde Cero con JavaScript

2

Programación Básica con Consola de Navegador

3

Creación y gestión de archivos HTML básicos

4

Estructura Básica de Documentos HTML

5

Conoce la estructura básica de HTML y cómo integrarla con JavaScript

6

Instalación de Visual Studio Code y configuración inicial

7

Variables y texto dinámico en JavaScript

8

Programación de Piedra, Papel o Tijera en JavaScript

9

Algoritmo de Piedra, Papel o Tijera en JavaScript

10

Generación de Números Aleatorios en JavaScript

11

Funciones en JavaScript: Uso y Buenas Prácticas

12

Condiciones y Ciclos en Programación Python

13

Programación: Control de Flujos con Ciclos While

14

Rutas Absolutas y Relativas en Sistemas de Archivos y Web

15

Manipulación del DOM y Eventos en JavaScript

Quiz: Fundamentos de Programación

Desarrollando un juego con HTML y JavaScript

16

Maquetación de páginas web con HTML y CSS

17

Selección de Mascota en HTML con Inputs de Tipo Radio

18

JavaScript: Hacer Funcionar Botón de Selección de Mascota

19

Eventos en JavaScript: Escucha Carga de HTML y Ejecuta Función

20

Condicionales en JavaScript: Verificación de Inputs

21

Manipulación del DOM con JavaScript: Actualizar Contenido Dinámico.

22

Selector de Mascota Enemiga con JavaScript y Números Aleatorios

23

Eventos con addEventListener en Botones de Ataque HTML

24

Selección aleatoria de ataques para enemigos en JavaScript

25

Creación de Elementos HTML con JavaScript: `createElement` y `appendChild`

26

Programación Funcional en JavaScript: Conceptos y Ejemplos Prácticos

27

Tablas de Verdad: Operadores Lógicos en Programación

28

Cambio dinámico de vidas en combates con JavaScript

29

JavaScript: Validación de Vidas en juego de Combate

30

"JavaScript: Activar reinicio y desactivar botones post-juego"

31

Mostrar y Ocultar Elementos HTML con JavaScript

Quiz: Desarrollando un juego con HTML y JavaScript

Estilos con CSS

32

Propiedades y selectores CSS: Estiliza tu página web

33

Tipos de Display en CSS: Block, Inline e Inline-Block

34

Alineación y Posicionamiento con Flexbox en CSS

35

Modelo de Caja en CSS: Margen, Borde y Relleno

36

Estilos Flexbox para Diseñar una Web Atractiva

37

Estilos CSS avanzados para botones interactivos en juegos

38

Estilos CSS para Juegos con HTML y JavaScript

39

Estiliza Elementos con Flexbox para Proyectos Web

40

Separación de Elementos en Mensajes con JavaScript y HTML

41

Maquetación con CSS Grid: Crear Rejillas y Distribuir Contenidos

42

Diseño Responsivo: Usando Media Queries en CSS

43

Pseudoclases CSS: Hacer Visible la Selección en Formularios

Quiz: Estilos con CSS

Optimización de código

44

Optimización de Código JavaScript para Juegos Interactivos

45

Refactorización de Código: Reutilización de Variables en JavaScript

46

Clases y objetos en JavaScript para videojuegos

47

Creación de Objetos en JavaScript: Clases y Propiedades Básicas

48

Manejo de Arreglos en JavaScript: Creación y Manipulación de Datos

49

Manipulación del DOM con JavaScript y Mokepones

50

Manipulación HTML con JavaScript: Inyectando Mokepones Dinámicamente

51

Depuración de Errores en JavaScript: Variables y Elementos HTML

52

Gestión de Objetos en JavaScript: Fuente Única de Verdad

53

Manipulación de Arreglos en JavaScript: Selección de Elementos Aleatorios

54

Iteración de Arreglos en JavaScript: Mostrar Datos en HTML

55

Función que Genera Botones Dinámicos en JavaScript

56

Eventos de Clic en Botones con JavaScript

57

Validación de secuencia de ataques en JavaScript

58

Validación de ataques en juegos HTML: lógica y JavaScript

59

Diseño de Algoritmos para Juegos Interactivos

60

Optimización de Estilos en Juegos Web con CSS

Quiz: Optimización de código

Mapa con canvas

61

Mapa Interactivo con Canvas y JavaScript

62

HTML y JavaScript para Movimiento en Canvas

63

Control de Movimiento en Canvas con JavaScript

64

Eventos de Teclado: Movimiento de Personajes en JavaScript

65

Pintar imágenes y personajes en Canvas HTML

66

Métodos de la Clase Mokepon: Cómo Pintar y Mover Enemigos

67

Detección de colisiones en videojuegos con JavaScript

68

Colisiones en Desarrollo de Videojuegos con JavaScript

69

Redimensionar mapas en JavaScript: adaptable a pantalla completa

70

Estilos CSS Avanzados para Páginas Responsivas

Quiz: Mapa con canvas

Backend: videojuego multijugador

71

Comunicación Cliente-Servidor con HTTP y APIs

72

Instalación de Node.js en Windows para desarrollo backend

73

Uso de la Terminal de Comandos para Desarrolladores Node.js

74

Servidor Web con Express.js: Creación y Configuración Básica

75

Entendiendo URIs y HTTP en Desarrollo Web

76

Comunicación entre Frontend y Backend con Node.js

77

Comunicación Frontend-Backend con JSON para Selección de Mokepones

78

"Actualización de Coordenadas en Node.js para Juegos Multijugador"

79

Gestión de Coordenadas en Multiplayer con JavaScript

80

Optimización de Código en JavaScript para Videojuegos

81

Batalla Final Mokepon: Intercambio de Ataques en Línea

82

Programación de Fetch API con JavaScript en Aplicaciones Web

Quiz: Backend: videojuego multijugador

Próximos pasos

83

Programación Multijugador con Node.js y Express

84

Desarrollo web backend con Node.js y Express

No tienes acceso a esta clase

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

Métodos de la Clase Mokepon: Cómo Pintar y Mover Enemigos

66/84
Recursos

¿Cómo pintamos a los enemigos en nuestro juego?

Integrar enemigos en tu juego aporta no sólo emoción, sino también un mayor desafío y dinamismo. En esta clase, aprenderemos a modificar nuestra implementación actual para lograr que nuestros enemigos se pinten correctamente en el mapa. Esto implica comprender las funciones de nuestra clase y cómo podemos utilizarlas para optimizar el código.

¿Cómo modificamos nuestra clase Mokepon?

Inicialmente, nuestra clase Mokepon tenía atributos básicos como X, Y, ancho, y alto. Vamos a necesitar cambiar el enfoque para que los atributos X e Y sean argumentos que se pasan al constructor, permitiendo una mayor flexibilidad al posicionar nuestros personajes en el mapa.

class Mokepon {
    constructor(fotoMapa, x = 10, y = 10) {
        this.fotoMapa = fotoMapa;
        this.x = x;
        this.y = y;
        this.ancho = 40; // Actualizado a 40 para menor tamaño
        this.alto = 40;  // Actualizado a 40 para menor tamaño
        // Otros atributos relevantes...
    }
    // Métodos adicionales...
}

Utilizamos la imagen del avatar para cada Mokepon usando un directorio de recursos y aplicamos un parámetro por defecto para X e Y.

¿Cómo creamos un array de enemigos y los pintamos?

Para representar enemigos en nuestro mapa, crearemos un array y añadiremos los Mokepones con posiciones específicas para diferenciarlos en el plano.

const enemigos = [];
enemigos.push(new Mokepon('assets/hipodoge.png', 80, 120));
enemigos.push(new Mokepon('assets/capipepo.png', 150, 95));
enemigos.push(new Mokepon('assets/ratigueya.png', 200, 190));

Luego, definimos un método pintarMokepon dentro de nuestra clase para encargarse de la representación gráfica de cada enemigo en pantalla.

pintarMokepon() {
    lienzo.drawImage(
        this.fotoMapa,
        this.x,
        this.y,
        this.ancho,
        this.alto
    );
}

¿Cómo utilizamos los métodos de las clases para pintar los Mokepones?

La implementación dentro de las clases nos permite reutilizar código y mantenerlo más limpio. Al implementar métodos como pintarMokepon, simplificamos la representación visual de objetos en el mapa. Reformulamos la función que manipulaba el Canvas para integrar estas capacidades.

function pintarCanvas() {
    // Pintamos el Mokepon del jugador
    mascotaJugadorObjeto.pintarMokepon();

    // Pintamos los enemigos
    enemigos.forEach(enemigo => enemigo.pintarMokepon());
}

Esta metodología garantiza que todos los elementos se presentan adecuadamente en diferentes posiciones. El método interno pintarMokepon utiliza this para acceder a las propiedades del objeto respectivo.

Sorprendentemente, ahora cada Mokepon se despliega correctamente en el mapa y podemos abordar el reto de enfrentar a nuestro personaje contra estos enemigos en las siguientes lecciones.

Al dominar estas técnicas, mejoramos nuestra aplicación de JavaScript para crear dinámicas más ricas y envolventes en juegos interactivos. Sigue adelante y no te detengas, ¡estás a un paso más cerca de convertirte en un desarrollador maestro!

Aportes 76

Preguntas 22

Ordenar por:

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

Cuando el valor de una propiedad de un objeto es una función se le llama: método.

El método, entonces, es una función que está asociada a un objeto.

si ponen la funcion aleatorio en el constructor de la clase mokepon, en las cordenadas X y Y, los mokepones salen aleatorios.

this.x= aleatorio(0,320)
this.y= aleatorio(0,240)

va tomando forma 😁

Aquí les dejo las cabezas de nuestros Mokepones

Por personalizar a mis mascotas
![](

Me tocó improvisar cabezas jajaja.
![](

Difícilmente se puede seguir el curso sin conocimientos anteriores. Se pasa por encima de muchas cosas, que se dan x conocidas.

Nadie tiene las cabezas de los otros 3 mokepones del reto anterior ???
Por ahora en mi caso deje para la cabeza y el cuerpo, la misma imagen (Me refiero a langostelvis, pydos y tucapalma…)

Bueno!!!
.
Hay vamos…
.

.

.
Que gran avance!!!

Mi mapa:

Wowow este curso básico no esta tan básico después de todo espero seguir mas adelante aprendiendo y no sentirme mas perdido con las demás cursos de JS

Quisiera compartirles un poco de como yo he ido haciendo este proyecto a mi manera con las bases del curso.

  • Yo puse todos mis objetos de personaje en un array, esto me permite usar los índices de cada personajes para toda la lógica del juego
let invocaciones = [sammy, amalthea, ashley];
  • Tambien tengo una funcion para crear otro array pero con los enemigos, esta función se activa luego de que nuestro usuario escoja personaje (no quiero tener que luchar contra mi propio personaje :p)
let enemigos
function IndiceEnemigos (){
    enemigos = invocaciones.filter(function(pj){
        return pj.nombre != invocaciones[indiceInvocacion_p1].nombre
    })
}

-Por último use nuestra función para crear números aleatorios en la posición donde sale cada personaje, así se evita que salgan siempre en el mismo sitio ( lo que sí hice fue limitar una zona para cada personaje porque aunque es aleatorio salían muy cerca algunas veces)
PD: los rangos van según el tamaño de nuestro canva teniendo en cuenta el tamaño de las imágenes también.

invocaciones[1].x = aleatorio(200,500);
invocaciones[1].y = aleatorio(150,350);

Así va quedando :3

Bueno, realmente es como sigue:
Propiedad es una función del objeto que establece o devuelve un valor, como Color.
Método es una función que puede no retornar un valor, pero que ejecuta una acción, como MoverDerecha(espacios), o Dibujar.
Evento es una función que es llamada por el propio objeto y queda disponible para que el programador la aproveche si lo necesita, como CambioColor (colorAnterior), CambioPosición(PosicionAnterior), SeAgregoUnAtaque(NuevoAtaque), Click, Drag…

vamos!!!

Esta quedando chido 😃

El en reto de la ultima clase del anterior modulo, nos pidieron agregar los 3 mokepones restantes, pero aqui solo dan el rostro de los 3 iniciales

Aprovechando la función Aleatorio que ya tenemos, coloqué cada Mokepón en un lugar al azár:
let hipodoge = new Mokepon(‘Hipodoge’,’./assets/Hipodoge.png’,0,’./assets/Hipodoge.png’,aleatorio(10,630), aleatorio(10,470))
/* Aquí aún no se ha definido el Canvas, así que use las dimensiones de pantalla (640x480) menos 10, para que todos estén en el mapa, pero esto se puede mejorar…

Luego, los pinto todos con un ciclo en la función correspondiente:
mokepones.forEach((moke) => {
moke.dibujar()
})

pensé que iba a dejar el curso, la clase pasada no podía continuar, luego descubrí el error y pude seguir.😁😁

Yo le agregué un poco de picante 🔥 para que la posición de los enemigos sea aleatoria.

let hipodoge = new Mokepon('Hipodoge','./assets/mokepons_mokepon_hipodoge_attack.png', 5, './assets/hipodoge.png')
let capipepo = new Mokepon('Capipepo','./assets/mokepons_mokepon_capipepo_attack.png', 5, './assets/capipepo.png')
let ratigueya = new Mokepon('Ratigueya','./assets/mokepons_mokepon_ratigueya_attack.png', 5, './assets/ratigueya.png')
let hipodogeEnemigo = new Mokepon('Hipodoge','./assets/mokepons_mokepon_hipodoge_attack.png', 5, './assets/hipodoge.png', Math.random()*mapa.width, Math.random()*mapa.height)
let capipepoEnemigo = new Mokepon('Capipepo','./assets/mokepons_mokepon_capipepo_attack.png', 5, './assets/capipepo.png', Math.random()*mapa.width, Math.random()*mapa.height)
let ratigueyaEnemigo = new Mokepon('Ratigueya','./assets/mokepons_mokepon_ratigueya_attack.png', 5, './assets/ratigueya.png', Math.random()*mapa.width, Math.random()*mapa.height)

No puedo seguir la clase, se quebró mi código, lo revise varias veces y no entiendo porque no me funciona. Alguna idea o sugerencia?

  • Método es el nombre que recibe una función que existe dentro de una clase.
    .
  • Se utilizan para englobar comportamientos o acciones que se pueden realizar con los objetos creados a partir de la clase.
sinceramente estoy siguiendo el curso y todo me ha salido bien pero hay varios conceptos que no los termino de captar solo sigo las instrucciones pero hacerlo por mi cuenta sola no podría, igual seguiré porque imagino que cuando veamos todo a mas profundidad se aclararan dudas y afianzaran conocimientos, yo veo este curso como un abre boca para echemos un vistazo a todo lo que la programación ofrece y analicemos si de verdad queremos seguir, por mi parte no parare de aprender así me sienta perdida por momentos...

Ami me quedo así

no pude seguir de esta clase, copio pego mis personames y le cambio el nombre agregandoles Enemigo pero no sucede nada, yo tengo 6 personajes, copie y pegue los ultimos 3 y les agrege enemigo y del resto hice todo igual y no funciona y en la consola no sale error. ayuda!

yo en vez de crear todos los personajes de nuevo, pero con el “enemigo”, guarde la mascota aleatoria en una variable llamada mascotaDelEnemigo, luego prácticamente copie el sistema creado para hacer aparecer a la mascota del jugador, y de esta forma hice que apareciera el enemigo en el mapa

Vamos bien.

Hola a todos! Me parece mas entretenido si hacemos que los mokepones enemigos tengan una posición diferente cada vez que se inicia el juego. Para ello, usé la función aleatorio cuando creo los objestos enemigos:

<code> 
let hipodogeEnemigo = new Mokepon('Hipodoge','./assets/mokepons_mokepon_hipodoge_attack.png',5,'./assets/hipodoge.png', aleatorio(10,250), aleatorio(10,200))

let capipepoEnemigo = new Mokepon('Capipepo','./assets/mokepons_mokepon_capipepo_attack.png',5,'./assets/capipepo.png',aleatorio(10,250),aleatorio(10,200))

let ratigueyaEnemigo = new Mokepon('Ratigueya','./assets/mokepons_mokepon_ratigueya_attack.png',5,'./assets/ratigueya.png',aleatorio(10,250),aleatorio(10,200))

Estas clases son muy adictivas. Uno se ve una y quiere ver las otras 10. Gracias totales.

¡Vamos así! 😄 Más adelante pienso rediseñar algunos mokepones para diferenciarlos entre enemigos y el mokepon del jugador 😉.

Me gusta como Hipodoge se internacionalizo a "Haipodouch"
veo mucha gente quejandose por la complejidad del curso, pero la realidad es que esto solo es para que tengan logica de programación les aseguro que muchas de estás cosas no las van a usar en su vida laboral como programador, lo poco que les va a servir de este curso es como estructurar los datos, como funcionan los arrays, y la logica de programación que es lo mas importante, en la realidad laboral javascript puro lo van a usar muy poco, lo mas logico es que usen frameworks como react o vue que se alejan un poco de lo que hacen aca
Tremenda clase, muchas gracias.

Me encanta esta profesora, se detiene con frecuencia a explicar detalles adicionales que podrían ser de utilidad aunque no estén directamente relacionados con lo que se está haciendo en el momento, además que todo se siente menos cuadriculado. Hace que sienta que aún estoy avanzando pero el nivel de esfuerzo cognitivo disminuyó.

Genial ![](https://static.platzi.com/media/user_upload/image-c4640f9d-d922-480a-b50b-e8d572989404.jpg)![](https://static.platzi.com/media/user_upload/image-4f015098-3dbe-48c6-916b-461c9333684e.jpg)
así va quedando mi Hogwarts Legacy ![](https://static.platzi.com/media/user_upload/Captura%20de%20pantalla%202024-05-21%20114731-1ffba81f-b029-4d4a-a050-467c544dad5f.jpg)
**<u>Cómo hacer que la mascota rival te persiga:</u>** Les dejo la función que creé para que la mascota enemiga te persiga en lugar de quedarse quieta. Cabe mencionar que, además de esta función, fue necesario: * crear un nuevo `interval` que ejecute constantemente la función `moverRival` (el intervalo se inicializa en la función `iniciarMapa`, igual que el intervalo para el movimiento del jugador) * incorporar la actualización de la posición del rival en la función `pintarCanvas`. La función `moverRival` me quedó así: ![](https://static.platzi.com/media/user_upload/image-41e88c0e-1fd1-4ce1-b74b-e3fea4f78d23.jpg)
Queriendo usar animalitos pero con distinta resolucion, les asign\[e por par\[ametro un width y un height, por ejemplo el cocodrilo tenia que necesariamente cambiar la forma en la que se dibujaba para que no quedara chaparro![](https://static.platzi.com/media/user_upload/MOKEPON_capture-b86db3e5-8456-42a6-b70d-b644d62c7937.jpg)
Mi avance hasta ahora :D ![](https://static.platzi.com/media/user_upload/image-c5165766-736e-47a2-a62c-66c2b7c5f41a.jpg)![](https://static.platzi.com/media/user_upload/image-b574a0fd-cd72-4ece-a958-5d4f0866c84d.jpg)

😄

Utilicé la función aleatorio para la posición del mokepon enemigo, vi que en algunos aportes utilizaron el rango del aleatorio el mapa.width y el mapa.height pero en mi caso solo se movían en un rango muy chico y repetían muchas posiciones, me parece que tienen más movilidad definiendo los rangos del aleatorio.

let hipodogeEnemigo = new Mokepon("Hipodoge", "./assets/HIPODOGEF.png", 5, "💧", aleatorio(20, 620), aleatorio(20, 620))

let capipepoEnemigo = new Mokepon("Capipepo", "./assets/CAPIPEPOF.png", 5, "🌱", aleatorio(20, 620), aleatorio(20, 620))

let ratigueyaEnemigo = new Mokepon("Ratigueya", "./assets/RATIGUEYAF.png", 5, "🔥", aleatorio(20, 620), aleatorio(20, 620))

let langostelvisEnemigo = new Mokepon("Langostelvis", "./assets/LANGOSTELVISF.PNG", 5, "🔥", aleatorio(20, 620), aleatorio(20, 620))

let pydosEnemigo = new Mokepon("Pydos", "./assets/PYDOSF.png", 5, "💧", aleatorio(20, 620), aleatorio(20, 620))

let tucapalmaEnemigo = new Mokepon("Tucapalma", "./assets/TUCAPALMA.png", 5, "🌱", aleatorio(20, 620), aleatorio(20, 620))

Excelente clase. lo reproduzco a 0.85x, es bueno como se hace entender.
Gracias también los compañeros que hacen verdaderos aportes.

aún no estoy muy seguro de porque pero quería hacer un forEach para no volver a declarar a las mascotas enemigas, si no que usar las del propio arreglo de Mokepones y no me dejaba mostrar a la misma mascota que escogiera el jugador

mokepones.forEach(mokepon=>{
        mokepon.pintarMokepon()
    })

mi solución fue en la función seleccionarMascota() crear una variable enemiga y hacerle un push en el arreglo mokepones:

enemiga = new Mokepon(mascotaJugador.nombre,mascotaJugador.imagen,5,mascotaJugador.vida,mascotaJugador.mapaFoto.src)
            enemiga.ataques = (mascotaJugador.ataques)
            mokepones.push(enemiga)

Para no tener que volver a asignar todos los valores de los mokepones para los enemigos, uso una función que clona las instancias de una clase. Esto reduce el riesgo de errores, como por ejemplo, si cambiamos la ruta de la dirección de una de las imágenes, no hay necesidad de cambiarla tanto en el mokepón original como en el enemigo:

// Función auxiliar para clonar una instancia de una clase
function clonarClaseObjeto(obj){
    return Object.assign(Object.create(Object.getPrototypeOf(obj)), obj);
}

// Creamos los mokepones enemigos
let hipodogeEnemigo = clonarClaseObjeto(hipodoge);
[hipodogeEnemigo.x, hipodogeEnemigo.y] = [80, 120];

let capipepoEnemigo = clonarClaseObjeto(capipepo);
[capipepoEnemigo.x, capipepoEnemigo.y] = [150, 95];

let ratigueyaEnemigo = clonarClaseObjeto(ratigueya);
[ratigueyaEnemigo.x, ratigueyaEnemigo.y] = [200, 190];

Aguante el Hipodosh!!

Estoy impresionado con la forma que se ha usado las coordenadas de los enemigos para usar el canvas. Es la primera vez que veo eso, espero seguir aprendiendo mas.

Cuando pedimos parámetros para una función podemos definirle un valor por defecto a sus parámetros.

ARRIBA DE MI MOTO ESTUDIO PAAA

ya se me rompió el código, hasta aquí llegamos
En mi caso ya que el `this.width` y el `this.height` solo aceptan valores en pixeles, cree dos funciones que me ayudan a pasar un numero de viewport y que este sea convertido a pixeles, haciendo que los pixeles establecidos cambien según el tamaño de la pantalla. ![](https://static.platzi.com/media/user_upload/image-1e928422-5fac-4f83-b889-e4fbd2ffd0c6.jpg)![](https://static.platzi.com/media/user_upload/image-0346469d-3308-437e-ba72-d650e555d534.jpg)
me están saliendo éstos errores y no se solucionarlos![](file:///C:/Users/Esteban/Pictures/Screenshots/Captura%20de%20pantalla%202024-06-27%20115618.png)
![](<"C:\Users\Esteban\Pictures\Screenshots\Captura de pantalla 2024-06-27 115618.png">)
Los mokepones parecen gallinas en el gallinero 😂😂

Que confuso que hace y deshace su código. En lugar de que sea super estructurada la instructora como nos acostumbraron al principio…

![]()
![](file:///Users/manuelgutierrez/Desktop/Screen%20Shot%202024-03-25%20at%205.29.02%20PM.png)
comenteeen
En mi caso lo que hice fue que las posiciones de los personajes fuesen aleatorias usando la función que ya habíamos creado desde el principio. ```js class Mokepon { constructor(nombre, foto, vidas, cara){ this._nombre = nombre this._fotos = foto this._vidas = vidas this._ataques = [] this._x = aleatorio(270, 0) this._y = aleatorio (190, 0) this._ancho = 50 this._alto = 50 this._imagen = new Image() this._imagen.src = foto this._velocidadX = 0 this._velocidadY = 0 this._cara = new Image() this._cara.src = cara } pintar(){ lienzo.drawImage( this._cara, this._x, this._y, this._ancho, this._alto) } } ```270 y 190 son los 320 y 240 menos los 50 pixeles que mide la imagen, para que nunca se salgan del lienzo. también se podría hacer esto para que las posiciones nunca sean las mismas ```js let posicionesUsadas = [] function generarPosicionUnica() { let x, y do { x = aleatorio(0, 320) y = aleatorio(0, 240) } while (posicionesUsadas.includes(`${x},${y}`)) posicionesUsadas.push(`${x},${y}`) return {x, y} } ```pero ya es mucho jaja no lo incluí, pero tenia la duda de si se podría, y si se puede >D

EL ERROR DE LA CLASE 65 JAMÁS SE LOGRA ARREGLAR, ES UNA LASTIMA, VENÍA MUY ENTUSIASMADO, CABE RESALTAR QUE NISIQUIERA COPIANDO EL CODIGO DEJADO EN GITHUB, JAMÁS LO PENSÉ PERO AHORA PUNTO NEGATIVO PARA PLATZI.

Gracias por la clase.

Saludoss les cuento pueden colocar las cabezas de sus personajes diferentes a los que usan los profesores la manera en que lo hice fue hacer capture de pantalla al personaje que he usado en mi juego luego en la pagina de removebg extrae el fondo guarde la imagen en la carpeta donde estan las imagenes de mis personajes y siguiendo los pasos de la profesora se logran inicializar en mi canvas

hola vine aqui de nuevo repasando jajajaja por esta no pasé la prueba

genial!

T.T no subieron las imagenes también de tucapalma, pydos y langostelvis, me tocará desmontarlos T.T

Posiciones aleatorias


Yo preferí, pintar todos los mokepones con un forEach:

mascotaJugadorObjeto.pintarMokepon()
mokepones.forEach((mokepon) => {
        mokepon.pintarMokepon()
})

Y en el constructor puse esto para las coordenadas:

this.x= aleatorio(0, mapa.width-this.ancho),
this.y= aleatorio(0, mapa.height-this.alto),

Así se ve:


Asi va quedando el proyecto, con un toque personal.
https://juancamilogomezalvarez.github.io/mokipon/

alguien mas se dio cuenta que el background es del Pokemon Rojo Fuego cuando vas al laboratorio del cientifico que se habia convertido en pokemon?

🔥🔥🔥

me aparece cuando elijo un personaje cuando le doy seleccionar en el mapa me aparece el que elegi muchas veces
y no que hacer llevo 1 hora tratando de repararlo

me preguntaba por que tambien funciona en diagonal al mover al mokepon, no encontre exolicacion, creanme no me ha dejado dormir 😃

que buena esta clase!!

es buen aporte para todos

solo tengo un problema despues de hacer todo lo de la clase me pasa que mi personaje ya no se mueve arriba y abajo , izquierda y derecha perfecto ,pero no se porque ya no sube ni baja