Core Library para el desarrollo e integración de minijuegos en el ecosistema terapéutico ENFÓCATE+.
- Descripción del Proyecto
- Estructura del Repositorio
- Instalación y Configuración
- Guía de Implementación
- ¿Cómo pruebo mi juego?
- Equipo de Integración
- Créditos
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.
El sistema implementa un patrón de Inversión de Control (IoC):
- El Launcher (Core): Gestiona el ciclo de vida de la aplicación, el bucle principal (Game Loop) y la ventana de renderizado.
- Los Juegos (Plugins): Son módulos pasivos que heredan de
GameBasey reciben inyección de dependencias (Superficie y Delta Time) desde el motor.
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).
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.
Antes de instalar, asegúrate de tener:
- Python 3.11+ instalado (Descargar aquí)
- pip actualizado:
python -m pip install --upgrade pip
Clona este repositorio o descarga la carpeta en tu computadora.
git clone https://github.com/alecsoc/enfocate-core-lib.git
cd enfocate-core-libAbre 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.
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)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.pyO 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.pySi 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.
-
Alejandro Capriles
-
Alexandro Núñez
-
Anelissa Espín
-
Gabriel Garantón
-
José Aguilera
-
Leonardo Di Giorgio
-
Luis Lameda
-
Odett Sayegh
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