{"id":28860507,"url":"https://github.com/sergiomarquezdev/pingufly-2d","last_synced_at":"2026-05-15T20:05:44.313Z","repository":{"id":282640926,"uuid":"949048642","full_name":"sergiomarquezdev/pingufly-2d","owner":"sergiomarquezdev","description":"PinguFly! 2D Classic videogame where you must throw penguin as far as possible!","archived":false,"fork":false,"pushed_at":"2025-06-18T22:57:42.000Z","size":16679,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-25T13:06:47.567Z","etag":null,"topics":["2d","2d-game","javascript","phaser","videogame"],"latest_commit_sha":null,"homepage":"https://pingufly.sergiomarquez.dev","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sergiomarquezdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-15T15:00:53.000Z","updated_at":"2025-06-18T22:57:46.000Z","dependencies_parsed_at":"2025-07-25T09:41:41.994Z","dependency_job_id":null,"html_url":"https://github.com/sergiomarquezdev/pingufly-2d","commit_stats":null,"previous_names":["sergiomarquezdev/yetisports-game","sergiomarquezdev/pingugo-2d"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sergiomarquezdev/pingufly-2d","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergiomarquezdev%2Fpingufly-2d","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergiomarquezdev%2Fpingufly-2d/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergiomarquezdev%2Fpingufly-2d/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergiomarquezdev%2Fpingufly-2d/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sergiomarquezdev","download_url":"https://codeload.github.com/sergiomarquezdev/pingufly-2d/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergiomarquezdev%2Fpingufly-2d/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33078043,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T20:05:40.333Z","status":"ssl_error","status_checked_at":"2026-05-15T20:05:38.672Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["2d","2d-game","javascript","phaser","videogame"],"created_at":"2025-06-20T05:00:30.048Z","updated_at":"2026-05-15T20:05:44.306Z","avatar_url":"https://github.com/sergiomarquezdev.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🐧 PinguFly\n\n![License](https://img.shields.io/badge/license-ISC-blue.svg)\n![Phaser Version](https://img.shields.io/badge/Phaser-3.88.2-brightgreen.svg)\n![Status](https://img.shields.io/badge/status-In%20Development-yellow)\n![JavaScript](https://img.shields.io/badge/JavaScript-ES6%2B-yellow.svg)\n![Vite](https://img.shields.io/badge/Vite-6.2.2-blueviolet.svg)\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"public/assets/images/pingufly-cover.webp\" alt=\"PinguFly Gameplay\" width=\"80%\"\u003e\n\u003c/div\u003e\n\nUna reimaginación moderna del clásico juego Yeti Sports Pingu Throw, donde lanzas un pingüino lo más lejos posible a través de un hermoso paisaje invernal y compites por la mejor distancia.\n\n[¡Juega PinguFly Online!](https://pingufly.sergiomarquez.dev/) | [Reportar un bug](https://github.com/sergiomarquezdev/pingufly-2d/issues) | [Sugerir una función](https://github.com/sergiomarquezdev/pingufly-2d/issues)\n\n## 📖 Contenido\n\n- [🐧 PinguFly](#-pingufly)\n  - [📖 Contenido](#-contenido)\n  - [🎮 Sobre el Proyecto](#-sobre-el-proyecto)\n    - [Construido Con](#construido-con)\n    - [Características del Juego](#características-del-juego)\n  - [✨ Funcionalidades en Detalle](#-funcionalidades-en-detalle)\n    - [Física Realista](#física-realista)\n    - [Sistema de Lanzamiento en Dos Fases](#sistema-de-lanzamiento-en-dos-fases)\n    - [Entorno Invernal Dinámico](#entorno-invernal-dinámico)\n    - [Seguimiento de Puntuación y Progreso](#seguimiento-de-puntuación-y-progreso)\n    - [Sistema de Audio Avanzado](#sistema-de-audio-avanzado)\n    - [Diseño UI Responsivo](#diseño-ui-responsivo)\n    - [Gestión de Estados de Juego](#gestión-de-estados-de-juego)\n  - [🔧 Arquitectura y Diseño Técnico](#-arquitectura-y-diseño-técnico)\n    - [Estructura Modular](#estructura-modular)\n    - [Sistema de Componentes](#sistema-de-componentes)\n    - [Manejo de Recursos](#manejo-de-recursos)\n    - [Flujo de Juego](#flujo-de-juego)\n  - [⚙️ Implementación Técnica](#️-implementación-técnica)\n    - [Optimizaciones de Rendimiento](#optimizaciones-de-rendimiento)\n    - [Arquitectura de Código Modular](#arquitectura-de-código-modular)\n    - [Integración de Analytics](#integración-de-analytics)\n    - [Adaptaciones para Móviles](#adaptaciones-para-móviles)\n  - [🚀 Primeros Pasos](#-primeros-pasos)\n    - [Requisitos Previos](#requisitos-previos)\n    - [Instalación](#instalación)\n    - [Comandos Disponibles](#comandos-disponibles)\n  - [🎮 Cómo Jugar](#-cómo-jugar)\n    - [Controles](#controles)\n    - [Mecánicas de Juego](#mecánicas-de-juego)\n  - [🛣️ Roadmap de Desarrollo](#️-roadmap-de-desarrollo)\n  - [📂 Estructura del Proyecto](#-estructura-del-proyecto)\n  - [👥 Contribuyendo](#-contribuyendo)\n  - [📝 Licencia](#-licencia)\n  - [📞 Contacto](#-contacto)\n  - [🙏 Agradecimientos](#-agradecimientos)\n\n## 🎮 Sobre el Proyecto\n\nPinguFly recrea la experiencia nostálgica del clásico juego Yeti Sports donde un yeti lanza un pingüino. El objetivo es simple pero adictivo: lanzar el pingüino lo más lejos posible a través de un paisaje helado, compitiendo por la mayor distancia.\n\nEste remake aprovecha las tecnologías web modernas, especialmente Phaser 3 y JavaScript ES6+, creando una experiencia de juego fluida y accesible tanto en ordenadores como en dispositivos móviles. El juego presenta un rico ambiente invernal con elementos dinámicos como copos de nieve, árboles, muñecos de nieve e iglús que crean una experiencia inmersiva.\n\n### Construido Con\n\n* [Phaser 3.88.2](https://phaser.io/) - Framework de juegos 2D potente para HTML5\n* [JavaScript ES6+](https://developer.mozilla.org/es/docs/Web/JavaScript) - JavaScript moderno con patrones funcionales\n* [Vite 6.2.2](https://vitejs.dev/) - Herramienta de desarrollo ultra-rápida para frontend\n* [Matter.js](https://brm.io/matter-js/) - Motor de física 2D (integrado con Phaser)\n* [HTML5](https://developer.mozilla.org/es/docs/Web/Guide/HTML/HTML5) y [CSS3](https://developer.mozilla.org/es/docs/Web/CSS) - Para estructura y estilo\n\n### Características del Juego\n\n* 🎯 Mecánica de lanzamiento en dos fases: selección de ángulo seguida de selección de potencia\n* ❄️ Entorno invernal dinámico con nevada animada, efectos de viento y fondos con parallax\n* 🏔️ Paisajes diseñados con montañas, árboles, iglús y muñecos de nieve\n* 🎚️ Controles intuitivos optimizados para escritorio y móvil\n* 🌊 Jugabilidad física realista con trayectorias de proyectil naturales\n* 📊 Seguimiento de puntuación y récords personales con retroalimentación visual\n* 🔊 Sistema de audio completo con control de volumen avanzado y efectos de sonido\n* 🏆 Múltiples intentos de lanzamiento por sesión de juego\n* 📱 Diseño responsivo que funciona en diversos tamaños de pantalla\n* 🎨 Efectos visuales atractivos con animaciones fluidas y UI estilo glaciar\n* 🧩 Arquitectura de código modular para mejor mantenimiento y escalabilidad\n* 🎭 Personajes animados con comportamientos interactivos en menú y juego\n\n## ✨ Funcionalidades en Detalle\n\n### Física Realista\nPinguFly utiliza el motor de física Matter.js integrado con Phaser para crear una trayectoria de proyectil realista. La trayectoria del pingüino se ve afectada por:\n- Gravedad y resistencia del aire ajustadas para un vuelo más extenso\n- Ángulo y potencia de lanzamiento calculados con precisión\n- Fricción del suelo reducida para simular hielo y deslizamientos más largos\n- Colisiones físicas con el entorno calculadas en tiempo real\n\n### Sistema de Lanzamiento en Dos Fases\nEl juego implementa un sistema estratégico de lanzamiento en dos fases:\n1. **Selección de Ángulo**: Una flecha animada indica el ángulo de lanzamiento, oscilando entre 0° y 90°. Los jugadores sincronizan su clic/toque para seleccionar el ángulo óptimo.\n2. **Selección de Potencia**: Una barra de potencia sube y baja, permitiendo a los jugadores elegir el nivel de potencia perfecto para su lanzamiento.\n\n### Entorno Invernal Dinámico\n- **Nevada Atmosférica**: Copos de nieve continuos crean una atmósfera invernal con opacidad, tamaños y efectos de viento variables\n- **Fondos con Parallax**: Montañas y cielo en múltiples capas crean percepción de profundidad\n- **Elementos Ambientales**: Árboles, muñecos de nieve e iglús estratégicamente ubicados mejoran la experiencia visual\n- **Nubes Dinámicas**: Nubes a la deriva en diversas formas y tamaños añaden atmósfera al cielo\n- **Sol y Efectos de Luz**: Efectos visuales mejorados con rayos de sol e iluminación ambiental\n- **Animaciones de Personajes**: Yeti y pingüino animados con comportamientos que enriquecen la experiencia visual\n\n### Seguimiento de Puntuación y Progreso\n- Seguimiento de distancia en tiempo real durante el vuelo del pingüino, con cálculo preciso evitando duplicaciones\n- Acumulación de distancia total a través de múltiples intentos\n- Almacenamiento y visualización de récords personales usando localStorage\n- Retroalimentación visual muestra intentos restantes con iconos de pingüino animados\n- Efectos especiales para nuevos récords en la pantalla de Game Over\n\n### Sistema de Audio Avanzado\n- **Control de Volumen Personalizado**: Slider visual con estilo glaciar para ajuste fino del volumen (0-100%)\n- **Botón Mute/Unmute**: Control de silencio con indicación visual que cambia automáticamente según el nivel de volumen\n- **Música de Fondo**: Pistas musicales con transiciones suaves entre escenas y mecanismos anti-duplicación\n- **Efectos de Sonido**: Retroalimentación auditiva para interacciones de juego como botones, lanzamientos y eventos\n- **Persistencia de Preferencias**: Configuraciones de audio guardadas entre sesiones usando localStorage\n\n### Diseño UI Responsivo\n- Se adapta perfectamente a diferentes tamaños de pantalla y orientaciones\n- Experiencia de juego a pantalla completa con escalado adecuado\n- Controles táctiles optimizados para dispositivos móviles\n- Controles de escritorio con atajos de teclado para mejor experiencia\n- Elementos UI con estilo glaciar con efectos brillantes y animaciones\n- Modal de configuración con controles avanzados para personalizar la experiencia\n\n### Gestión de Estados de Juego\n- Gestión de estados centralizada con GameStateManager\n- Transiciones limpias entre escenas con estados de carga\n- Pantalla de Game Over pulida con puntuaciones finales, récords y opciones para reiniciar\n- Almacenamiento persistente para mejores distancias\n- Sistema de estados modales para controlar interacciones en diferentes etapas\n- Mecanismos mejorados para prevenir comportamientos inesperados en cálculos de distancia\n\n## 🔧 Arquitectura y Diseño Técnico\n\n### Estructura Modular\nPinguFly está construido con una arquitectura modular que separa claramente las responsabilidades:\n\n- **Componentes**: Unidades reutilizables que gestionan aspectos específicos del juego\n  - **CharacterManager**: Gestiona todos los personajes del juego (Yeti y Pingüino)\n  - **BackgroundManager**: Controla elementos de fondo y parallax\n  - **CloudManager**: Maneja la generación y animación de nubes\n  - **GroundManager**: Configura la física del suelo y el terreno\n  - **LaunchManager**: Coordina el proceso de lanzamiento completo\n  - **UI Components**: Maneja visualización y entrada de usuario\n\n- **Escenas**: Etapas distintas del juego con flujos específicos\n  - **Boot**: Configuración inicial y precarga mínima\n  - **Preload**: Carga de recursos con barra de progreso\n  - **Menu**: Menú principal e instrucciones\n  - **Game**: Lógica principal de juego\n  - **Results**: Pantalla de resultados\n  - **AnimationTest**: Escena para pruebas de animación\n\n- **Utilidades**: Servicios compartidos para gestión de datos y lógica\n  - **GameStateManager**: Sistema central de estados del juego\n  - **ScoreManager**: Gestión de puntuaciones y mejor distancia\n  - **StorageManager**: Interfaz para localStorage\n  - **SoundManager**: Sistema completo de gestión de audio\n  - **CameraController**: Control avanzado de cámara\n\n### Sistema de Componentes\nCada componente del juego sigue el principio de responsabilidad única:\n\n1. **BackgroundManager**: Crea un entorno de parallax con múltiples capas (cielo, montañas, sol) y gestiona la generación de elementos decorativos.\n\n2. **CharacterManager**: Responsable de la creación, posicionamiento y animación de todos los personajes, así como la aplicación de física al pingüino durante el vuelo.\n\n3. **CloudManager**: Genera nubes en diferentes capas con movimiento independiente, optimizado para móviles con detección de capacidades.\n\n4. **LaunchManager**: Coordina el proceso completo de lanzamiento, comunicándose con AngleIndicator y PowerBar.\n\n5. **GameUI**: Centraliza la creación y actualización de todos los elementos de interfaz, incluyendo puntuaciones, intentos e indicaciones.\n\n6. **SettingsModal**: Implementa un modal de configuración con controles avanzados para sonido y opciones de juego.\n\n### Manejo de Recursos\n- **Carga Progresiva**: Los recursos se cargan en la escena Preload con una barra de progreso\n- **Gestión de Memoria**: Los componentes implementan métodos destroy() para limpieza explícita\n- **Reutilización de Assets**: Estructuras de datos compartidas para definiciones de animación\n- **Escalado Adaptativo**: Detección de capacidades del dispositivo para ajustar calidad visual\n\n### Flujo de Juego\n1. **Inicialización**: Boot → Preload → Menu\n2. **Ciclo de Juego**:\n   - Inicio (READY)\n   - Selección de ángulo (ANGLE_SELECTION)\n   - Selección de potencia (POWER_SELECTION)\n   - Lanzamiento (LAUNCHING)\n   - Vuelo (FLYING)\n   - Fin del lanzamiento (STOPPED)\n   - Siguiente lanzamiento o fin (WAIT_FOR_CLICK / ENDED)\n3. **Fin de Juego**: Game Over → Results / Menu\n\n## ⚙️ Implementación Técnica\n\n### Optimizaciones de Rendimiento\n- Carga eficiente de assets con precarga y estrategias de caché\n- Optimización de texturas para menor uso de memoria y renderizado más rápido\n- Sistema de partículas optimizado para efectos de nieve sin impacto en rendimiento\n- Gestión eficiente de estados para minimizar actualizaciones innecesarias\n- Gestión de escenas para mejor utilización de memoria\n- Cálculos físicos optimizados para jugabilidad fluida\n- Detección de capacidades del dispositivo para ajustes dinámicos de calidad\n- Mecanismos para prevenir cálculos duplicados de distancia que afectan el rendimiento\n\n### Arquitectura de Código Modular\n- Patrones de programación funcional para mejor organización del código\n- Diseño basado en componentes enfocado en responsabilidades únicas\n- Separación de preocupaciones entre lógica de juego, UI y física\n- Configuración centralizada para ajustes y afinación fáciles\n- Interfaces limpias entre sistemas para mejor mantenimiento\n- Manejo eficiente de eventos con limpieza adecuada para prevenir fugas de memoria\n- Componentes desacoplados que se comunican a través de sistemas de observadores\n\n### Integración de Analytics\n- Integración con Google Analytics para seguimiento de engagement\n- Seguimiento de eventos personalizados para métricas de jugabilidad\n- Monitoreo de rendimiento para insights de optimización\n- Implementación no intrusiva que mantiene el rendimiento del juego\n\n### Adaptaciones para Móviles\n- Detección automática de dispositivos móviles para ajustes de rendimiento\n- Reducción de elementos visuales en dispositivos de menor potencia\n- Optimización de cálculos físicos para CPU móvil\n- Controles táctiles adaptados con áreas de hit ampliadas\n- Interfaz de usuario escalable para diferentes tamaños de pantalla\n- Proporciones adaptativas para elementos visuales clave\n\n## 🚀 Primeros Pasos\n\nSigue estos pasos para obtener una copia local funcionando.\n\n### Requisitos Previos\n\n* Node.js (v14.0.0 o posterior)\n* npm (viene con Node.js)\n\n```bash\n# Verificar versión de Node.js\nnode -v\n\n# Verificar versión de npm\nnpm -v\n```\n\n### Instalación\n\n1. Clonar el repositorio\n   ```sh\n   git clone https://github.com/sergiomarquezdev/pingufly-2d.git\n   cd pingufly-2d\n   ```\n\n2. Instalar paquetes NPM\n   ```sh\n   npm install\n   ```\n\n3. Iniciar el servidor de desarrollo\n   ```sh\n   npm run dev\n   ```\n\n4. Abre tu navegador y navega a `http://localhost:3000`\n\n### Comandos Disponibles\n\n```bash\n# Iniciar servidor de desarrollo con hot-reload\nnpm run dev\n\n# Compilar para producción\nnpm run build\n\n# Previsualizar la compilación de producción\nnpm run preview\n```\n\n## 🎮 Cómo Jugar\n\n### Controles\n\n- **PC/Escritorio**: Usa clics del ratón o toques para interactuar\n- **Móvil**: Usa toques en la pantalla para interactuar\n- **Atajos de teclado**:\n  - `ESC` - Volver al menú principal\n  - `R` - Reiniciar juego\n\n### Mecánicas de Juego\n\n1. **Inicia el juego** - Haz clic/toca el botón \"Jugar\" en el menú principal\n2. **Selección de ángulo** - Haz clic/toca cuando la flecha en movimiento esté en el ángulo deseado\n3. **Selección de potencia** - Haz clic/toca cuando la barra de potencia alcance el nivel deseado\n4. **Observa volar al pingüino** - La distancia se mide y se suma a tu puntuación total\n5. **Game Over** - Después de agotar tus intentos, visualiza tu distancia total y mejor récord\n6. **Jugar de nuevo** - Elige reiniciar el juego o volver al menú principal\n\n## 🛣️ Roadmap de Desarrollo\n\n- ✅ Mecánicas principales de juego y física\n- ✅ Elementos básicos de UI y flujo de juego\n- ✅ Seguimiento de puntuación y mantenimiento de récords\n- ✅ Diseño responsivo para múltiples dispositivos\n- ✅ Arquitectura de código refactorizada para mejor mantenimiento\n- ✅ Sistema de posicionamiento mejorado para personajes del juego\n- ✅ Pantalla de Game Over mejorada con opciones de reinicio\n- ✅ UI optimizada de selección de potencia y ángulo\n- ✅ Efecto de nevada dinámica con simulación de viento\n- ✅ Elementos ambientales (árboles, muñecos de nieve, iglús)\n- ✅ Animaciones decorativas para personajes en el menú\n- ✅ Sistema de audio mejorado con control de volumen avanzado\n- ✅ Correcciones en el cálculo de distancia para prevenir duplicaciones\n- ✅ Efectos de sonido completos para todas las interacciones\n- ✅ Animaciones finales de personajes durante el juego\n- ❌ Obstáculos adicionales y elementos interactivos\n- ❌ Optimizaciones de rendimiento para dispositivos móviles\n- ❌ Tabla de clasificación online\n\nPara un roadmap más detallado, consulta [timeline.md](project_docs/timeline.md).\n\n## 📂 Estructura del Proyecto\n\nEl proyecto sigue un patrón de organización modular, con código separado por característica y responsabilidad:\n\n```\npingufly-2d\n├─ src/                       # Código fuente\n│  ├─ components/             # Componentes reusables\n│  │  ├─ characters/          # Componentes de personajes (CharacterManager)\n│  │  ├─ environment/         # Componentes del entorno (BackgroundManager, CloudManager, GroundManager)\n│  │  ├─ gameplay/            # Mecánicas de juego (LaunchManager)\n│  │  └─ ui/                  # Componentes de interfaz (GameUI, PowerBar, AngleIndicator, GameOverScreen, SettingsModal)\n│  ├─ config/                 # Configuración del juego (gameConfig, physicsConfig, penguinAnimations)\n│  ├─ entities/               # Entidades y objetos del juego\n│  ├─ scenes/                 # Escenas Phaser (Game, Menu, Preload, Boot, AnimationTest)\n│  ├─ utils/                  # Clases utilitarias (ScoreManager, CameraController, GameStateManager, StorageManager, SoundManager)\n│  └─ main.js                 # Punto de entrada\n├─ public/                    # Assets estáticos\n│  └─ assets/                 # Assets del juego\n│     ├─ images/              # Assets de imagen (fondos, personajes, UI)\n│     └─ audio/               # Assets de audio\n├─ project_docs/              # Documentación del proyecto\n│  ├─ assets_checklist.md     # Seguimiento de assets y requisitos\n│  ├─ timeline.md             # Línea de tiempo de desarrollo y roadmap\n│  └─ pingufly-design_development-documentation.md # Documentación de diseño y desarrollo\n├─ index.html                 # Punto de entrada HTML principal\n├─ vite.config.js             # Configuración de Vite\n└─ package.json               # Configuración NPM y dependencias\n```\n\nCada componente está enfocado en una única responsabilidad, haciendo que la base de código sea más fácil de mantener y extender. Todos los sistemas principales siguen patrones de programación funcional donde es posible, usando clases solo cuando es necesario para implementaciones específicas de Phaser.\n\n## 👥 Contribuyendo\n\nLas contribuciones son lo que hace que la comunidad de código abierto sea un lugar increíble para aprender, inspirar y crear. Cualquier contribución que hagas es **muy apreciada**.\n\n1. Haz un Fork del proyecto\n2. Crea tu rama de características (`git checkout -b feature/CaracteristicaIncreible`)\n3. Haz commit de tus cambios (`git commit -m 'Añadir alguna CaracterísticaIncreible'`)\n4. Haz Push a la rama (`git push origin feature/CaracteristicaIncreible`)\n5. Abre un Pull Request\n\nAl contribuir, sigue los patrones de código establecidos:\n- Usa programación funcional donde sea posible\n- Mantén la responsabilidad única para componentes\n- Sigue las convenciones de nomenclatura establecidas\n- Prioriza las optimizaciones de rendimiento\n- Escribe documentación clara para tus cambios\n\n## 📝 Licencia\n\nDistribuido bajo la Licencia ISC. Consulta `LICENSE` para más información.\n\n## 📞 Contacto\n\n**Sergio Márquez**\n\n[![GitHub](https://img.shields.io/badge/GitHub-sergiomarquezdev-181717?logo=github\u0026style=flat-square)](https://github.com/sergiomarquezdev)\n[![X](https://img.shields.io/badge/X-smarquezdev-%23000000.svg?logo=X\u0026logoColor=white)](https://x.com/smarquezdev)\n[![LinkedIn](https://custom-icon-badges.demolab.com/badge/LinkedIn-Sergio%20Márquez%20Pérez-0A66C2?logo=linkedin-white\u0026logoColor=fff)](https://www.linkedin.com/in/sergio-marquez-perez/)\n[![Email](https://img.shields.io/badge/Email-contacto@sergiomarquez.dev-D14836?logo=gmail\u0026style=flat-square)](mailto:contacto@sergiomarquez.dev)\n[![Web](https://img.shields.io/badge/Web-sergiomarquez.dev-4285F4?logo=google-chrome\u0026style=flat-square)](https://sergiomarquez.dev)\n\nEnlace del proyecto: [https://github.com/sergiomarquezdev/pingufly-2d](https://github.com/sergiomarquezdev/pingufly-2d)\n\n## 🙏 Agradecimientos\n\n* Los juegos originales de Yeti Sports por la inspiración\n* La comunidad de [Phaser](https://phaser.io/) por su excelente documentación y ejemplos\n* [OpenGameArt](https://opengameart.org/) por algunos de los assets del juego\n* A todos los que han contribuido a hacer este proyecto mejor\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsergiomarquezdev%2Fpingufly-2d","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsergiomarquezdev%2Fpingufly-2d","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsergiomarquezdev%2Fpingufly-2d/lists"}