Skip to content

alecsoc/enfocate-core-lib

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Enfócate+ Core Lib 🧠

Python Version Pygame Version Status

Core Library para el desarrollo e integración de minijuegos en el ecosistema terapéutico ENFÓCATE+.


📋 Tabla de Contenidos


📖 Descripción del Proyecto

ENFÓCATE+ es una plataforma unificada de minijuegos diseñada específicamente para estimular las capacidades cognitivas de personas con TDAH (Trastorno por Déficit de Atención e Hiperactividad).

Esta librería (enfocate-core-lib) provee la arquitectura base, interfaces y estándares técnicos necesarios para que los 12 grupos de desarrollo de la asignatura Objetos y Abstracción de Datos (OAD) integren sus proyectos en el Motor Central (Launcher) de manera unificada, o quien desee integrar nuevos proyectos a la plataforma.

🏛️ Arquitectura Técnica

El sistema implementa un patrón de Inversión de Control (IoC):

  1. El Launcher (Core): Gestiona el ciclo de vida de la aplicación, el bucle principal (Game Loop) y la ventana de renderizado.
  2. Los Juegos (Plugins): Son módulos pasivos que heredan de GameBase y reciben inyección de dependencias (Superficie y Delta Time) desde el motor.

📂 Estructura del Repositorio

El proyecto sigue el estándar Src Layout para garantizar la limpieza del espacio de nombres:

enfocate-core-lib/
├── pyproject.toml       # Configuración de empaquetado y dependencias.
├── README.md            # Documentación oficial.
└── src/
    └── enfocate/        # Paquete importable.
        ├── __init__.py  # Exportación pública.
        ├── errors.py    # Excepciones personalizadas de validación.
        ├── interface.py # Clase Base Abstracta (Contrato de Interfaz).
        ├── metadata.py  # Clase de validación de metadatos (GameMetadata).
        └── settings.py  # Constantes globales (Resolución, Paleta de Colores).

🛠️ Instalación y Configuración

Para desarrollar un juego compatible, se recomienda instalar la librería en modo editable. Esto permite trabajar con las importaciones reales sin compilar el paquete constantemente.

Requisitos Previos

Antes de instalar, asegúrate de tener:

  • Python 3.11+ instalado (Descargar aquí)
  • pip actualizado: python -m pip install --upgrade pip

Paso 1: Descargar

Clona este repositorio o descarga la carpeta en tu computadora.

git clone https://github.com/alecsoc/enfocate-core-lib.git
cd enfocate-core-lib

Paso 2: Instalar en modo desarrollador

Abre la terminal en la carpeta raíz del proyecto (donde está el archivo pyproject.toml) y ejecuta:

pip install -e .

⚠️ IMPORTANTE: No olvides el punto . al final del comando. Eso le dice a Python "instala la carpeta actual". Además, NO se debe mezclar la carpeta de la librería con la de tu juego.

Si todo salió bien, verás un mensaje de éxito. Ahora puedes usar import enfocate en cualquier archivo de tu PC.


🚀 Guía de Implementación

💻 Punto de Entrada (game.py)

Para que un juego sea compatible con el ecosistema ENFÓCATE+, debe heredar de GameBase y proporcionar una instancia de GameMetadata en su constructor.

Además, asegurarse de llamar su archivo principal dónde pondra el contrato de la librería (la subclase que hereda de GameBase) como game.py para consistencia y funcionamiento de la integración final en el Launcher.

Ejemplo:

import pygame
from enfocate import GameBase, GameMetadata, COLORS # <--- COLORS es opcional

class Game(GameBase):
    def __init__(self) -> None:
        # 1. Registro de información técnica del juego
        meta = GameMetadata(
            title="Nombre Del Juego",
            description="Breve descripción.",
            authors=["Nombre Apellido 1", "Nombre Apellido 2"],
            group_number=3 # <--- Aquí poner número que le corresponda a su grupo para no tener conflictos con los que ya estén asignados
        )
        
        # 2. Inyección de metadatos al Core
        super().__init__(meta)
        
        # 3. Inicialización de estado interno
        self.puntuacion = 0

    def on_start(self) -> None:
        """Carga de recursos dinámicos (assets) o crear instancias desde aquí."""
        pass

    def handle_events(self, events) -> None:
        """Hook de eventos. Se sugiere utilizar si desea manejar lógica de eventos por teclado del usuario o bien eventos encapsulados de otras clases pasando como parámetro events."""
        self.instancia.handle_events(events)

    def update(self, dt: float) -> None:
        """Actualización de lógica física y estados (dt = delta time). Importante user el dt como parámetro a sus métodos de actualización para que se sincronicen en la ventana del launcher, de ser necesario."""
        pass

    def draw(self) -> None:
        """Renderizado en la superficie inyectada por el motor. Importante pasar self.surface como parámetro a sus métodos de dibujado para que se dibujen en la ventana del launcher."""
        self.surface.fill(COLORS["carbon_oscuro"]) # Fondo de ejemplo usando COLORS
        self.instancia.draw(self.surface)

🧪 ¿Cómo pruebo mi juego?

La librería incluye un entorno de ejecución independiente para que cada grupo pueda validar su lógica de forma aislada sin necesidad del Launcher.

Para ejecutar el simulador, añada el siguiente punto de entrada al final de su archivo de juego:

if __name__ == "__main__":
    # Ejecuta el mini-motor integrado bajo los estándares del Core
    Game().run_preview()

Ejecución vía terminal:

python game.py

O si usa un archivo aparte main.py, realícelo de la siguiente manera (recomendación):

from src.game import MiJuego

if __name__ == "__main__":
    # Se instancia y se corre. 
    # El Core ya sabe qué hacer porque la lógica está en la base.
    game = Game()
    game.run_preview()

Ejecución vía terminal:

python main.py

Si tu juego se abre y se mueve aquí, funcionará perfectamente en la entrega final; además si siguió el resto de lineamientos establecidos para la realización de su juego de lo que se le impone en la librería.


👥 Equipo de Integración

  • Alejandro Capriles

  • Alexandro Núñez

  • Anelissa Espín

  • Gabriel Garantón

  • José Aguilera

  • Leonardo Di Giorgio

  • Luis Lameda

  • Odett Sayegh


🏫 Créditos

Esta librería fue desarrollada como parte integral del trabajo final de la materia Objetos y Abstracción de Datos.

🎓 Institución Universidad de Oriente — Núcleo Anzoátegui
📚 Materia Objetos y Abstracción de Datos
👨‍🏫 Profesor Ing. Plácido Malavé

Hecho con 💙 para apoyar a personas con TDAH

About

Librería central y estándares de desarrollo para la plataforma Enfócate+, desarrollada para el proyecto final de la cátedra Objetos y Abstracción de Datos (OAD) - UDO.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages