{"id":28270172,"url":"https://github.com/felipesanchez-dev/laberinto-de-moustros","last_synced_at":"2025-08-21T12:46:47.349Z","repository":{"id":291857760,"uuid":"978991050","full_name":"felipesanchez-dev/Laberinto-de-Moustros","owner":"felipesanchez-dev","description":null,"archived":false,"fork":false,"pushed_at":"2025-05-07T14:41:13.000Z","size":2653,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-17T03:42:03.312Z","etag":null,"topics":["pygame","python"],"latest_commit_sha":null,"homepage":"","language":"Python","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/felipesanchez-dev.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-05-06T20:28:22.000Z","updated_at":"2025-05-08T01:14:08.000Z","dependencies_parsed_at":"2025-06-17T03:31:47.718Z","dependency_job_id":"d2488380-a7eb-4422-90ad-0f7da8e9fae5","html_url":"https://github.com/felipesanchez-dev/Laberinto-de-Moustros","commit_stats":null,"previous_names":["felipesanchez-dev/laberinto-de-moustros"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/felipesanchez-dev/Laberinto-de-Moustros","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipesanchez-dev%2FLaberinto-de-Moustros","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipesanchez-dev%2FLaberinto-de-Moustros/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipesanchez-dev%2FLaberinto-de-Moustros/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipesanchez-dev%2FLaberinto-de-Moustros/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/felipesanchez-dev","download_url":"https://codeload.github.com/felipesanchez-dev/Laberinto-de-Moustros/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipesanchez-dev%2FLaberinto-de-Moustros/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271484533,"owners_count":24767765,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-21T02:00:08.990Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["pygame","python"],"created_at":"2025-05-20T16:17:41.052Z","updated_at":"2025-08-21T12:46:47.156Z","avatar_url":"https://github.com/felipesanchez-dev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🐉 Laberinto de Moustros\n¡Bienvenido a **Laberinto de Monstruos**! Un emocionante juego 2D de acción y aventura, desarrollado en Python con la popular librería **PyGame**.\n\nEste proyecto es **open source**. Se ha puesto especial énfasis en la **Programación Orientada a Objetos (POO)** con el fin de crear una experiencia que no solo sea divertida, sino también profundamente didáctica.\n\n## 📜 Sobre el Juego\n\nEn **Laberinto de Monstruos**, te encontrarás en una misteriosa isla habitada por criaturas hostiles. Tu misión es clara: explorar, combatir y superar a todos los monstruos y jefes formidables que custodian cada rincón. Solo al vencer a los guardianes de la isla podrás desbloquear el portal escondido y asegurar tu escape.\n\nEstarás equipado con un variado arsenal de espadas y contarás con habilidades mágicas como regeneración, hechizos de daño en área ¡y mucho más! Prepárate para una aventura desafiante y entretenida. **Ten en cuenta que si tu contador de vida llega a cero (indicando que has muerto), el juego se reiniciará completamente sin guardar tus avances. ¡Esto añade una capa extra de dificultad a tu misión!**\n\n## ✨ Características Principales\n\n* **Exploración 2D:** Navega por una isla llena de secretos y peligros.\n* **Combate Dinámico:** Enfréntate a diversos monstruos y jefes desafiantes.\n* **Arsenal Variado:** Utiliza diferentes espadas para adaptarte a cada combate.\n* **Poderes Mágicos:** Desata habilidades como regeneración, daño de área y más.\n* **Progresión:** Derrota jefes para desbloquear el portal de escape.\n* **Educativo:** Desarrollado con POO y PyGame, ideal para aprender y ver conceptos en acción.\n\n## 🎮 Controles\n\nPara navegar y luchar en la isla, necesitarás dominar los siguientes controles:\n\n* **Movimiento:**\n    * `⬆` - Mover Arriba\n    * `⬇` - Mover Abajo\n    * `⬅` - Mover Izquierda\n    * `➡` - Mover Derecha\n    *(El juego permite movimiento en 8 direcciones, incluyendo diagonales).*\n* **Cambiar de Arma:** Tecla `Q`\n* **Cambiar de Poder Mágico:** Tecla `W`\n* **Atacar / Usar Habilidad:** `Barra Espaciadora`\n\n## 👨‍💻 Desarrollo y Código Fuente\n\nEste juego fue concebido y desarrollado como respuesta a una prueba técnica. El código fuente está completamente disponible para ti. ¡Siéntete libre de explorarlo, utilizarlo y modificarlo! Esperamos que te sirva como herramienta de aprendizaje y experimentación.\n\n## 📚 ¡Tutorial Completo Próximamente!\n\nComo parte de este proyecto, se ha realizado una **grabación completa de más de 10 horas** que documenta todo el proceso de desarrollo del juego, paso a paso. Este material se publicará en los próximos días en mi 🌐 **Sitio Web:** [felipesanchezdev.site](https://felipesanchezdev.site).\n\nActualmente, el sitio web se encuentra en mantenimiento mientras se implementa una nueva sección de blog. El tutorial completo se publicará en dicha sección tan pronto como esté disponible. ¡Mantente atento a las actualizaciones!\n\n\nEl objetivo es ofrecer un **tutorial exhaustivo y explicativo**, detallando qué significa cada línea de código y cómo se integran los diferentes componentes del juego. ¡Una oportunidad única para ver el desarrollo de un juego con PyGame desde cero!\n\n---\n\n¡Espero que disfrutes de **Laberinto de Monstruos** y que el código te sea de gran utilidad en tu camino de aprendizaje con Python y PyGame!\n\n---\n## 📁 Estructura del Proyecto\n```bash\nLaberinto de Moustros/\n│\n├── .gitignore         \n├── README.md            # 📖 Documentación y guía del proyecto\n├── requirements.txt     # 📦 Dependencias necesarias para ejecutar el juego\n├── .vscode/\n│   └── settings.json    # ⚙️ Configuración para Visual Studio Code\n│\n├── client/\n│   │ \n│   ├── audio/\n│   │ \n│   ├── graphics/        # 🎨 Gráficos y sprites\n│   │   ├── font/        # 🔤 Fuentes tipográficas\n│   │   ├── grass/       # 🌱 Sprites de césped\n│   │   ├── monsters/    # 👾 Sprites de monstruos\n│   │   ├── objects/     # 🗝️ Objetos del mapa\n│   │   ├── particles/   # ✨ Efectos de partículas\n│   │   ├── player/      # 🧑‍🎮 Sprites del jugador\n│   │   ├── test/        # 🧪 Recursos de prueba\n│   │   ├── tilemap/     # 🧩 Tiles del mapa\n│   │   └── weapons/     # ⚔️ Sprites de armas\n│   │\n│   ├── map/             # 🗺️ Mapas en formato CSV\n│   │   ├── map_Details.csv\n│   │   ├── map_Entities.csv\n│   │   ├── map_Floor.csv\n│   │   ├── map_FloorBlocks.csv\n│   │   ├── map_Grass.csv\n│   │   └── map_Objects.csv\n│   │\n│   └── src/             # 💻 Código fuente principal\n│       ├── debug.py         # 🐞 Depuración en pantalla\n│       ├── enemy.py         # 👹 Lógica de enemigos\n│       ├── entity.py        # 🧬 Entidad base (jugador, enemigos)\n│       ├── level.py         # 🏞️ Lógica del nivel y mapa\n│       ├── magic.py         # 🪄 Magias y habilidades\n│       ├── main.py          # 🚀 Punto de entrada del juego\n│       ├── particles.py     # 💨 Efectos de partículas animadas\n│       ├── player.py        # 🧑‍🎮 Lógica del jugador\n│       ├── settings.py      # ⚙️ Configuración general y constantes\n│       ├── support.py       # 🛠️ Funciones de soporte (carga de recursos)\n│       ├── tile.py          # 🧱 Lógica de los tiles del mapa\n│       ├── ui.py            # 🖥️ Interfaz gráfica de usuario\n│       ├── upgrade.py       # ⬆️ Menú de mejoras del jugador\n│       ├── weapon.py        # ⚔️ Lógica de armas\n│       └── __pycache__/     # 🗑️ Archivos temporales de Python\n```\n\u003cbr\u003e \u003cbr\u003e\n\n# 📄 Documentación\n##  📁 `main.py`\n\u003e **Ubicación:** `client/src/main.py`  \n\u003e **Propósito:** Punto de entrada principal del juego **Laberinto de Moustros**. Inicializa la ventana, el bucle principal y la música, y gestiona los eventos globales.\n\n---\n\n## Tabla de Contenidos\n- [1. Importaciones](#1-importaciones)\n- [2. Clase Game](#2-clase-game)\n  - [2.1. `__init__`](#21-__init__)\n  - [2.2. `run`](#22-run)\n- [3. Ejecución del Juego](#3-ejecución-del-juego)\n- [4. Eventos y Controles](#4-eventos-y-controles)\n- [5. Notas sobre el Audio](#5-notas-sobre-el-audio)\n- [6. Dependencias](#6-dependencias)\n- [7. Ejemplo de Ejecución](#7-ejemplo-de-ejecución)\n---\n## 1. Importaciones\n```python\nimport socket\nimport pygame, sys\nfrom settings import *\nfrom level import Level\n```\n- **socket:** (No utilizado directamente en este archivo, pero preparado para futuras funciones de red).\n- **pygame, sys:** Librerías principales para gráficos, eventos y cierre del juego.\n- **settings:** Importa constantes globales como `WIDTH`, `HEIGTH`, `FPS`, `WATER_COLOR`, etc.\n- **Level:** Clase que gestiona la lógica del nivel, sprites y el jugador.\n---\n## 2. Clase `Game`\nLa clase principal que representa el ciclo de vida del juego.\n### 2.1. `__init__`\n```python\ndef __init__(self):\n    pygame.init()\n    self.screen = pygame.display.set_mode((WIDTH,HEIGTH))\n    pygame.display.set_caption('Laberinto de Moustros')\n    self.clock = pygame.time.Clock()\n    self.level = Level()\n    main_sound = pygame.mixer.Sound('../audio/main.ogg')\n    main_sound.set_volume(0.2)\n    main_sound.play(loops = -1)\n```\n- **Inicialización de Pygame:** Prepara todos los módulos de Pygame.\n- **Ventana:** Crea la ventana del juego con el tamaño definido en `settings.py`.\n- **Título:** Establece el nombre de la ventana.\n- **Reloj:** Controla los FPS del juego.\n- **Nivel:** Instancia la clase `Level`, que contiene toda la lógica del mapa, jugador y enemigos.\n- **Música:** Carga y reproduce en bucle la música principal del juego.\n---\n### 2.2. `run`\n```python\ndef run(self):\n    while True:\n        for event in pygame.event.get():\n            if event.type == pygame.QUIT:\n                pygame.quit()\n                sys.exit()\n            if event.type == pygame.KEYDOWN:\n                if event.key == pygame.K_m:\n                    self.level.toggle_menu()\n\n        self.screen.fill(WATER_COLOR)\n        self.level.run()\n        pygame.display.update()\n        self.clock.tick(FPS)\n```\n- **Bucle principal:** Se ejecuta indefinidamente hasta que el usuario cierra la ventana.\n- **Gestión de eventos:**\n  - **Salir:** Si el usuario cierra la ventana, termina el programa limpiamente.\n  - **Tecla `M`:** Alterna el menú de mejoras del jugador.\n- **Dibujo:**\n  - **Fondo:** Rellena la pantalla con el color del agua (`WATER_COLOR`).\n  - **Nivel:** Llama al método `run()` de la clase `Level` para actualizar y dibujar todos los elementos del juego.\n  - **Actualización:** Refresca la pantalla y mantiene la velocidad de fotogramas constante.\n---\n## 3. Ejecución del Juego\n```python\nif __name__ == '__main__':\n    game = Game()\n    game.run()\n```\n- Si el archivo se ejecuta directamente, crea una instancia de `Game` y llama a su método `run()` para iniciar el juego.\n---\n## 4. Eventos y Controles\n- **Cerrar ventana:** Sale del juego.\n- **Tecla `M`:** Abre/cierra el menú de mejoras del jugador.\n---\n## 5. Notas sobre el Audio\n- El archivo de audio principal debe estar en `client/audio/main.ogg`.\n- El volumen está reducido al 20% para no ser invasivo.\n- La música se reproduce en bucle infinito durante toda la partida.\n---\n## 6. Dependencias\n- [pygame](https://www.pygame.org/)  \n- Python 3.x  \n- Archivos y carpetas definidos en `settings.py` y `level.py`\n---\n## 7. Ejemplo de Ejecución\n```bash\npython client/src/main.py\n```\n---\n## 📝 Resumen\n\nEste archivo es el **corazón** del juego: inicializa la ventana, la música, el bucle principal y delega la lógica del juego a la clase `Level`. Es el punto de partida para cualquier modificación global del comportamiento del juego.\n\n---\n\n##  📁 `player.py`\n\n\u003e **Ubicación:** `client/src/player.py`  \n\u003e **Propósito:** Define la clase `Player`, que representa al jugador principal del juego, gestionando su movimiento, ataques, magias, animaciones, estadísticas y lógica de muerte/reinicio.\n\n---\n\n## 🧩 Paradigma: Programación Orientada a Objetos (POO)\n\nEste archivo es un claro ejemplo de **POO** en Python.  \nLa clase `Player` hereda de la clase base `Entity`, encapsulando atributos y comportamientos propios del jugador.  \nEsto permite reutilizar y extender funcionalidades, facilitando la mantenibilidad y escalabilidad del código.\n\n---\n\n## Tabla de Contenidos\n\n- [1. Importaciones](#1-importaciones)\n- [2. Clase Player](#2-clase-player)\n  - [2.1. Inicialización y atributos](#21-inicialización-y-atributos)\n  - [2.2. Métodos principales](#22-métodos-principales)\n- [3. Principales responsabilidades](#3-principales-responsabilidades)\n- [4. Notas sobre el diseño](#4-notas-sobre-el-diseño)\n- [5. Ejemplo de uso](#5-ejemplo-de-uso)\n\n---\n\n## 1. Importaciones\n\n```python\nimport pygame\nfrom settings import *           # Constantes y diccionarios globales\nfrom support import import_folder\nfrom entity import Entity        # Clase base para entidades móviles\n```\n\n---\n\n## 2. Clase `Player`\n\n### 2.1. Inicialización y atributos\n\n- **Herencia:**  \n  `Player` hereda de `Entity`, lo que le otorga capacidades de movimiento, animación y colisiones.\n- **Atributos principales:**\n  - `image`, `rect`, `hitbox`: Gráficos y colisiones.\n  - `animations`: Diccionario de animaciones por estado.\n  - `status`: Estado actual (ej: 'down', 'up_attack', etc).\n  - `attacking`, `attack_cooldown`, `attack_time`: Control de ataques.\n  - `weapon`, `magic`: Arma y magia equipadas, con índices para cambiar entre ellas.\n  - `stats`, `max_stats`, `upgrade_cost`: Estadísticas y mejoras del jugador.\n  - `health`, `energy`, `exp`, `speed`: Valores actuales de vida, energía, experiencia y velocidad.\n  - `vulnerable`, `hurt_time`, `invulnerability_duration`: Control de daño e invulnerabilidad temporal.\n  - `is_dead`, `trigger_game_restart`: Lógica de muerte y reinicio del juego.\n\n### 2.2. Métodos principales\n\n- **import_player_assets:**  \n  Carga todas las animaciones del jugador desde los recursos gráficos.\n\n- **input:**  \n  Gestiona la entrada del usuario (movimiento, ataque, magia, cambio de arma/magia).  \n  Si el jugador está muerto, ignora las entradas.\n\n- **get_status:**  \n  Actualiza el estado (`status`) del jugador según su movimiento y acciones.\n\n- **cooldowns:**  \n  Controla los tiempos de espera para ataques, cambios de arma/magia e invulnerabilidad.\n\n- **animate:**  \n  Actualiza el frame de animación según el estado actual y aplica efectos visuales (parpadeo al recibir daño).\n\n- **get_full_weapon_damage / get_full_magic_damage:**  \n  Calculan el daño total considerando estadísticas y arma/magia equipada.\n\n- **energy_recovery:**  \n  Recupera energía automáticamente según la estadística de magia.\n\n- **update:**  \n  Método principal llamado cada frame.  \n  Gestiona entradas, actualizaciones de estado, movimiento, recuperación de energía, lógica de muerte y animación.\n\n---\n\n## 3. Principales responsabilidades\n\n- **Movimiento y animación:**  \n  El jugador puede moverse en 4 direcciones y tiene animaciones para cada estado (idle, ataque, etc).\n\n- **Ataques y magias:**  \n  Permite atacar con armas o lanzar magias, cada una con su propio cooldown y efectos.\n\n- **Gestión de estadísticas:**  \n  Vida, energía, ataque, magia, velocidad y experiencia, con posibilidad de mejorar mediante el menú de upgrades.\n\n- **Invulnerabilidad temporal:**  \n  Tras recibir daño, el jugador es invulnerable durante un breve periodo (efecto parpadeo).\n\n- **Cambio de arma y magia:**  \n  El jugador puede alternar entre diferentes armas y magias disponibles.\n\n- **Muerte y reinicio:**  \n  Si la vida llega a 0, se activa la bandera `is_dead` y se llama a la función de reinicio del juego.\n\n---\n\n## 4. Notas sobre el diseño\n\n- **Extensible:**  \n  Gracias a la herencia y la separación de responsabilidades, es fácil añadir nuevas armas, magias o comportamientos.\n\n- **Encapsulamiento:**  \n  Los atributos y métodos están bien organizados, facilitando el mantenimiento y la comprensión del código.\n\n- **Reutilización:**  \n  Al heredar de `Entity`, se evita duplicar lógica común entre jugador y enemigos.\n\n---\n\n## 5. Ejemplo de uso\n\n```python\n# Creación de un jugador en el juego (dentro de Level o similar)\nplayer = Player(\n    pos=(100, 100),\n    groups=all_sprites,\n    obstacle_sprites=obstacles,\n    create_attack=crear_ataque,\n    destroy_attack=destruir_ataque,\n    create_magic=crear_magia,\n    trigger_game_restart=reiniciar_juego\n)\n```\n\n---\n\n## 📝 Resumen\n\nEl archivo `player.py` es un pilar fundamental del juego, implementando toda la lógica y comportamiento del personaje principal bajo un enfoque orientado a objetos.  \nPermite una experiencia de juego fluida, personalizable y fácilmente ampliable.\n\n---\n\n##  📁 `ui.py`\n\u003e **Ubicación:** `client/src/ui.py`  \n\u003e **Propósito:** Gestiona y dibuja la interfaz gráfica de usuario (UI) del juego, mostrando barras de vida, energía, experiencia, armas y magias equipadas.\n\n---\n\n## 🧩 Paradigma: Programación Orientada a Objetos (POO)\n\nLa clase `UI` encapsula toda la lógica y los datos relacionados con la interfaz gráfica del jugador.  \nEsto permite separar claramente la presentación visual del resto de la lógica del juego, facilitando la mantenibilidad y la extensión del código.\n\n---\n\n## Tabla de Contenidos\n\n- [1. Importaciones](#1-importaciones)\n- [2. Clase UI](#2-clase-ui)\n  - [2.1. Inicialización y atributos](#21-inicialización-y-atributos)\n  - [2.2. Métodos principales](#22-métodos-principales)\n- [3. Principales responsabilidades](#3-principales-responsabilidades)\n- [4. Notas sobre el diseño](#4-notas-sobre-el-diseño)\n- [5. Ejemplo de uso](#5-ejemplo-de-uso)\n\n---\n\n## 1. Importaciones\n\n```python\nimport pygame\nfrom settings import *  # Constantes y diccionarios globales\n```\n\n---\n\n## 2. Clase `UI`\n\n### 2.1. Inicialización y atributos\n\n- **display_surface:**  \n  Superficie principal donde se dibuja la UI (la ventana del juego).\n- **font:**  \n  Fuente utilizada para los textos de la interfaz.\n- **health_bar_rect, energy_bar_rect, experience_bar_rect:**  \n  Rectángulos que definen la posición y tamaño de las barras de vida, energía y experiencia.\n- **weapon_graphics, magic_graphics:**  \n  Listas de imágenes de armas y magias, cargadas desde los recursos definidos en `settings.py`.\n\n### 2.2. Métodos principales\n\n- **show_bar(current, max_amount, bg_rect, color):**  \n  Dibuja una barra de progreso (vida, energía, experiencia) con su fondo y borde.\n\n- **show_exp(exp):**  \n  Muestra la cantidad actual de experiencia en la esquina inferior derecha de la pantalla.\n\n- **selection_box(left, top, has_switched):**  \n  Dibuja una caja de selección para indicar el arma o magia equipada, resaltando si ha habido un cambio reciente.\n\n- **weapon_overlay(weapon_index, has_switched):**  \n  Muestra el sprite del arma equipada en la interfaz, usando la caja de selección.\n\n- **magic_overlay(magic_index, has_switched):**  \n  Muestra el sprite de la magia equipada en la interfaz, usando la caja de selección.\n\n- **display(player):**  \n  Método principal que dibuja todos los elementos de la interfaz según el estado actual del jugador.\n\n---\n\n## 3. Principales responsabilidades\n\n- **Visualización de estadísticas:**  \n  Muestra de forma clara y visual la vida, energía y experiencia del jugador.\n- **Equipamiento:**  \n  Indica qué arma y magia están equipadas actualmente, con sprites y cajas de selección.\n- **Feedback visual:**  \n  Resalta los cambios de arma/magia y muestra la experiencia de forma destacada.\n\n---\n\n## 4. Notas sobre el diseño\n\n- **Separación de responsabilidades:**  \n  Toda la lógica de la interfaz está contenida en una sola clase, facilitando su modificación y extensión.\n- **Escalabilidad:**  \n  Es sencillo añadir nuevas barras, iconos o elementos visuales siguiendo el mismo patrón.\n- **Reutilización:**  \n  Los métodos como `show_bar` y `selection_box` pueden ser reutilizados para otros elementos visuales.\n\n---\n\n## 5. Ejemplo de uso\n\n```python\n# En el bucle principal del juego, tras actualizar el estado del jugador:\nui = UI()\n...\nui.display(player)\n```\n\n---\n\n## 📝 Resumen\n\nEl archivo `ui.py` es esencial para la experiencia de usuario, proporcionando información visual clara y atractiva sobre el estado del jugador y sus recursos.  \nSu diseño orientado a objetos permite mantener el código organizado y fácilmente ampliable.\n\n---\n\n# Guía de Instalación: Laberinto de Monstruos\n\nEsta guía te ayudará a configurar el entorno de desarrollo para el proyecto \"Laberinto de Monstruos\". Se recomienda el uso de entornos virtuales de Python para gestionar las dependencias del proyecto de forma aislada.\n\n## Requisitos Previos\n\n* **Python 3.x:** Asegúrate de tener Python 3 instalado en tu sistema. Puedes descargarlo desde [python.org](https://www.python.org/).\n* **Git:** Necesitarás Git para clonar el repositorio. Puedes descargarlo desde [git-scm.com](https://git-scm.com/).\n\n## Pasos de Instalación\n\n### 1. Clonar el Repositorio\n\nPrimero, clona el repositorio del proyecto en tu máquina local. Abre tu terminal o consola y ejecuta el siguiente comando:\n\n```sh\ngit clone https://github.com/felipesanchez-dev/Laberinto-de-Moustros.git\n```\n\nUna vez completada la clonación, navega al directorio del proyecto:\n\n```sh\ncd Laberinto-de-Moustros\n```\n*Es importante que los siguientes comandos se ejecuten desde la raíz de este directorio (`Laberinto-de-Moustros`).*\n\n### 2. Configurar el Entorno Virtual\n\nCrear un entorno virtual es una buena práctica para aislar las dependencias de tu proyecto.\n\n#### macOS\n\n1.  **Crea el entorno virtual:**\n    ```bash\n    python3 -m venv venv\n    ```\n2.  **Activa el entorno virtual:**\n    ```bash\n    source venv/bin/activate\n    ```\n    *Tu prompt de terminal debería cambiar para indicar que el entorno `(venv)` está activo.*\n\n#### Windows\n\n1.  **Crea el entorno virtual:**\n    ```bash\n    python -m venv venv\n    ```\n    *(Si tienes múltiples versiones de Python, podrías necesitar usar `py -3 -m venv venv` o `python3 -m venv venv` si `python` no apunta a Python 3).*\n2.  **Activa el entorno virtual:**\n    * Si usas **Command Prompt (CMD)**:\n        ```bash\n        venv\\Scripts\\activate.bat\n        ```\n    * Si usas **PowerShell**:\n        ```bash\n        .\\venv\\Scripts\\Activate.ps1\n        ```\n        *(Nota: Si encuentras un error relacionado con la política de ejecución de scripts en PowerShell, puede que necesites ejecutar `Set-ExecutionPolicy Unrestricted -Scope Process` y luego intentar activar el entorno nuevamente).*\n    * Si usas **Git Bash** (u otro emulador de bash):\n        ```bash\n        source venv/Scripts/activate\n        ```\n    *Tu prompt de terminal debería cambiar para indicar que el entorno `(venv)` está activo.*\n\n#### Linux\n\n1.  **Crea el entorno virtual:**\n    ```bash\n    python3 -m venv venv\n    ```\n2.  **Activa el entorno virtual:**\n    ```bash\n    source venv/bin/activate\n    ```\n    *Tu prompt de terminal debería cambiar para indicar que el entorno `(venv)` está activo.*\n\n### 3. Instalar Dependencias\n\nCon el entorno virtual **activado** (deberías ver `(venv)` al inicio de tu prompt), instala las dependencias del proyecto listadas en el archivo `requirements.txt`:\n\n```sh\npip install -r requirements.txt\n```\n\n### 4. Ejecutar la Aplicación\n\nUna vez que las dependencias se hayan instalado correctamente y con el entorno virtual aún activado, puedes ejecutar la aplicación cliente. Navega al directorio del cliente y ejecuta el script principal:\n\n```sh\ncd client/src\npython main.py\n```\n\nO, alternativamente, puedes ejecutarlo directamente desde la raíz del proyecto (`Laberinto-de-Moustros`):\n\n```sh\npython client/src/main.py\n```\n\n### 5. Desactivar el Entorno Virtual\n\nCuando hayas terminado de trabajar en el proyecto, puedes desactivar el entorno virtual ejecutando el siguiente comando en tu terminal:\n\n```bash\ndeactivate\n```\nEsto te devolverá a tu shell global de Python.\n\n\u003cbr\u003e \u003cbr\u003e\n## ✨ Imagenes\n\n| ![Pantalla del juego](https://github.com/felipesanchez-dev/Laberinto-de-Moustros/blob/main/image/game.jpg) |\n\n\n\n# 📌 Nota Importante sobre Recursos Gráficos\n\nPara acelerar el desarrollo de este proyecto, se han utilizado recursos visuales del excelente paquete **[Ninja Adventure Asset Pack](https://pixel-boy.itch.io/ninja-adventure-asset-pack)**, una creación de **Pixel-boy**.\n\n\u003e ✨ ¡Todo el reconocimiento y los créditos por el arte son para ellos! 🎨\n\n---\n\n## 💬 ¡Conectemos!\n\n¿Tienes alguna pregunta, ideas innovadoras o simplemente te apetece compartir tu experiencia desarrollando proyectos similares? ¡Será un placer saber de ti! 😊 No dudes en contactarme a través de los siguientes canales:\n\n* 📧 **Correo Electrónico:** [felipe@felipesanchezdev.site](mailto:felipe@felipesanchezdev.site)\n* 🔗 **LinkedIn:** [felipereyessa](https://www.linkedin.com/in/felipereyessa)\n* 🌐 **Sitio Web:** [felipesanchezdev.site](https://felipesanchezdev.site)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelipesanchez-dev%2Flaberinto-de-moustros","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffelipesanchez-dev%2Flaberinto-de-moustros","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelipesanchez-dev%2Flaberinto-de-moustros/lists"}