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

No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

11 Días
23 Hrs
5 Min
27 Seg

Introducción a canvas: dibujando con JavaScript

61/84
Recursos

Aportes 84

Preguntas 33

Ordenar por:

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

El curso se debería llamar “Reto Intenso de Programación”

Lo que viene en las siguientes clases es apasionante. Creo que está muy por encima de cualquier curso de Programación básica que haya hecho antes.

Aplicando algunas modificaciones para que los enemigos sean diferentes a los personajes que podemos elegir. Me había complicado con los ataques, pero creo que es mejor continuar con algo más sencillo y más adelante intentar mejorar el juego. Mucho ánimo a todas las personas que lleguéis hasta aquí, ya falta menos 💪🏼

No me apareció la imagen de capipepo pero el rectángulo si me aparecía. En la siguiente clase hacemos que se mueva el personaje y ahí si logre que apareciera hasta que le di click en el botón de mover.
Lo comento para que no se queden aquí buscando la solución. Puede que llegue mas tarde 👍🏼🐢

Esto de hacer cosas sin saber hasta donde se quiere llegar es ridiculo. Minuto 5 y lo unico que hago es COPIAR porque no tengo ni idea del punto a donde se quiere llegar

REPORT: En el quiz de la clase anterior, la pregunta de cómo sacar la longitud de un array tiene la respuesta correcta repetida.

Creo que no es buena idea tener todo en un solo archivo de JS

Probando ChatGPT para entender mejor lo que estamos haciendo.

La respuesta que buscas es: drawImage()

Si te sientes frustrado porque no aparece la imagen de capipepo en el canvas, revisa lo siguiente:

new img() / debe ser = new Image()

Con esto resuelves el problema, yo me vi nuevamente la clase para darme cuenta del error que cometi.

Éxitos y recuerda que todo tiene una solución, no te rindas!

    let imagenDeCapipepo = new Image()
    imagenDeCapipepo.src = capipepo.foto
    lienzo.drawImage(
        imagenDeCapipepo,
        20,
        40,
        100,
        100
    )

La imagen del cohete que esta en el cavas se ve un poco distorsionada, no se por qué 😥

Quiero recomendarte, primero, que te animes a realizar los demás cursos de Platzi ( CSS, Responsive, Grid, Animación, Javascript…etc).
Ahora, unas herramientas para que, puedas checar e analizar si tu juego está responsive ( Media Queries).
MyDevice: Análisis de las medidas ( https://www.mydevice.io/#compare-devices ).
Responsive Viewer (Chrome): Puedes checar tu juego, página…etc. Cómo se ve ( Responsive ) ( https://chrome.google.com/webstore/detail/responsive-viewer/inmopeiepgfljkpkidclfgbgbmfcennb )
Css Grid Overlay : Puedes ver las columnas de otras páginas o sitios e inspirarte. ( https://chrome.google.com/webstore/detail/css-grid-overlay/hajfilceeneohkmcakehndmaeonhlack )

Por último, la guía de Mozilla para complementar lo aprendido en las clases ( https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API ) ( https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas ).

El Mapa de esta clase me recuerda a “Choose Your Framework” 😂, ya lo vieron:

https://www.chooseyourframework.dev/

Gochita?

va muy rápido y no entendí nada solo estaba copiando lo que hacia a la velocidad de la luz jajaja, voy a ver la clase de nuevo, tengo muchas preguntas sobre que es exactamente canvas pero bno.

Ojo con la R de fillRect va en mayúscula. Perdí 15 min con esto. 😦

Esta parte del curso esta genial!! 😄

En caso de que no aparezca la imagen en el canvas:

Puede deberse a que la imagen no se esté cargando correctamente en el código porque la carga de la imagen depende de muchos factores, como la velocidad de la conexión a internet o el tamaño de la imagen.

Para solucionar esto, debemos de dibujar la imagen cuando ya estemos seguros de que la image que estamos generando se haya cargado, para eso utilizamos onload de la siguiente manera:

		let hydroSlimeImage = new Image()
 		hydroSlimeImage.onload = function () {
			canvas.drawImage(
				hydroSlimeImage, 
				20, 
				40, 
				100, 
				100,
			)
		}

		hydroSlimeImage.src = slimeHydro.icon

Por lo tanto, es posible que en algunos casos, la imagen se cargue lo suficientemente rápido como para ser dibujada inmediatamente (Como en la clase), mientras que en otros casos, se necesite esperar a que la imagen se cargue completamente antes de poder dibujarla.

volvieron las clases entretenidas !!

Interesante hasta ahora. Sin embargo, me hubiera gustado que nos dieran un poco de contexto acerca de la herramienta y no creo que después la trabajemos en el mismo archivo de JS, se ve raro. Pero apenas es el inicio y esperamos que nos sigan sorprendiendo.

En mi opinión para ser la introducción a la etiqueta debería profundizar un poco más en los conceptos y explicar por qué va añadiendo esas líneas de código, la verdad ya estoy confundida 😕

Les recomiendo escribir Mokepón con acento la última o.

después de 61 clases la frustración apareció. A mi no se me dibuja el capipepo

Muchachos a los que no les aparezca la imagen de su mokepon en el Canvas. Cambien la “i” en image() por una, i mayuscula. Asi: new Image () y problema resuelto. Ya les deberia aparecer su mokepon.

OMG me gusta esta clase , que podamos crear un mapa es algo fantastico podre hacer mi juego rpg como quiero gracias

![](https://static.platzi.com/media/user_upload/Combate%20en%20Canvas-4edb70eb-67ea-4b9e-b9b3-07ac03f4edd1.jpg) Esta parte del curso nos da los conocimientos básicos para crear simulaciones excelentes. De acuerdo a lo que investigué, Canvas tiene muchisismas aplicaciones aparte de crear juegos. En mi caso para el proyecto, modifiqué el entorno del combate, para ver a los enemigos y ver una animación de sus ataques.

a todos los guerreros que terminaron la parte pasada, excelente!

Ok, iniciamos un nuevo segmento del curso y creo que he podido respirar un poco. No me pasaba desde hace muchas clases. Esta clase me volvió a dar tranquilidad y ojalá continúe así.

Esta clase les comparto que tuve un error en un solo detalle. Aquí si no escribes bien una palabra todo tu código se rompe. Afortunadamente en la consola del navegador te sale el error y lo puedes corregir. Es un poco frustrante pero satisfactorio al final que si lo logras.

Genial!!

Esta parte del curso esta genial!!

La etiqueta canvas nos sirve para hacer un mapa y que en el pueda haber elementos que estaremos poniendo nosotros en cualquier parte del mapa con un plano cartesiano con los ejes, X y Y, le diremos que lugar ocupar en el mapa.

capipepo esta como grande pa ese canvas 😀

Cada vez se pone más y más interesante, y eso que apenas es lo básico, que mundo más fascinante y complejo. Muchas gracias.
Empezamos Juerte
si te colera, dolor de cabeza, te salen canas eso quiere decir que vas por buen camino xD

Un compañero (Gustavo Sírtori) dejó que él extraía la imagen teniendo en cuenta el mokepon seleccionado. Si creáis una función de extraerFoto( ) y mostrarFoto( ) igual que en extraerAtaques( ) y mostrarAtaques( ), os saldrá la imagen del mokepon seleccionado.

IMPORTANTE: que esas dos funciones no se declaren dentro de seleccionarMascotaJugador( ). Ahí dentro solo debe haber nuevo el display flex de esta sección al principio y el extraerFoto(mascotaJugador) justo antes de seleccionarMascotaEnemiga.

NOTA: yo he declarado foto como variable global, debajo de lienzo

function extraerFoto(mascotaJugador) {
    let foto
    for (let i = 0; i < mokepones.length; i++) {
        if (mascotaJugador === mokepones[i].nombre) {
            foto = mokepones[i].foto
        }      
    }
    mostrarFoto(foto)
}

function mostrarFoto(foto) {
    let avatarMascota = new Image()
    avatarMascota.src = foto
    lienzo.drawImage(avatarMascota, 20, 40, 100, 100)
}
![](https://static.platzi.com/media/user_upload/image-39e56de2-5f8c-43d7-bfbd-409f7d4b0912.jpg) Siendo el primer valor la posición en X, el segundo valor la posición en Y, el tercer valor el ancho de la imagen y el cuarto valor la altura de la imagen ![](https://static.platzi.com/media/user_upload/image-0159cd14-f479-46d9-b773-057c0efef697.jpg)
miren muy bien como escriben las funciones, si tienen mayusculas o minusculas para que no pierdan tiempo buscando un error 😅
Esta parte del curso nos da los conocimientos básicos para crear simulaciones excelentes. De acuerdo a lo que investigué, Canvas tiene muchisismas aplicaciones aparte de crear juegos. En mi caso para el proyecto, modifiqué el entorno del combate, para ver a los enemigos y ver una animación de sus ataques.![](https://ibb.co/yByRv6V)![]()![](file:///C:/Users/palin/OneDrive/Im%C3%A1genes/Capturas%20de%20pantalla/Combate%20en%20Canvas.png)

Esta es mi solución, toma en cuenta el Mokepon seleccionado

// con el nombre obtengo el ID y lo guardo
// ! este calculo lo uso para otros cosas
 for (let i = 0; i < mokepones.length; i++) {
     if(mascotaJugador == mokepones[i].nombre){
         mascotaJugador = i
      }
  }

//mostrar mokepon en el canvas
let imgSelec = new Image();
imgSelec.src = mokepones[mascotaJugador].foto;
lienzo.drawImage(
  imgSelec,
  20,40,
  100,100)
y dale con ese juego que ni lo entiendo jajaja
hola alguien podría ayudarme, tengo un problema de error, así me aparece en el inspector: <u>mokepon.js:46</u> Uncaught ReferenceError: getContext is not defined at <u>mokepon.js:46:14</u>
hellop
LAS ULTIMAS 3 CLASES SON BUUUUUUUN
me gusto la clase .,
Un poco de lo que la profesora hizo con la etiqueta nueva y el uso de canvas: * Se obtiene el elemento `<canvas>` mediante `document.getElementById`. * Se obtiene el contexto 2D del lienzo con `getContext('2d')`. * Se utiliza el contexto 2D para dibujar formas como rectángulos, líneas y círculos.
Sí no les carga la imagen, es por la estructura de su HTML y el orden de lectura de cada linea de codigo. Yo lo solucioné de esta forma: `let img = new Image();` `img.src = poke_pikachu.img;` `img.onload = ()=>{` `context.drawImage(img1,5,5,100,100);` `};`

En mi caso no aparecía la imagen de Capipepo si ejecutaba el juego con el inspector abierto desde el principio. Así que si tampoco te aparece la imagen, prueba ejecutar el juego sin el inspector abierto.

me podrian ayudar con los recursos de la clase #60 ?

Otra vez a revisar linea por linea. 😥

Primera clase con Estefany, mucho mejor docente que Diego

Virgen Santa, sigue el error en el tìtulo de la primera secciòn: Mokepono en lugar de Mokepon jejeje

Si a alguien le sale este error

Uncaught TypeError: Failed to execute ‘drawImage’ on ‘CanvasRenderingContext2D’: The provided value is not of type ‘(CSSImageValue or HTMLCanvasElement or HTMLImageElement or HTMLVideoElement or ImageBitmap or OffscreenCanvas or SVGImageElement or VideoFrame)’.

Es porque les falta el .src cuando se esta haciendo la vinculación de la imagen de capipeo, justo en esta parte del código.

let imagenDeCapipepo = new Image();
  imagenDeCapipepo.src = capipepo.foto;
  lienzo.drawImage(imagenDeCapipepo, 20, 40, 100, 100);

fíjense que al momento de declarar esta variable lleva .src, imagenDeCapipepo.src = capipepo.foto;

tranquila muchacha, con calma 😐

Waow, esto de usar Canvas es totalmente nuevo para mí, impresionante todo lo que se puede hacer. GRacias.

Ojo cuando escriban el “let imagenDeCapipepo = new Image()”, asegúrense de que el “Image()” tenga la “I” en Mayuscula, vi que a varios les paso y esto me incluye a mi, gracias a los comentarios de mis compañeros me ahorre horas de buscar y ahi si pudo aparecer el Capipepo en el Canvas

canvas --> espacio rectangular
nombre.fillrect() --> crea rectangulo en canvas
nombre.drawimage() --> inserta una imagen en canvas

Que tremendo curso! super genial, salir con bases de todo.

Se debería de llamar el en vez de basico a avanzado el curso

Buenas tardes tenía el siguiente error Uncaught TypeError: Cannot read properties of null (reading ‘style’)
at iniciarJuego , el motivo era por que existia un espacio luego de las comillas en el html del id OJO con eso saludos

el tema camvas se ve muy interesante.

La primera clase con la profesora Estefany se ve interesante, pero sería de buen ver, una introducción más grafica del resultado que se espera al finalizar la sesión, esto es para no quedarnos con lo explicado por los Coach, sino para irnos dando una idea de cómo el estudiante, dinámicamente podría crear un mapa mental o un ‘TODO LIST’ de cómo abordar el tema, y que la clase se vuelva la guía…

Lo comento como sugerencia no solo para la Coach Estefany, sino para todos los cursos que he seguido hasta ahora.

Como que con el avance del curso voy concluyendo que me siento mejor en el backend

Dure un buen rato buscando el error de mi codigo que no servia, era una I mayuscula en image();

Con que hacen las presentaciones

Literal, si no aparece la imagen, lo mejor es copiarlo del codigo que aparece, algo hace que si lo digito no me funciona, muy extraño

        let imageDogEvil = new Image()
        imageDogEvil.src = dogEvil.photo
        lienzo.drawImage(
            imageDogEvil,
            20,
            40,
            100,
            100
        )   

Nunca había visto a profundidad lo que es canvas…con esta introducción y por lo que he logrado ver que se puede lograr con canvas…ufff estoy emocionadísimo.

💪 Canvas como la etiqueta en HTML que nos permite introducir un área donde dibujar

Es interesante la forma que se usa mapas en html con el codigo “canvas”. Habia escuchado de eso pero nunca lo habia implementado en una pagina HTML. Definitivamente en el campo laboral hay un monton de sorpresas. A seguir aprendiendo.

Vamos subiendo del nivel, paso a paso. Ya estamos aprendiendo a dibujar en JavaScript 💚

necesito ayuda con este proyecto.

SÍ:
.mapa {
border: 2px solid black;
}

NO:
#mapa {
border: 2px solid black;
}

con el punto si aparece el cuadro y con el hashtag no me aparecía.

**Ayuda, me aparece este error en la consola. **

![foto2…jpg]

(https://static.platzi.com/media/user_upload/foto2.-b527db0d-2209-4ff0-a056-f39546b88b22.jpg)

Así esta mi código:

excelente clase.

Lo que mas me esta gustando de las clases en Platzi , es que me estan haciendo recordar todo nuevamente lo de java,
Estan avanzando rapido , falta mas explicacion , pero yo con conocimientos previos se me facilita entender mejor , nose si a todos se les facilita


Despues de hacer el canvas me aparece asi, pero no me muestra ningun eror en “Console”, no se que tendre mal, si alguien pudiera ayudarme por favor.

buenas eramientas

Muy buena clase, fue simplificada y fácil de entender; no me parece que canvas sea muy complicado (hasta ahora jaja). estoy emocionado de ver lo que nos deparan las otras clases al respecto y el potencial de canvas ♥ Mucho éxito a tod@s :)
Ayuda, el título y el canvas no me aparecen 😿😿😿