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

Adquiere por un año todos los cursos, escuelas y certificados por un precio especial.

Antes: $249

Currency
$219/año

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comprar ahora

Termina en:

0D
23H
9M
57S

Una sola fuente de la verdad

52/84
Recursos

A lo largo del código fuente de un proyecto, puede haber información “hardcodeada” que cause dificultades en el futuro de la aplicación para que el proyecto siga creciendo.

Qué es el código hardcore

El término “hardcore”, o cuando hablamos de “código hardcodeado”, significa escribir directamente en el código fuente información propia para el funcionamiento de un proyecto.

Por ejemplo, si tenemos una contraseña para acceder a algún servicio externo. No es una buena práctica harcodear la contraseña en una variable.

const password = '12345';

Ya que, además de ser inseguro, la misma puede cambiar con el tiempo.

Si tienes una determinada cantidad de información, de mokepones en tu videojuego, procura pensar en la escalabilidad de tu proyecto. Siempre piensa en qué pasaría si tuvieras miles de mokepones o si alguno de ellos cambia de nombre.

Hasta este punto del desarrollo del videojuego, es un buen ejercicio que repases todo el código que has escrito y que hagas un esfuerzo por buscar mejorarlo o por identificar información hardcodeada que puede causar problemas con el tiempo.


Contribución creada por: Kevin Fiorentino (Platzi Contributor)

Aportes 57

Preguntas 26

Ordenar por:

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

o inicia sesión.

Este curso esta en otro nivel. Cada vez entiendo mas la progrmación y quiero dedicarle mas tiempo a estudiar.💚💚💚

Sinceramente Platzi, os habéis paseado con este curso 💃🏽🙏🏼❤️

Te dejo un buen recurso donde puedes ahonda más en el tema de Una sola fuente de verdad

single source of truth Lo único malo que no hay una versión en español

En resumen:
Todas las funciones que tengan información “a mano” que nosotros ponemos, la vamos a retirar, para poner sólo la información que existe en los objetos, es decir Usar una sola fuente de verdad.

Información “a mano”:

spanMascotaJugador.innerHTML = 'Capipepo'

haciendo uso de una Fuente de verdad:

spanMascotaJugador.innerHTML = inputHipodoge.id

Por cierto, es posible evitarse la validación con if si se declara la mascota del jugador más o menos así:

let mJugador = eval(document.querySelector('input[name="mascota"]:checked').id)

Siempre que el input esté así:

<input type="radio" name="mascota" id="hipodoge">

Este curso es tan bueno (Y GRATIS) que no entiendo cómo mucha gente no aprende a programar🤯.

Una fuente de verdad es que Platzi es la mejor inversión que harás.
Este valor se repetirá sin importar el día, mes o año en el que lo quieras ocupar


yo he creado una pequeña funcion la cual dependiendo el caso sustituye el span por la imagen correspondiente

Una sola fuente de verdad se refiere a:

  • Tener en una sola variable la información que se usará repetidamente en el programa (en este caso el nombre del mokepón), y no agregar esa información directamente en el código (harcodear)

Me encanta!!!, Amo platzi, amo a los profes, amo a Cheems y te amo a ti.

Uno va dejando un poco el miedo a un lado, cada vez el gusto por aprender programación es mayor. 😄

Pensé que lo haría con Hipodoge.nombre.

Siempre me han gustado estos temas de poder automatizar o parametrizar todo lo que uno crea. Esa fue una de las razones por las que me animé a estudiar programación.

en vez de colocar el nombre de la mascota, coloque la imagen de la mascota.

function seleccionarMascotaJugador(){

if(inputMascota1.checked){
    mascotaJugador = inputMascota1.id
    muestraMascotaJuagador()
} else if(inputMascota2.checked){
    mascotaJugador = inputMascota2.id
    muestraMascotaJuagador()
} else if(inputMascota3.checked){
    mascotaJugador = inputMascota3.id
    muestraMascotaJuagador()
} else {
    alert('Debe Seleccionar una Mascota')
}
sectionSeleccionarAtaque.style.display = ''
sectionSeleccionarMascota.style.display = 'none'

seleccionarMascotaEnemigo()

}

function muestraMascotaJuagador(){
mokemones.forEach((mokemon) => {
if(mascotaJugador == mokemon.nombre){
document.getElementById(“imagen-mostro-ataque-jugador”).innerHTML=<img class="imagen-mostro-ataque" src="${mokemon.imagen}" alt="${mokemon.nombre}" />;
}
})
}

function seleccionarMascotaEnemigo(){
mascotaEnemigo = aleatorio(1, 3)
mokemones.forEach((mokemon) => {
console.log(mascotaEnemigo + ’ ’ + mokemon.apodo)
if(mascotaEnemigo == mokemon.apodo){
console.log(‘paso’)
document.getElementById(“imagen-mostro-ataque-enemigo”).innerHTML=<img class="imagen-mostro-ataque" src="${mokemon.imagen}" alt="${mokemon.nombre}" />;
}
})

}

mokeponooooooo

Tu sabes cuantos años de flow tú tienes que acumular para llegar aquí,muchos 😜🤘🏻🦁😏

Es interesante la verdad la forma en que estos valores son usados. Su logica es algo parecido a lo que uso Flutter, jamas imagiene que algunas reglas de logica sean las mismas. Quede impresionado.

En mi caso los input me aparecen como “null”, ya he revisado el código un montón de veces y el del profesor pero no he logrado dar con el problema

const sectionSeleccionAtaque = document.getElementById("seleccionaAtaque") 
const spanMascotaJugador = document.getElementById("mascota-jugador")```


function seleccionarMascotaJugador() {
    
    sectionSeleccionarMascota.style.display = 'none'
    sectionSeleccionAtaque.style.display = 'flex'
    
    if (inputHipodoge.checked) {
        spanMascotaJugador.innerHTML = inputHipodoge.id
    } else if (inputCapipepo.checked) {
        spanMascotaJugador.innerHTML = inputCapipepo.id
    } else if (inputRatigueya.checked) {
        spanMascotaJugador.innerHTML = inputRatigueya.id
    } else {
        alert('Selecciona una mascota')
    }

    seleccionarMascotaEnemigo()
}

El método:

typeof (AquiElElementoQueSeQuiere
Consultar) nos sirve para saber que tipo de elemento es
ya sea: objet, class, array, etc.

A mi me quedo asi la funcion

function seleccionarMascotaJugador () {
    seccionMascota.style.display = 'none';
    seccionAtaques.style.display = 'flex';

    let selected = document.querySelector('input[name="mascota"]:checked');
    if (selected === null) {
        location.reload();
        alert('no seleccionaste nada');
    }
    mascotaJugador = selected.id;
    spanMascotaJugador.innerHTML = mascotaJugador;
    buttonMasconta.disabled = true;
    ramdonMascota();
    inputMascotaEnemigo.innerHTML = mascontaEnemiga;

    insertarImagenMokepon( mascotaJugador);
}

Siempre me quedo con las ganas de ponerle “Like” o “Me encanta” a cada clase

Este curso está excelente. se aprende bastante.

Si por alguna razón, hiciste todo bien pero las imágenes iniciales desaparecieron, revisa si dejaste alguna de las comillas cuando cambiaste el link del archivo de las fotos iniciales por ${mokepon.foto}. Me tomó varias horas ver que lo había dejado así <img src="${mokepon.foto}.

Averiguar que tipo de elemento una variable

nesecito ayudaaaaaa

Una sola fuente de la verdad es la información que tenemos ne nuestros objetos. Todas las function que tengan información a mano (Hardcoded) deberíamos retirarla.

  • typeof() que tipo de elemento es lo que se le coloca
  • Lo que veo es que al colocar la variable que recorre el array con forEach de la clase Mokepon, las variables pasan hacer objetos, y asi exraer información de ellos.
  • entonces para llegar al método del objeto seria con el “.”

Gracias por la clase. Corta pero eficaz.

En el anterior video comente que se me ocurrio una solución para el inputHipodoge = document.get…, con la funcion eval(), pero no tome en cuenta que al hacer los inputHipodoge.checked tambien podia resumir ese codigo, a un for anidado con if, no soy muhco de explicar, así que espero entiendan el codigo.

function seleccionarMascotaJugador() {
    for (let i = 0; i < mokepones.length; i++) {
        if (eval(`input${mokepones[i].nombre}.checked`)) {
            spanMascotaJugador.innerHTML = mokepones[i].nombre
            sectionSeleccionarAtaque.style.display = 'flex'
            sectionSeleccionarMascota.style.display = 'none'

            seleccionarMascotaEnemigo()
            break;
        } else if (i == (mokepones.length - 1)){
            alert('Selecciona una mascota')
        }
    }
}

Ya que creamos estos elementos desde JS y los rellenamos con informacion de nuestros objetos, aprovecharemos esto por que cada uno de nuestros elementos es un objeto, por lo tanto podemos acceder a las propiedades de esto a traves de la notacion de punto.

Platzi es morado XD

UNDEFINED
si tienes problemas con el nombre del personaje que deberia mostrarse al utilizar este nuevo sistema llamando al nombre usando el id del objeto, revisa el nombre del la variable en la seccion donde se trabaja eso. En mi caso la variable global ( de las que se colocan al principio de todo el codigo en JavaScript), que me servia para los nombre de los MOKEPONES, tenian el mismo nombre que las que estaban dentro de la funcion de elegir al personaje, por tanto se sobreescribia el contenido y daba el error UNDEFINED.
ej:
variable global ----> inputsubzero
variable de la funcion seleccionar personaje —> inputsubzero

Resultado: UNDEFINED

para corregirlo solo le agregue otra paralabra a la variable que uso en la seccion de elegir el personaje y se soluciono

si no lo entindes a la primera lectura, trata de ir comparando cada parte de lo que lees aqui con tu codigo, y te iras ilustrando. Pero tambien me puedes preguntar para mas detalles.

de aqui salgo atrabajr, el mejor curso junto a el otro de programcion

cada clase es algo nuevo, excelente

Harcode: codificación en la que los valores son escritos directamente en el código fuente del programa en lugar de
de ser definidos como variable o constante.

Mis apuntes de esta clase:

METODOS

typeof -> Que tipo de elemento es mi variable

FUENTE DE VERDAD
Utilizar la info de nuestros objetos: los input están ligados a la info de html que pusimos con javascript

Reemplazar la variable que se esta validando a mano y la reemplazamos con la id de ese elemento para que sea dinámico:

if (inputHipodoge.checked) {
	spanMascotaJugador.innerHTML = inputHipodoge.id
} else if (inputCapipepo.checked) {
	spanMascotaJugador.innerHTML = inputCapipepo.id
} else if (inputRatigueya.checked) {
	spanMascotaJugador.innerHTML = inputRatigueya.id
} else {
	alert('Selecciona una mascota')
}

Hola a todas, vego a decirles que investigué cómo poder reducir el código de seleccionarMascotaJugador

function selectPet() {
  var radios = document.getElementsByName("avatar");
  for (var radio of radios) {
    if (radio.checked) {
      spanPetPlayer.innerHTML = radio.id;
      puchamones.forEach((puchamon) => {
        if (puchamon.name == radio.id) {
          imgPet.src = puchamon.img;
        }
      });
      selectPetEnemy();
    }
  }
}

Guardo todos los inputs radio dentro de una variable llamada radios, buscandolos por el nombre
avatar: es el nombre que tienen los inputs radio
lo recorro todo con un forEach y busco el que esté seleccionado, cuando lo encuentro, mediante la propiedad del objeto que cree le asigno el id, que contiene el nombre de la mascota, lo mismo sucede con el resto del código, pero es para asignar la imagen correspondiente

Si esta no es de la mejores clases de todo el curso, no se que lo sea, que increible Diego como profesor

La info que va cambiando repentinamente o con el tiempo debe ser manejada a través de Javascript y estructurada con HTML (Con js puedes también manejar y manipular el DOM, por lo tanto sirve también). El beneficio es que el proyecto se vuelve escalable y eficaz en el largo plazo.

Sin embargo, habrá información que es mejor escribirla directamente

Con eso no habria que hacer muchos cambios al agregar un nuevo personaje. La verdad esta genial 😃

Cada vez entiendo el flujo de los datos con facilidad!

Una fuente de verdad es tener una sola variable que me va a dar información que se va a utilizar repetidamente en todo el programa, de tal manera que los cambios que se realicen se harán de forma dinámica y no manual.

aqui mi versión de colocar la imagen de la mascota del jugador

    let maxNumberArrayPets = mokepones.length;

    // loop al array

    if (maxNumberArrayPets > 0) {
        for (let inc = 0; inc < maxNumberArrayPets; inc++) {

            let pets_input = pets_array[inc];

            if (pets_array[inc].checked) {

                gvimagegamer.setAttribute("src", mokepones[inc].photo)

                gamerChoice = inc;
                petsInputTitle = pets_input.title;

                break;
            }
        }

    } 

📌 Lo de una sola fuente de verdad lo entiendo como ligar un valor hacia una única variable, parece ser que no es exactamente así, pero me ayuda a comprenderlo

es bastante difícil para una persona que empieza como yo realizar estos cambios, es prácticamente restructurar todo lo ya echo.

Dios mío… Programar siendo disléxico es terrible

Diego diciendo… Vamos al Navegador y ya todo funciona como esperamos…
Mi navegador

no mi ciela

-_-

Wuuooou cada vez me voy sintiendo con mas seguridad y potencial para que mis proyectos queden mejor

Este curso ofrece una perspectiva muy aplia de lo que es la programación y todo lo que puedes hacer con ella, es alucinante.

Aportar imagen al resultado:

else if (inputCapipepo.checked) {
        spanMascotaJugador.innerHTML = inputCapipepo.id
        imagenJugador.innerHTML = `<img src=${capipepo.foto} alt=${capipepo.nombre}>`
        inputCapipepo.checked = false

algunos datos se borran otros se agregan ahí cuando uno se pierde pero ay que prestar mucha atención

“Una sola fuente de la verdad” 👀

Es normal sonreír cada vez que entiendes algo nuevo o solo soy yo?
Que maravilla que es la programación y lo mucho que puede facilitar las cosas (para el cliente, a nosotros nos desarma el cerebro)

<code> 

Este curso es geniall, me encanta esto de las clases!!

Anteriormente llamaba la mascota del jugador y del enemigo en la segunda pantalla para escoger el ataque, como el código cambió por el tema de optimización, no sabia como llamarlo, así que decidí crear una funcion para obtener la imagen/foto del jugador y del enemigo.

Les muestro la implementación y el uso cuando la llamo para traer la información correspondiente:

El nombre de este concepto “Una sola fuente de la verdad” es muy épico. 💪🌿

la fuente de verdad es el ciclo for donde están todos los elementos iterados que necesitamos para hacer las comparaciones.

Tambie se pudo realizar el mismo bloque de codigo que se utilizo para generar las tarjetas en la parte de preguntar que label esta checke:
Solo se ingresaria los imputs creados por medio del .forEach en un nuevo array, y utilizar el mismo metodo, para que cada vez que se ingrese un nuevo Mokepon, se genere un if(mokepon.checked) por cada mokepon dado de alta, me doy a entender? yo me entiendo jajaja 😂