CursosEmpresasBlogLiveConfPrecios

¿Qué es un array bidimensional?

Clase 5 de 24 • Taller Práctico de JavaScript: ¡Crea tu Primer Videojuego!

Clase anteriorSiguiente clase

Contenido del curso

Introducción

  • 1
    Programemos un juego con JavaScript

    Programemos un juego con JavaScript

    17:13 min

Canvas

  • 2
    ¿Qué es canvas en JavaScript?

    ¿Qué es canvas en JavaScript?

    18:37 min
  • 3
    Tamaño del canvas y sus elementos

    Tamaño del canvas y sus elementos

    17:37 min
  • 4
    Canvas responsive

    Canvas responsive

    12:37 min

Mapa del juego

  • 5
    ¿Qué es un array bidimensional?

    ¿Qué es un array bidimensional?

    Viendo ahora
  • 6
    Arreglos multidimensionales en JavaScript

    Arreglos multidimensionales en JavaScript

    23:38 min
  • 7
    Refactor del mapa de juego

    Refactor del mapa de juego

    20:48 min

Movimientos del jugador

  • 8
    Eventos y botones

    Eventos y botones

    14:14 min
  • 9
    Objeto playerPosition

    Objeto playerPosition

    11:34 min
  • 10
    Limpieza de movimientos

    Limpieza de movimientos

    09:53 min
  • 11
    No te salgas del mapa

    No te salgas del mapa

    11:15 min

Colisiones

  • 12
    Detectando colisiones fijas

    Detectando colisiones fijas

    13:29 min
  • 13
    Detectando colisiones con arrays

    Detectando colisiones con arrays

    14:11 min
  • 14
    Victoria: subiendo de nivel

    Victoria: subiendo de nivel

    07:50 min
  • 15
    Derrota: perdiendo vidas

    Derrota: perdiendo vidas

    11:45 min

Bonus: adictividad

  • 16
    Sistema de vidas y corazones

    Sistema de vidas y corazones

    13:02 min
  • 17
    Sistema de tiempo y puntajes

    Sistema de tiempo y puntajes

    19:30 min
  • 18
    ¿Qué es localStorage?

    ¿Qué es localStorage?

    07:33 min
  • 19
    Guardando records del jugador

    Guardando records del jugador

    18:35 min

Deploy

  • 20
    Depurando errores del juego

    Depurando errores del juego

    23:16 min
  • 21
    Desplegando el juego a GitHub Pages

    Desplegando el juego a GitHub Pages

    07:39 min

Próximos pasos

  • 22
    Reto: reinicio del juego

    Reto: reinicio del juego

    03:36 min
  • 23
    Reto: timeouts de victoria o derrota

    Reto: timeouts de victoria o derrota

    04:14 min
  • 24
    ¿Quieres un simulador laboral?

    ¿Quieres un simulador laboral?

    06:53 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads
        Juan Pablo Soto Velasco

        Juan Pablo Soto Velasco

        student•
        hace 3 años

        Comparto mi solución al reto 😄:

        for_1_tll_js.PNG

          Aaron Carhuaricra

          Aaron Carhuaricra

          student•
          hace 2 años

          Yo lo hice parecido pero el (+5) lo vincule al (element size) para que responda con cualquier tamaño, saludos

          for(let i = 1; i <= 10; i++) { for(let j = 1; j <= 10; j++) { game.fillText(emojis['X'], (elementsSize * i) + (elementsSize / 5), (elementsSize *j)-(elementsSize / 5)); } }
        Miguel Torres Cerna

        Miguel Torres Cerna

        student•
        hace 3 años

        genial , me gusta mucho su enseñanza.

          Josue Cerron Tuesta

          Josue Cerron Tuesta

          student•
          hace 3 años

          Muy buen curso!

          Beder Danilo Casa Condori

          Beder Danilo Casa Condori

          student•
          hace 2 años

          es muy bueno en lo que hace

        Manuel Araujo

        Manuel Araujo

        student•
        hace 3 años
        for(j=1; j<=10; j++) { for(i=1; i <= 10; i++) { game.fillText(emojis['X'], elementsSize*i, elementsSize*j); } }
        Julia Gabriela Nieva Paredes

        Julia Gabriela Nieva Paredes

        student•
        hace 3 años

        Mi solución: [](

        code.png

        Laura Muñoz

        Laura Muñoz

        student•
        hace 3 años

        RETO:

        for(let i = 1; i <= 10; i++){ for(let j = 1; j <= 10; j++){ game.fillText(emojis['X'], elementsSize * i , elementsSize * j); } }
        Gualberto Montiel

        Gualberto Montiel

        student•
        hace 3 años

        Asi quedo mi codigo:

        JSGame2.png
        Andrés Toledo Margalef

        Andrés Toledo Margalef

        student•
        hace 3 años

        Yo lo arme asi, porque me molestaba como se salia la Bombita (Rodriguez ;) ;) ) del canvas

        function startGame() { game.font = (elementsSize - 8) + "px Helvetica"; console.log(game.font) game.textAlign = "left"; for (let i = 1; i <= 10; i++) { for(let f = 0; f < 10; f++) { game.fillText(emojis["X"], elementsSize * f, elementsSize * i - 10); } } }
        Darvin Emil Rodriguez Nuñez

        Darvin Emil Rodriguez Nuñez

        student•
        hace 3 años
        Screenshot_20230105_055021.png

        me sale mal esto, no entendo por que?

          Juan Castro

          Juan Castro

          teacher•
          hace 3 años

          Recuerda que puedes revisar propiedades como el textAlign: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/textAlign

        JORGE MANRIQUE CHAVARRO

        JORGE MANRIQUE CHAVARRO

        student•
        hace 2 años

        Comparto mi solución.

        for (let x = 1; x <= 10; x++) { for (let y = 1; y <= 10; y++) { game.fillText(emojis['X'], elementSize * x, elementSize * y); } }
        Santiago Montero

        Santiago Montero

        student•
        hace 3 años

        Solucion del Reto <3

        function starGame() { game.font = elementSize + "px Verdana"; game.textAlign = "end"; for (let i = 1; i <= 10; i++) { for (let z = 1; z <= 10; z++) { game.fillText(emojis["X"], elementSize * i, elementSize * z); } } }
        Miguel Negron Garcia

        Miguel Negron Garcia

        student•
        hace 3 años

        Esta es una solucion que vi en clases pasadas y que trate de replicarla:

        (

        bombas.png

        Elío Diez

        Elío Diez

        student•
        hace 3 años

        Mi solución:

        for (let i=1; i<=10; i++){ for (let h=1; h<=10; h++){ game.fillText(emojis['X'], elementSize*h, elementSize*i); }; };
        Alexander Palazuelos

        Alexander Palazuelos

        student•
        hace 3 años

        Mi solución:

        for(let i=1; i<=10; i++){ for (let j = 1; j <= 10; j++) { game.fillText(emojis['X'], elementsSize * j, elementsSize * i); } }
        Cristian Zapata

        Cristian Zapata

        student•
        hace 3 años

        Solución corta utilizando un ciclo while y creando una nueva variable.

        let columnNumber = 1; while (columnNumber < 11){ for (let i = 1; i < 11; i++) { game.fillText(emojis['X'], columnNumber*elementsSize , elementsSize * i) ; } columnNumber ++; }
        Victor Hugo Cruz Carballo

        Victor Hugo Cruz Carballo

        student•
        hace 3 años
        function startGame(){ game.font = elemtSize + 'px Verdana'; game.textAlign = 'end'; // for (let i = 1; i <= 10; i++) { // game.fillText(emojis['X'], elemtSize*i+4, elemtSize-10); // } const map = maps[0]; const mapRow = map.trim().split('\n'); const mapRowCol = mapRow.map(row => row.trim().split('')); console.log({mapRowCol}) for (let x = 1; x <= 10; x++) { console.group(x) for (let y = 1; y <= 10; y++) { game.fillText(emojis[mapRowCol[y-1][x-1]],elemtSize*x,elemtSize*y-10); console.log('fila' + x) console.log('columna' + y) } console.groupEnd() } }
        Screenshot from 2022-10-30 23-00-09.png
        Axel Enrique Galeed Gutierrez

        Axel Enrique Galeed Gutierrez

        student•
        hace 3 años

        Les comparto mi solución al reto, les estaré dejando tanto el código como el resultado final. :D

        Repositorio de GitHub.

        carbon (1).png

        Código

        import { EMOJIS } from './maps.js'; const startGame = (fontSize, elementSize) => { GAME.font = `${fontSize}px sans-serif`; GAME.textAlign = 'left'; let yPositionEmoji = elementSize; let yCounterPositionEmoji = 1; let xCounterPositionEmoji = 0; for (let i = 0; i < 100; i++) { if (i % 10 === 0 && i !== 0) { yCounterPositionEmoji++; yPositionEmoji = elementSize * yCounterPositionEmoji; xCounterPositionEmoji = 0; } const X = elementSize * xCounterPositionEmoji * 1.015; const Y = yPositionEmoji * 0.98; GAME.fillText(EMOJIS['X'], X, Y); xCounterPositionEmoji++; } }; const setCanvasSize = () => { const WIDTH_WINDOWS = window.innerWidth; const HEIGHT_WINDOWS = window.innerHeight; const IS_SMALLER_HEIGHT = WIDTH_WINDOWS < HEIGHT_WINDOWS && WIDTH_WINDOWS < 550; const WIDTH_BASE = window.innerWidth * 0.9; const HEIGHT_BASE = window.innerHeight * 0.6; const SIDE_CANVAS = (IS_SMALLER_HEIGHT) ? (WIDTH_BASE).toString() : (HEIGHT_BASE).toString(); CANVAS.setAttribute('width', SIDE_CANVAS); CANVAS.setAttribute('height', SIDE_CANVAS); const ELEMENT_SIZE = Number(SIDE_CANVAS) / 10.25; const FONT_SIZE = ELEMENT_SIZE * 0.82; startGame(FONT_SIZE, ELEMENT_SIZE); }; const CANVAS = document.querySelector('#main__game-container-id'); const GAME = CANVAS.getContext('2d'); window.addEventListener('load', setCanvasSize); window.addEventListener('resize', setCanvasSize);

        Resultado

        Captura de pantalla 2022-10-27 021354.png
        Jhon Eduard Bocanegra Ortiz

        Jhon Eduard Bocanegra Ortiz

        student•
        hace 3 años

        Asi quedo:

        code.png

        Javier Núñez

        Javier Núñez

        student•
        hace 3 años

        Comparto la solución del reto, o una soloción:

        for (let j = 1; j <= 10; j++){ for (let i = 1; i <= 10; i++){ game.fillText(emojis['X'], elementsSize * i, elementsSize * j); } }
        Luis Angel Santillan

        Luis Angel Santillan

        student•
        hace 3 años

        Lo resolvi de la siguiente manera.

        code.png

        Y aqui el resultado...

        Bom.PNG

        Por alguna razon le etoy sumando 22 a mi eje y* por que no entra dentro del canva si alguien me pudiera ayudar a resolver eso, Gracias!!!

        JeanCarlos Atoche Pascual

        JeanCarlos Atoche Pascual

        student•
        hace 3 años

        Hice el Reto usando el mapa, sin ver las siguientes clases, de momento, solo reenderize el primer mapa, no se que venga mas adelante xD

        Captura de pantalla 2022-09-10 200412.png

        const startGame = () => { game.font = elementsSize + 'px Verdana'; game.textAlign = 'start'; game.textBaseline = 'top'; let newMaps = maps[0]; newMaps = newMaps.trim().split('\n') newMaps = newMaps.map(element => element.trim()); newMaps = newMaps.map(element => [...element]) for (let i = 0; i < newMaps.length; i++) { for (let j = 0; j < newMaps.length; j++) { game.fillText(emojis[newMaps[i][j]], elementsSize * j, elementsSize * i) } } };