Material docente en abierto de la asignatura Juegos en Red
Guía de estudio
Los videojuegos en red representan uno de los sectores más dinámicos y desafiantes de la industria del software, donde la capacidad de diseñar e implementar sistemas de comunicación eficientes y robustos es fundamental. En este contexto, comprender las arquitecturas de red, los protocolos de comunicación y las técnicas de programación tanto del lado del cliente como del servidor se ha convertido en una habilidad esencial para cualquier desarrollador de juegos modernos. Este libro está diseñado para proporcionar una comprensión profunda y práctica de estas tecnologías, basándose en el contenido de la asignatura Juegos en Red.
El desarrollo de juegos en red tiene múltiples facetas que exploraremos en profundidad: desde los fundamentos de las redes de comunicación hasta la programación en el cliente con JavaScript y Phaser, y finalmente la comunicación cliente-servidor mediante APIs REST y WebSockets. Entender esta progresión es clave para desarrollar juegos multijugador escalables y eficientes.
Comenzaremos sentando las bases de las redes de ordenadores, explorando las diferentes capas del modelo TCP/IP. A partir de ahí, aprenderemos a desarrollar aplicaciones web interactivas usando JavaScript y el motor de juegos Phaser. Finalmente, dominaremos las técnicas de comunicación cliente-servidor mediante APIs REST para operaciones síncronas y WebSockets para comunicación en tiempo real.
La primera parte de este libro sobre redes de ordenadores está basada en los conceptos presentados en Computer Networks: A Top-Down Approach (Kurose y Ross 2021), adaptados al contexto específico del desarrollo de videojuegos en red.
Objetivos de la asignatura
- Comprender los fundamentos de las redes de ordenadores y los protocolos de comunicación del modelo TCP/IP.
- Dominar el lenguaje JavaScript para el desarrollo de aplicaciones web interactivas.
- Aprender a utilizar el motor de juegos Phaser para crear juegos 2D en el navegador.
- Diseñar e implementar APIs REST para la comunicación cliente-servidor.
- Desarrollar sistemas de comunicación en tiempo real utilizando WebSockets.
- Integrar todas estas tecnologías para crear juegos multijugador funcionales.
Temario de la asignatura
La asignatura está dividida en 5 partes, que se corresponden con la categorización de la guia docente. Además, cada uno de estas partes está dividida en diferentes capítulos, con el fin de facilitar su lectura.
Parte 1: Introducción a los juegos en red y a las redes de comunicaciones
- Capítulo 1: Introducción a las Redes de Ordenadores
- Capítulo 2: Capa de Acceso a la Red
- Capítulo 3: Capa de Red
- Capítulo 4: Capa de Transporte
- Capítulo 5: Capa de Aplicación
Parte 2: Desarrollo en el lado del cliente
- Capítulo 6: JavaScript
- Capítulo 7: HTML y CSS
Parte 3: Desarrollo de juegos con tecnología web
- Capítulo 8: Phaser - Motor de Juegos 2D
Parte 4: Desarrollo en el lado del servidor
- Capítulo 9: APIs REST - Introducción, Cliente y Servidor
Parte 5: Comunicación asíncrona cliente - servidor
- Capítulo 10: WebSockets - Introducción, Cliente y Servidor
Desarrollo de la asignatura
El curso se desarrolla a lo largo de 15 semanas, con dos sesiones semanales. La metodología busca integrar la teoría y la práctica de forma fluida: los conceptos teóricos se presentarán junto con su implementación práctica, fomentando un aprendizaje aplicado en cada clase.
Calendario de clases
| Semana | Dia 1 | Dia 2 |
|---|---|---|
| 1 | Clase 1: Introducción a asignatura y a las Redes de Ordenadores | Clase 2: Capa de Acceso a la Red |
| 2 | Clase 3: Capa de Red | Clase 4: Capa de Transporte |
| 3 | Clase 5: Capa de Aplicación | Clase 6: Repaso y Prácticas de Redes |
| 4 | Clase 7: Repaso y Prácticas de Redes | Clase 8: Presentación e Introducción a JavaScript |
| 5 | Clase 9: Examen Parcial | Clase 10: JavaScript Orientado a Objetos |
| 6 | Clase 11: Introducción a Phaser | Clase 12: Phaser (continuación) |
| 7 | Clase 13: Phaser (continuación) | Clase 14: Phaser (continuación) |
| 8 | Clase 15: Phaser (continuación) | Clase 16: APIs REST - Introducción y Cliente |
| 9 | Clase 17: APIs REST - Cliente (continuación) | Clase 18: Presentación prácticas |
| 10 | Clase 19: Examen | Clase 20: APIs REST - Servidor |
| 11 | Clase 21: APIs REST - Servidor (continuación) | Clase 22: APIs REST - Servidor (continuación) |
| 12 | Clase 23: APIs REST - Servidor (continuación) | Clase 24: WebSockets - Cliente y Servidor |
| 13 | Clase 25: WebSockets (continuación) | Clase 26: WebSockets (continuación) |
| 14 | Clase 27: WebSockets (continuación) | Clase 28: WebSockets (continuación) |
| 15 | Clase 29: Examen | Clase 30: Presentación prácticas |
Clase 1: Presentación a asignatura e introducción a las Redes de Ordenadores
- Contenidos: Presentación de la asignatura, guía docente y sistema de evaluación.Introducción de los conceptos fundamentales de redes de ordenadores. Arquitectura de red por capas. Modelo TCP/IP. Protocolos y estándares. Historia y evolución de Internet.
- Objetivos de Aprendizaje:
- Comprender la arquitectura en capas de las redes de ordenadores.
- Identificar los componentes fundamentales de Internet.
- Entender el papel de los protocolos en la comunicación de red.
- Materiales Utilizados:
- Apuntes: 2 Introducción a las Redes de Ordenadores
- Diapositivas: Introducción a la asignatura, Introducción a las Redes de Ordenadores
- Ejercicios: Introducción a Redes
- Actividades Planificadas:
- Discusión sobre la importancia de las redes en los videojuegos.
- Análisis de la arquitectura de red de juegos multijugador populares.
- Trabajo Personal Recomendado:
- Lectura completa de los apuntes de introducción a redes.
- Realización del ejercicio práctico de trazado de rutas.
Clase 2: Capa de Acceso a la Red
- Contenidos: Funciones de la capa de acceso. Tecnologías de acceso físico. Ethernet. WiFi. Direccionamiento MAC. Conmutación y dominios de colisión.
- Objetivos de Aprendizaje:
- Comprender las funciones de la capa de acceso a la red.
- Identificar las diferencias entre distintas tecnologías de acceso.
- Entender el funcionamiento de las direcciones MAC.
- Materiales Utilizados:
- Apuntes: 3 Capa de Acceso a la Red
- Diapositivas: Capa de Acceso
- Ejercicios: Capa de Acceso
- Actividades Planificadas:
- Análisis de tramas Ethernet.
- Configuración de redes locales.
- Trabajo Personal Recomendado:
- Lectura de los apuntes sobre la capa de acceso.
- Realización del ejercicio práctico.
Clase 3: Capa de Red
- Contenidos: Protocolo IP. Direccionamiento IPv4 e IPv6. Subredes y máscaras. Enrutamiento. Protocolo ARP. ICMP y herramientas de diagnóstico (ping, traceroute).
- Objetivos de Aprendizaje:
- Comprender el funcionamiento del protocolo IP.
- Dominar el direccionamiento IP y el concepto de subredes.
- Utilizar herramientas de diagnóstico de red.
- Materiales Utilizados:
- Apuntes: 4 Capa de red
- Diapositivas: Capa de Red
- Ejercicios: Capa de Red
- Actividades Planificadas:
- Prácticas con herramientas de diagnóstico (ping, traceroute).
- Análisis de tablas de enrutamiento.
- Trabajo Personal Recomendado:
- Lectura de los apuntes sobre la capa de red.
- Realización del ejercicio de direccionamiento IP.
Clase 4: Capa de Transporte
- Contenidos: Protocolo TCP. Protocolo UDP. Control de flujo y congestión. Establecimiento y cierre de conexiones. Puertos y sockets. Comparación TCP vs UDP para videojuegos.
- Objetivos de Aprendizaje:
- Comprender las diferencias entre TCP y UDP.
- Entender cuándo utilizar cada protocolo en el desarrollo de juegos.
- Dominar el concepto de puertos y sockets.
- Materiales Utilizados:
- Apuntes: 5 Capa de transporte
- Diapositivas: Capa de Transporte
- Ejercicios: Capa de Transporte
- Actividades Planificadas:
- Análisis del tráfico TCP y UDP.
- Discusión sobre las necesidades de latencia en juegos multijugador.
- Trabajo Personal Recomendado:
- Lectura de los apuntes sobre la capa de transporte.
- Realización del ejercicio práctico.
Clase 5: Capa de Aplicación
- Contenidos: Protocolos de aplicación. HTTP y HTTPS. DNS. Arquitecturas cliente-servidor y peer-to-peer. APIs web. Introducción a los servicios web.
- Objetivos de Aprendizaje:
- Comprender los protocolos de la capa de aplicación.
- Entender el funcionamiento de HTTP/HTTPS.
- Conocer diferentes arquitecturas de aplicación en red.
- Materiales Utilizados:
- Apuntes: 6 Capa de aplicación
- Diapositivas: Capa de Aplicación
- Ejercicios: Capa de Aplicación
- Actividades Planificadas:
- Análisis de peticiones HTTP.
- Exploración de APIs públicas.
- Trabajo Personal Recomendado:
- Lectura de los apuntes sobre la capa de aplicación.
- Realización del ejercicio de análisis de tráfico HTTP.
Clase 6-7: Repaso y Prácticas de Redes
- Contenidos: Repaso integral de los conceptos de redes de ordenadores. Resolución de ejercicios prácticos. Preparación para la siguiente fase del curso.
- Objetivos de Aprendizaje:
- Consolidar los conocimientos de todas las capas del modelo TCP/IP.
- Integrar los conceptos en casos prácticos.
- Materiales Utilizados:
- Todos los materiales de las semanas 1-5.
- Ejercicios de repaso.
- Actividades Planificadas:
- Sesión de resolución de dudas.
- Prácticas guiadas de configuración y análisis de redes.
- Trabajo Personal Recomendado:
- Repaso de todos los capítulos de redes.
- Preparación del entorno de desarrollo para JavaScript.
Clase 8: Presentación e Introducción a JavaScript
- Contenidos: Presentación de la segunda parte del curso. Fundamentos de JavaScript: variables, tipos de datos, operadores, estructuras de control. Funciones y ámbito.
- Objetivos de Aprendizaje:
- Comprender la sintaxis básica de JavaScript.
- Dominar las estructuras de control de flujo.
- Crear y utilizar funciones en JavaScript.
- Materiales Utilizados:
- Apuntes: 7 JavaScript
- Diapositivas: JavaScript
- Ejercicios: JavaScript
- Actividades Planificadas:
- Configuración del entorno de desarrollo.
- Primeros programas en JavaScript.
- Trabajo Personal Recomendado:
- Lectura de las secciones introductorias de JavaScript.
- Práctica con ejercicios básicos de programación.
Clase 9: Examen Parcial
- Contenidos: Evaluación de los contenidos de redes de ordenadores (Clases 1-7).
- Objetivos de Aprendizaje:
- Demostrar comprensión de los fundamentos de redes.
- Aplicar los conocimientos a problemas prácticos.
- Materiales Utilizados:
- Todos los materiales de las clases 1-7.
- Actividades Planificadas:
- Examen parcial teórico-práctico.
- Trabajo Personal Recomendado:
- Continuar con el aprendizaje de JavaScript.
Clase 10: JavaScript Orientado a Objetos
- Contenidos: Objetos y arrays. Programación orientada a objetos en JavaScript. Clases y prototipos. Manipulación del DOM. Eventos.
- Objetivos de Aprendizaje:
- Dominar el trabajo con objetos y arrays.
- Comprender la programación orientada a objetos en JavaScript.
- Manipular el DOM y gestionar eventos.
- Materiales Utilizados:
- Apuntes: 7 JavaScript
- Diapositivas: JavaScript OOP
- Ejercicios: JavaScript
- Actividades Planificadas:
- Creación de aplicaciones interactivas simples.
- Prácticas con eventos del navegador.
- Trabajo Personal Recomendado:
- Lectura de las secciones avanzadas de JavaScript.
- Desarrollo de pequeños proyectos personales.
Clase 11-15: Introducción a Phaser
- Contenidos: Introducción al motor de juegos Phaser. Escenas y ciclo de vida. Sprites y texturas. Sistema de físicas. Gestión de entrada (teclado, ratón, táctil).
- Objetivos de Aprendizaje:
- Comprender la arquitectura de Phaser.
- Crear escenas y gestionar el ciclo de vida del juego.
- Implementar físicas básicas y controles.
- Materiales Utilizados:
- Apuntes: 9 Phaser 3
- Diapositivas: Phaser
- Ejercicios: Phaser
- Actividades Planificadas:
- Desarrollo de un proyecto de juego completo.
- Sesión de depuración y optimización.
- Trabajo Personal Recomendado:
- Finalización del proyecto de juego.
- Lectura de 8 HTML y CSS para crear la base web del juego.
- Preparación para la integración con servicios de red.
Clase 16-17: APIs REST - Introducción y Cliente
- Contenidos: Arquitectura REST. Métodos HTTP (GET, POST, PUT, DELETE). Formato JSON. Consumo de APIs REST desde JavaScript. Fetch API. Manejo de promesas y async/await.
- Objetivos de Aprendizaje:
- Comprender los principios de la arquitectura REST.
- Consumir APIs REST desde el cliente.
- Manejar operaciones asíncronas en JavaScript.
- Materiales Utilizados:
- Apuntes: 10 API REST, 11 Cliente API REST con JavaScript
- Diapositivas: APIs REST
- Ejercicios: REST - Introducción, REST - Cliente
- Actividades Planificadas:
- Consumo de APIs públicas.
- Integración de datos externos en aplicaciones.
- Trabajo Personal Recomendado:
- Lectura de los apuntes sobre REST.
- Realización de los ejercicios de consumo de APIs.
Clase 18: Presentación prácticas
- Contenidos: Presentación del proyecto de juego desarrollado con Phaser. Demostración de funcionalidades implementadas. Revisión del código y arquitectura del juego.
- Objetivos de Aprendizaje:
- Presentar de forma efectiva un proyecto de desarrollo de juegos.
- Explicar las decisiones de diseño y arquitectura del juego.
- Demostrar dominio de JavaScript y Phaser.
- Materiales Utilizados:
- Proyecto personal de juego con Phaser.
- Código fuente del proyecto.
- Actividades Planificadas:
- Presentaciones de los proyectos de juego.
- Sesión de preguntas y respuestas sobre las implementaciones.
- Trabajo Personal Recomendado:
- Preparación de la presentación del proyecto.
- Revisión y refinamiento del código del juego.
- Estudio para el examen de JavaScript y Phaser.
Clase 19: Examen
- Contenidos: Evaluación de los contenidos de JavaScript y Phaser (Clases 8-15).
- Objetivos de Aprendizaje:
- Demostrar dominio de JavaScript y programación orientada a objetos.
- Aplicar los conocimientos de Phaser en problemas prácticos.
- Resolver ejercicios de desarrollo de juegos.
- Materiales Utilizados:
- Todos los materiales de las clases 8-17.
- Apuntes de JavaScript y Phaser.
- Actividades Planificadas:
- Examen teórico-práctico de JavaScript y Phaser.
- Trabajo Personal Recomendado:
- Continuar con el aprendizaje de APIs REST.
- Lectura de los apuntes sobre desarrollo de servidores.
Clase 20-23: APIs REST - Servidor
- Contenidos: Desarrollo de APIs REST con Node.js y Express. Diseño de endpoints. Middleware. Gestión de errores. Validación de datos. Persistencia de datos.
- Objetivos de Aprendizaje:
- Diseñar e implementar una API REST.
- Gestionar peticiones y respuestas HTTP.
- Implementar la lógica de negocio del servidor.
- Materiales Utilizados:
- Apuntes: 12 Servidor API REST con JavaScript
- Diapositivas: APIs REST
- Ejercicios: REST - Servidor
- Actividades Planificadas:
- Desarrollo de una API REST completa.
- Pruebas de endpoints con herramientas como Postman.
- Trabajo Personal Recomendado:
- Lectura de los apuntes sobre desarrollo de servidores REST.
- Implementación de la API del proyecto final.
Clase 24-28: WebSockets - Cliente y Servidor
- Contenidos: Introducción a WebSockets. Comunicación bidireccional en tiempo real. Socket.IO. Gestión de conexiones. Salas y broadcast. Sincronización de estado en juegos multijugador.
- Objetivos de Aprendizaje:
- Comprender las ventajas de WebSockets sobre HTTP.
- Implementar comunicación en tiempo real.
- Sincronizar el estado del juego entre múltiples clientes.
- Materiales Utilizados:
- Apuntes: 13 Introducción a WebSockets, 14 Cliente WebSockets con JavaScript, 15 Servidor WebSockets con JavaScript
- Diapositivas: WebSockets
- Ejercicios: WebSockets - Introducción, WebSockets - Cliente, WebSockets - Servidor
- Actividades Planificadas:
- Implementación de chat en tiempo real.
- Desarrollo de la comunicación multijugador para el proyecto final.
- Trabajo Personal Recomendado:
- Lectura de todos los apuntes sobre WebSockets.
- Integración de WebSockets en el proyecto final.
Clase 29: Examen
- Contenidos: Evaluación de los contenidos de APIs REST y WebSockets (Clases 16-17, 20-28).
- Objetivos de Aprendizaje:
- Demostrar comprensión de la arquitectura REST y WebSockets.
- Aplicar los conocimientos de comunicación cliente-servidor.
- Implementar soluciones de comunicación en tiempo real.
- Materiales Utilizados:
- Todos los materiales de las clases 16-17 y 20-28.
- Apuntes de REST y WebSockets.
- Actividades Planificadas:
- Examen teórico-práctico de REST y WebSockets.
- Trabajo Personal Recomendado:
- Finalización del proyecto final con comunicación en tiempo real.
- Preparación de la presentación final del proyecto.
Clase 30: Presentación prácticas
- Contenidos: Presentación del proyecto de juego multijugador con API REST. Demostración de la integración cliente-servidor. Arquitectura del sistema completo.
- Objetivos de Aprendizaje:
- Presentar un proyecto completo de juego en red con API REST.
- Explicar la arquitectura cliente-servidor implementada.
- Demostrar dominio de todas las tecnologías del curso.
- Materiales Utilizados:
- Proyecto final de juego multijugador.
- Código fuente del cliente y servidor.
- Documentación de la API REST implementada.
- Actividades Planificadas:
- Presentaciones de los proyectos finales.
- Demostración en vivo de las funcionalidades multijugador.
- Sesión de retroalimentación y evaluación.
- Trabajo Personal Recomendado:
- Preparación exhaustiva de la presentación final.
- Documentación completa del proyecto.
- Estudio para el examen de la evaluación ordinaria.
Examen de la evaluación ordinaria (Proyecto final)
- Contenidos: Desarrollo de un juego multijugador completo con WebSockets.
- Objetivos de Aprendizaje:
- Demostrar comprensión integral de redes de ordenadores, JavaScript, Phaser, APIs REST y WebSockets.
- Implementar un juego multijugador funcional con comunicación en tiempo real.
- Aplicar todos los conocimientos adquiridos durante el curso.
- Materiales Utilizados:
- Todos los materiales del curso (Clases 1-30).
- Apuntes completos de redes, JavaScript, Phaser, REST y WebSockets.
- Documentación de todas las tecnologías utilizadas.
- Actividades Planificadas:
- Desarrollo y presentación final de un juego multijugador con WebSockets.
- Trabajo Personal Recomendado:
- Repaso exhaustivo de todos los contenidos de la asignatura.
- Práctica con proyectos personales integrando todas las tecnologías.
- Revisión de todos los ejercicios y proyectos del curso.
Recursos adicionales
Los siguientes recursos complementarios pueden ser útiles durante el curso:
- Documentación oficial de JavaScript (Mozilla Developer Network 2024): MDN Web Docs
- Documentación oficial de Phaser (Photonstorm 2024): Phaser.io
- Documentación de Node.js: Node.js Docs
- Documentación de Socket.IO: Socket.IO
- Plataforma con visualizaciones: JER Games (Para información sobre el código fuente ver 18 Software utilizado en la asignatura)
Bibliografía recomendada
Para profundizar en los conceptos del curso, se recomienda consultar:
- Redes de ordenadores: Los fundamentos de redes están basados en (Kurose y Ross 2021). También es recomendable (Tanenbaum y Wetherall 2021).
- JavaScript: Para dominar el lenguaje, consultar (Flanagan 2020) y (Haverbeke 2018).
- Desarrollo de juegos en red: Recursos esenciales incluyen (Gambetta 2014), (Fiedler 2024), (Claypool y Claypool 2006), (Bernier 2001), (Aldridge 2011), y (Glazer y Madhav 2015).
- APIs REST: La arquitectura REST está definida en (Fielding 2000). Guías prácticas incluyen (Masse 2011), (Richardson y Ruby 2013), y (Sturgeon 2016).
- WebSockets: El protocolo está especificado en (Fette y Melnikov 2011). Para implementación práctica, ver (Wang, Salim, y Moskovits 2013) y (Doglio 2015).
- Node.js y Express: Referencias recomendadas incluyen (Wilson 2018), (Hahn 2014), y (Young, Meck, y Cantelon 2017).
Todas las referencias completas se encuentran en la sección de referencias del libro.