Fundamentos de Programaci贸n

1

Bienvenida a Platzi: 驴qu茅 necesitas para tomar el curso?

2

驴C贸mo aprender programaci贸n?

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

Manipulaci贸n del DOM

21/84
Recursos

Aportes 208

Preguntas 84

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Excelente la actitud del profe, explica muy bien, me gustan las onomatopeyas XD

Es impresionante el proyecto que se crear谩 en el curso y totalmente gratis, muy orgulloso de Platzi

RESUMEN

Para alterar el texto que tenemos en nuestro HTML (o manipular el DOM como se dice t茅cnicamente), se puede usar innerHTML.

Con la etiqueta <span id=""> en el html, indicamos que este texto va a ser manipulado din谩micamente, asi que obtenemos su id como hemos hecho en clases anteriores y guardamos el elemento en una variable, asi esta variable la podemos editar y reemplazar por el texto que queramos.

El profe Mike Wheeler es muy entretenido, muchas gracias Platzi!

Juan hace amar JavaScript, ese amor por ense帽ar se necesita en todos lados, as铆 habr铆a excelentes profesionales en todas las 谩reas.

Volviendo a Platzi despu茅s de mucho tiempo 馃挭馃徏

Adoro estas clases online donde puedo repetir toda la clase y el profesor no se cansa xd

Asi como pueden usar .innerHTML tambien pueden usar .textContent e .innerText

馃搶Metodo para manipulaci贸n de DOM (JS)
.
Podemos cambiar el contenido html con javascript, hay varios metodos pero vamos a ver el Element.innerHTML
Primero, meter el contenido html dentro de la etiqueta span: <span> </span>
.
Definici贸n: (span - abarcar) Es un contenedor en l铆nea. Sirve para aplicar estilo al texto o agrupar elementos en l铆nea.
Sus etiquetas son: <span> y </span> (ambas obligatorias).
Est谩 definido como: Elemento especial, y por lo tanto en l铆nea.
Crea una caja: En l铆nea.
Puede contener: Texto, y/o Elementos en l铆nea.
馃搷 Para saber sus atributos, leer esta fuente: https://developer.mozilla.org/es/docs/Web/HTML/Element/span
.
Una vez todo el contenido html (palabra o frase) que queremos din谩micamente cambiar con javascript est谩 dentro de la etiqueta span y tiene su atributo ID, vamos al c贸digo de javascript:
Llamamos ese ID con un document.getElementById(" 鈥) y lo ponemos dentro de una variable.
Y podemos modificar su contenido as铆:
.
let variableX = document.getElementById(鈥 ")
variableX.innerHTML = " "
.
Espero y les sirva de algo 馃挌

Muy buena clase, la verdad estoy aprendiendo mucho y el animo del profe es una genialidad. Transmite esas ganas de aprender

Apenas estoy iniciando el mundo de la programaci贸n y me hace feliz encontrar este tipo de profesores, me hacen sentir que lo estoy logrando y puedo llegar mucho m谩s all谩, me contagia su emoci贸n 馃榿

隆Que nivel de profesor! Motivado directo a la siguiente clase.

As铆 quedo, reutilice las variables que teniamos declaradas y con el metodo id se obtiene el nombre de cada mascota.

Hello Students, Hi Juanchooo Tom茅 la decisi贸n de dejar las alertas y adicionar el <span> tambi茅n dentro de m铆 " _if _ ".

La programaci贸n se debe hacer con humor y paciencia, considero que las alertas dan esa milla extra y hace m谩s happy el juego de Mokepon. Espero os guste 馃槂

sinceramente es lo mas duro a lo que me he enfrentado en mi vida pero que buen profe gracias de a poquito ahi vamos con fe

El audio sigue bajo, no es problema de tus bocinas/audifonos

Esta fue la manera en que lo hice.

function seleccionarMascotaJugador() {
    let spanMascotaJugador = document.getElementById("mascota-jugador")


     if(document.getElementById("hipodoge").checked){
         alert("seleccionaste a Hipodoge")
         spanMascotaJugador.innerHTML = "Hipodoge"
     }else if (document.getElementById("capipego").checked){
         alert("seleccionaste a capipego")
         spanMascotaJugador.innerHTML = "capipego"
     }else if (document.getElementById("ratigueya").checked){
         alert("seleccionaste a ratigueya")
         spanMascotaJugador.innerHTML = "ratigueya"
     }else{
         alert("SELECCIONA UNA MASCOTA")
     }

DIFERENCIA DE INNERHTML E INNERTEXT

-Con innerHTML se puede agregar etiquetas dentro de la etiqueta seleccionada, incluso si no est谩n espec铆ficamente escritas en el c贸digo HTML.

-Con innerText solo se puede agregar una cadena de texto, incluso si agregas etiquetas, se mostraran como texto en el navegador.

A veces tardo hasta 4 horas en empezar a ver los videos de algo que en efecto es simple y bien explicado porqu茅 cuando estaba en la universidad cursando Ciencias de la Computaci贸n, estos temas se consideraban triviales cuando no lo son, por lo que mi percepci贸n se volvi贸 en mi contra, haciendom茅 sentir un impostor cuando no sab铆a algo que nunca me ense帽aron

y POOOM me qued贸 claro! 馃敟

Hasta ahorita se me ocurrio ir subiendo todo mi proyecto a un repositorio de Github.

隆Excelente profesor!

Alguien aprendiendo en 2023?

Esta clase vale ORO!

Lo m谩s lindo que encuentro en este poco recorrido de la programaci贸n es la infinidad de formas para llegar a un mismo resultado, eso nos lleva a pensar y tratar de solucionar problemas cotidianos con lo que aprendemos. Excelente la actitud del profe.

Excelente profesor, realmente una gran din谩mica 馃憦馃憦馃憦

脡sta clase cost贸, pero se siente genial ver que de a poco va progresando!

Excelente la forma en que el profe Juan da las clases, que bien Platzi. Tienen buen equipo

A alguien m谩s le sucede que piensa tener mal el c贸digo pero realmente est谩 bien con la diferencia que se distrajeron y esperaban un resultado diferente?

A mi me gusta nombrar a las variables de forma grupal para mantener un orden, en lugar de una por una y me queda as铆:

Me agrada este profesor explica las cosas con el alma y eso me inspira a llegar mas all谩 en la programaci贸n 馃槃

innerText: muestra el texto literalmente como est谩 en el c贸digo.

innerHTML: aplica lo desarrollado a los elementos

Mi codigo

<code> 
iniciarJuego = () => 
{
   let buttonMascotas = document.getElementById("seleccionarMascota");
   buttonMascotas.addEventListener("click",seleccionMascotas); 
}

seleccionMascotas = () => 
{
   // querySelectorAll genera un nodelist con todos los elementos similares 
   let nodelist = document.querySelectorAll("#seleccionar-mascota input");
   let inputMascotas = [].slice.call(nodelist);
   let nombresMascotas = ["Hipodoge","Capipepo","Ratigueya"];
   let spanMascotaJugador = document.getElementById("mascota-jugador");

   //forEach es el metodo de recorrer un arreglo.
   inputMascotas.forEach((valor, indice) => 
   {
      console.log(valor);
      console.log(indice);
      if(valor.checked)
      {  
         spanMascotaJugador.innerHTML= ` ${nombresMascotas[indice]}`;
      }
   })
}
window.addEventListener("load", iniciarJuego)


Elecci贸n aleatoria para 茅l oponente

function elJugadorEligio(){
	hipodoge = 1
	capipepo = 2
	ratigueya = 3
	hipocapigueya = aleatorio(3, 1)
	//JUGADOR ELIGE
	if (mascota1.checked){
		mascotaJugador.innerHTML = "Hipodoge"
	} else if (mascota2.checked){
		mascotaJugador.innerHTML = "Capipepo"
	} else if (mascota3.checked){
		mascotaJugador.innerHTML = "Ratigueya"
	} else{
		alert("Debes elegir a una mascota")
	}
	//OPONENTE ELIGE
	if (hipocapigueya == hipodoge){
		mascotaOponente.innerHTML = "Hipodoge"
	} else if (hipocapigueya == capipepo){
		mascotaOponente.innerHTML = "Capipepo"
	} else if (hipocapigueya == ratigueya){
		mascotaOponente.innerHTML = "Ratigueya"
	}
}
function aleatorio(max, min){
	return Math.floor(Math.random() * (max - min + 1) + min)
}
let hipodoge = 0
let capipepo = 0
let ratigueya = 0
let hipocapigueya = 0
let eleccionJugador = document.getElementById("eleccion-jugador").addEventListener("click", elJugadorEligio)
//mascota1 es hipodoge, mascota2 es capipepo, mascota3 es ratigueya
let mascota1 = document.getElementById("hipodoge")
let mascota2 = document.getElementById("capipepo")
let mascota3 = document.getElementById("ratigueya")
//nombre de la mascota elegida
let mascotaJugador = document.getElementById("mascota-jugador")
let mascotaOponente = document.getElementById("mascota-oponente")

Asi me quedo hasta el momento:

<code> 
function iniciarJuego(){
    let botonMascotaJugador = document.getElementById("boton-mascota");
    botonMascotaJugador.addEventListener("click", seleccionarMascotaJugador);
}

function seleccionarMascotaJugador(){
    let inputHipodoge = document.getElementById("hipodoge")
    let inputCapipepo = document.getElementById("capipepo")
    let inputRatigueya = document.getElementById("ratigueya")
    let mascotaAliada = ""

    if(inputHipodoge.checked){
       mascotaAliada = "Hipodogue"
    } else if(inputCapipepo.checked){
       mascotaAliada = "Capipepo"
    } else if(inputRatigueya.checked){
       mascotaAliada = "Ratigueya"
    } else {
        mascotaAliada = "nadie"
    }

    document.getElementById("nombreJugador").innerHTML= mascotaAliada
    alert("Seleccionaste a " + mascotaAliada)
}


window.addEventListener("load", iniciarJuego)

Excelente clase muy divertida馃槃

Este curso es genial! Nunca habia informado sobre este campo, es nuevo para mi, por momentos me trabo porque no entiendo algo, o porque algo no me sale y no logro ver el error, pero es gratificante cuando logras solucionarlo por tu propia cuenta poco a poco. Los profes son geniales y hacen que quiera seguir viendo las clases 隆Gracias por crear este curso!

un aporte, cuando se use input radio es mejor utilizarlo de la manera que se ha visto siempre , como aparece en este cuadro con el punto para seleccionar antes de la opcion. es menos enredado

BOOOOMM!! que emocionan jajajaja, Juan es muy divertido.

cool

Explica tan bien que todos los conceptos que ha aplicado los he ido aplicando a la p谩gina de ingreso de mi idea de negocio jaja

Muy bueno la clase 馃挭馃徏

隆隆La personalidad y ense帽anzas del profe Juan es simplemente incre铆ble!! 鉂

隆隆MUy buena explicaci贸n!! A seguir pr谩cticando.

que bueno que ya estemos incorporando nuevas tecnicas con JS馃榿

Me encantan las clases de profe Juan David, estoy aprendiendo a Tope!

Debo admitir que esta lecci贸n ha sido algo dif铆cil para m铆, la funci贸n innerHTML se me hizo muy abstracta y he regresado mil veces al video, a los apuntes y a la documentaci贸n. Creo que ya m谩s o menos )馃槮

Extra帽o a Freddy pero el nuevo profe es un capo! Todavia no terminan las clases con el y ya lo extra帽o ajjajaj馃槩

que buen proyecto, siento que estoy aprendiendo en modo flash 鉂わ笍

definitivamente la manera de explicar del profe es sensacional, paciente, explicativo鈥ue se yo, me gusta que se le entiende muy bien!

magnifica manera de enganche para un curso

Excelente, seguimos avanzando

function confirmarSeleccionJugador1() {
    let seleccionAjolote = document.getElementById('ajolote')
    let seleccionTopo = document.getElementById('topo')
    let seleccionHormigaDeFuego = document.getElementById('hormigadefuego')
    let seleccionKomodo = document.getElementById('komodo')
    let seleccionTortuga = document.getElementById('tortuga')
    let seleccionCaballoDeMar = document.getElementById('caballodemar')
    let spanMokeponJugador1 = document.getElementById('mokepon-jugador1')


    if(seleccionAjolote.checked) {
        alert('Has seleccionado al ajolote')
        spanMokeponJugador1.innerHTML = 'AJOLOTE'
    } else if(seleccionTopo.checked) {
        alert('Has seleccionado al topo')
        spanMokeponJugador1.innerHTML = 'TOPO'
    } else if(seleccionHormigaDeFuego.checked) {
        alert('Has seleccionado a la Hormiga de fuego')
        spanMokeponJugador1.innerHTML = 'HORMIGA DE FUEGO'
    } else if(seleccionKomodo.checked) {
        alert('Has seleccionado al Drag贸n de Komodo')
        spanMokeponJugador1.innerHTML = 'DRAGON DE KOMODO'
    } else if(seleccionTortuga.checked) {
        alert('Has seleccionado a la tortuga')
        spanMokeponJugador1.innerHTML = 'TORTUGA'
    } else if(seleccionCaballoDeMar.checked) {
        alert('Has seleccionado al Caballo de mar')
        spanMokeponJugador1.innerHTML = 'CABALLO DE MAR'
    } else {
        alert('Por favor, elige un Mokepon')
    }

馃槀Es impresionante el proyecto que se crear谩 en el curso y totalmente gratis馃槀

Juan es un excelente profesor, me hizo volver a amar el mundo de la programaci贸n 鉂

saben por que me aparece esto?

Increible,me identifique totalmente con Juan en este clase. Nunca perdiendo la emocion hasta el ultimo momento馃槀

y pooom !!! jajajaa

hola Juan me gusta tu stylo, Soy muy novato pero voy exageradamente motivado.馃槑

no pudodo hacer que salga el nombre con los vidas
馃槮

Estuve una hora pregunt谩ndome por qu茅 no funcionaba y escrib铆

'mascota-jugadpr'

en vez de

'mascota-jugador'

A MESSIRVE

El profe, me motiva a seguir estudiando programaci贸n, con su actitud tan positiva. 馃挌

Super el profe Juan David, se te comprende muy bien! Gracias

Qu茅 honda banda soy nuevo aqu铆 lo que entend铆 te lo resumo y ser谩 mi aporte
te explicar茅 como manipular 茅l dom
antes de todo tienes que saber que todo lo que est谩 aqu铆 adentro del HTML <span></span> puede cambiar.

Entonces piensa si lo que est谩 ah铆 dentro puede cambiar, nosotros podemos manipular eso en JavaScript.
驴Pero c贸mo?
primero s铆 tenemos varios <span></span> en el HTML tenemos que darle un, id a cada uno para saber a cu谩l de todos llamar en JavaScript
ejemplo:

<span id=鈥渕ascota-jugador鈥></span>

esto dentro de un p谩rrafo

<p>Tu mascota <span id=鈥渕ascota-jugador鈥></span> tiene <span>3</span> vidas</p>

ahora que le pusimos un, id dentro de <span></span>
sabremos como llamarlo desde JavaScript,
As铆 que creamos una function en JavaScript en la cual llamaremos al con el
<span id=鈥渕ascota-jugador鈥></span>
con

document.getElementById(鈥渕ascota-jugador鈥)

pero todo esto tiene que ir dentro de una function
ejemplo:

function seleccionarMascotaJugador() {

let spanMascotaJugador = document.getElementById(鈥渕ascota-jugador鈥)

listo ya casi terminamos, solo nos falta una cosa para que todo funcione, hacer que el nombre cambie, seg煤n a la mascota que elija el jugador
sabemos que este codigo

if(inputAguita.checked){
alert(鈥渢u mascota sera aguita 馃挧鈥)
nos manda una alerta seg煤n la mascota elegida pero no cambia el dom
As铆 que podemos cambiar ese

alert(鈥渢u mascota sera aguita 馃挧鈥)

con un innerHTML esta es una funci贸n que sirve para cambiar el texto por cualquier otro que t煤 quieras pero dedemos elegir a que <span></span> le cambiara el texto por eso es muy importante ponerle un, id
como nosotros ya hicimos todo el proceso para llamar al span,

let spanMascotaJugador = document.getElementById(鈥渕ascota-jugador鈥)
ahora solo tenemos que cambiar el texto que lleva dentro con un innerHTML

ejemplo:

spanMascotaJugador.innerHTML = 鈥渁guita 馃挧鈥

Y listo aprendiste una de las formas de manipular el dom .
Dime si te sirvi贸鈥 jajaj la verdad es que soy nuevo programando

Us茅 la funci贸n que retorna un entero aleatorio para asignar la mascota enemiga de forma aleatoria usando un n煤mero entre 0 y la longitud de 鈥榓rreglo鈥 de nodos. Solo se asigna si la mascota est谩 chequeado.

Es increible la forma en que se esta usando la manipulacion del DOM usando el codigo de 鈥渟pan鈥 declarado en el html. Espero con ansias la siguiente clase. Estoy listo para seguir recordando y aprendiendo.

De momento as铆 va mi c贸digo pero en ingl茅s (as铆 practico ambas).

function startGame(){
    let selectPet = document.getElementById("select_pet")
    selectPet.addEventListener("click", selectPetPlayer)
}


function selectPetPlayer() {
    let inputHipodoge = document.getElementById("hipodoge")
    let inputCapipepo = document.getElementById("capipepo")
    let inputRatigueya = document.getElementById("ratigueya")
    let inputLangostelvis = document.getElementById("langostelvis")
    let inputLucapalma = document.getElementById("lucapalma")
    let inputPydos = document.getElementById("pydos")

    let spanPlayerPet = document.getElementById("name_player_pet")

    if (inputHipodoge.checked) {
        spanPlayerPet.innerHTML = "Hipodoge"
    } else if (inputCapipepo.checked) {
        spanPlayerPet.innerHTML = "Capipepo"
    } else if (inputRatigueya.checked) {
        spanPlayerPet.innerHTML = "Ratigueya"
    } else if (inputLangostelvis.checked) {
        spanPlayerPet.innerHTML = "Langostelvis"
    } else if (inputLucapalma.checked) {
        spanPlayerPet.innerHTML = "Lucaplma"
    } else if (inputPydos.checked) {
        spanPlayerPet.innerHTML = "Pydos"
    } else{
        alert("Choose your pet")
    }
}

window.addEventListener("load", startGame)

Exelente la explicacion profe, felicidades a platzi鈥

Gracias profe Juan David Castro, muy buena explicacion

innerHTML !
Info aqu铆!

Documentaci贸n explicaci贸n

Hace mucho hab铆a hecho un curso de html y javascript y estoy haciendo este para refrescar conocimientos y es excelente la forma de los profes de ense帽ar y transmitir los conocimientos!, me encant贸

muy buena la clase !!! mas mas mas

me encanta esto hahahahahaha ojala aprenda r谩pido

Super did谩ctico, excelente actitud y muy claro ; se aprende mucho

馃搶 Con JS se puede manipular el contenido del HTML generando a煤n m谩s interactividad

Eres incre铆ble, me gusta mucho c贸mo ense帽as鈥

Te felicito Juan, tus clases son muy estimulantes, tus explicaciones clarisimas, saludos desde Argentina

me gusta el dinamismo del profe esta uno muy atento a la clase 馃槈

El profe Juan si esta en su salsa, se siente como transmite alegria al ense帽ar estos temas, lo felicito y es facil entender con esa actidud, gracias.

Grande profe!!

Con <span></span> podemos poner el nombre que queramos dentro de un parrafao. Pero debe tener un <span id="mascota-jugador"></span>

Para hacerlo primero tenemos que asignar el Id de nuestro span a una variable:

let spanMascotaJugador = document.getElementById('mascota-jugador')

Ahora tenemos que asignale un valor nuevo y que este se escriba en el HTML

spanMascotaJugador.innerHTML = 'Hipodoge'

Jajaja 隆隆Poooom!!

Me gusto mucho la participaci贸n del profe en Dune. :3

Profe tienes un gran talento para ense帽ar 馃憣

Todo es cuestion de practicar y praticar para que se te quede grabada la infomacion. Tambien ayuda bastante colocando notas para saber porque hiciste tal cosa.

Estoy aprendiendo a mil con Platzi. El profesor Juan transmite esa emoci贸n por la programaci贸n que quiera seguir aprendiendo.

En VSCode para agilizar la escritura cuando vas a asignar un 鈥渋d鈥 dentro de por ejemplo el 鈥渟pan鈥 lo podes automatizar escribiendo # entre medio, por ejemplo:
span#mascota-jugador te queda <span id=鈥渕ascota-jugador鈥></span>

@Juan David Castro Gallego que gran profesor eres. Muchas gracias por tu motivaci贸n. Ha sido excelente este curso!

Excelente clase y forma de explicar!

Con Bootstrap se me olvidaron muchos fundamentos y el por que me gusta maquetar ahora con este curso lo record茅 ! aparte bootsrap no he tenido experiencias 100% efectivas para el maquetado.

innerHTML una propiedad para manipular el DOM

Buenos d铆as desde Espa帽a, me encanta las clases del profesor Juan David son muy amenas y agradables me motiva a no parar de aprender.

Excelente Profe

Excelente la manera en la que ense帽as, en dos dias he aprendido mas de javascript aca que de lo que he estado aprendiendo en dos meses鈥 Gracias

despues de meter lo aleatorio me dejo de andar todo
Dejo este "humilde" comentario para decirte que no te rindas, eres el MEJOR!!
tengo partido a las tres estoy en el 29 de noviembre del 2023 son las 2:30