Skip to main content

Arcade Machine SDK

SDK para el desarrollo de juegos arcade compatibles con una máquina arcade unificada

Python Version


Tabla de Contenidos


Descripción

El Arcade Machine SDK es un framework académico desarrollado como parte de la materia Taller de Objetos y Abstracción de Datos de la Universidad de Oriente.

Este SDK provee una interfaz estándar que permite a diferentes equipos desarrollar juegos arcade independientes que posteriormente se integrarán en una única aplicación, permitiendo a los usuarios seleccionar y jugar cualquiera de los juegos disponibles.

Objetivo

Este SDK busca estandarizar el desarrollo de juegos arcade mediante:

Integración y Estandarización:

  • Unificar múltiples juegos en una máquina arcade común
  • Mantener consistencia en la interfaz de usuario
  • Estandarizar interfaces para integración fluida

Principios de Ingeniería de Software:

  • Aplicar Programación Orientada a Objetos (POO)
  • Implementar patrones de diseño reconocidos
  • Desarrollar arquitectura modular y extensible

Colaboración y Escalabilidad:

  • Facilitar trabajo independiente entre equipos
  • Permitir desarrollo paralelo sin conflictos
  • Habilitar crecimiento del sistema con nuevos juegos

Requisitos

  • Python: 3.11 o superior
  • Pygame: 2.6.0 o superior

Instalación

Requisitos Previos

Antes de instalar, asegúrate de tener:

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

Opción 1: Instalación desde PyPI

pip install arcade-machine-sdk

Nota: En algunos sistemas puede ser necesario usar python -m pip install arcade-machine-sdk en lugar de solo pip.

Opción 2: Instalación desde GitHub (Versión de desarrollo)

pip install git+https://github.com/Neritoou/arcade-machine-sdk.git

Opción 3: Usando requirements.txt

Crea un archivo requirements.txt en tu proyecto:

arcade-machine-sdk

# Otras dependencias
pygame>=2.5.0

Luego instala:

pip install -r requirements.txt

Verificar Instalación

Después de instalar, verifica que el SDK esté correctamente instalado:

python -c "from arcade_machine_sdk import GameBase; print('SDK instalado correctamente')"

Si ves el mensaje de confirmación, ¡la instalación fue exitosa!

Actualizar el SDK

Desde PyPI (versión estable):

pip install --upgrade arcade-machine-sdk

Desde GitHub (versión de desarrollo):

pip install --upgrade --force-reinstall git+https://github.com/Neritoou/arcade-machine-sdk.git@main

Documentación del SDK

Nota: Para ejemplos de implementación completos, consulta la carpeta games/example1/ en el Arcade Machine.

Índice


Arquitectura General

El SDK implementa una arquitectura de loop único centralizado:

  • El Core mantiene el loop del juego y la ventana principal
  • Los juegos NO crean su propio loop ni ventana
  • Los juegos implementan métodos que el Core llama por frame

Esto permite integración fluida y transiciones controladas perfectamente por los integradores


Clase GameBase

Clase abstracta base que todos los juegos deben heredar.

Importación

from arcade_machine_sdk import GameBase, GameMeta

Métodos Abstractos (Obligatorios)

Método Parámetros Descripción
handle_events events: list[pygame.event.Event] Procesa eventos de entrada. NO usar pygame.event.get()
update dt: float Actualiza la lógica del juego. dt = segundos desde último frame
render surface: pygame.Surface Dibuja en la surface pasada por parametro. NO llamar pygame.display.flip()

Métodos del Ciclo de Vida (Opcionales)

def start(self, surface: pygame.Surface) -> None:
    super().start(surface)  # Obligatorio

def stop(self) -> None:
    super().stop()  # Obligatorio

Propiedades

Propiedad Tipo Descripción
_running bool Indica si el juego está activo (solo lectura)
__surface pygame.Surface Superficie para dibujar (solo lectura)
metadata GameMeta Metadatos del juego (solo lectura)

Ejecución Independiente en el Main del Juego

from game import Game
from arcade_machine_sdk import GameMeta
import pygame

if not pygame.get_init():
    pygame.init()

metadata = (GameMeta()
            .with_title("Ejemplo 1")
            .with_description("Juego de prueba")
            .with_release_date("16/12/2025")
            .with_group_number(1)
            .add_tag("Plataforma")
            .add_author("Carlos Barranca"))

game = Game(metadata)

if __name__ == "__main__":
    game.run_independently()

Clase GameMeta

Builder para construir metadatos del juego. Todos los campos son obligatorios.

Métodos

Método Parámetro Descripción
with_title str Título del juego
with_description str Descripción del juego
with_release_date str Fecha de salida Original
with_tags list[str] Lista de etiquetas
add_tag str Añade una etiqueta
with_group_number int Número del grupo
with_authors list[str] Lista de autores
add_author str Añade un autor

Propiedades (Solo Lectura)

  • title, description, release_date, tags, group_number, authors

Constantes del SDK

from arcade_machine_sdk import (
    BASE_WIDTH,      # 1024
    BASE_HEIGHT,     # 768
    BASE_RESOLUTION, # (1024, 768)
    DEFAULT_FPS      # 60
)

Usa estas constantes para mantener consistencia entre todos los juegos.


Utilidades

JSON

from arcade_machine_sdk import json

# Cargar
data = json.load("archivo.json")

# Guardar
json.save("archivo.json", data_dict)

Manejo de Rutas

Siempre usa rutas relativas para garantizar que tu juego funcione correctamente en cualquier sistema, independientemente de donde se ejecute el código. La forma en que se construyen las rutas depende de la estructura del proyecto y de dónde se encuentra el código que las utiliza.

Cuando tu juego esté empaquetado (por ejemplo, usando PyInstaller) o está siendo ejecutado desde un directorio diferente al del juego, la ubicación de los archivos puede variar, por lo que es importante construir las rutas de forma flexible. A continuación, te mostramos cómo hacerlo.

:heavy_check_mark: Correcto - Rutas Relativas

El archivo de código debe ser capaz de encontrar la carpeta en la que se encuentren los assets sin importar dónde se ejecute el juego. Esto significa que necesitamos calcular dinámicamente la ubicación base del proyecto, teniendo en cuenta la estructura de directorios.

En el ejemplo siguiente, se parte del supuesto de que el script donde se encuentra el código puede estar en una subcarpeta dentro del proyecto. Por ejemplo, game/src/util/, pero los assets están en una carpeta superior, en el directorio raíz del proyecto.

from pathlib import Path

# Obtiene el directorio donde se encuentra el archivo actual (por ejemplo, "game/src/util/")
GAME_DIR = Path(__file__).resolve().parent  # Esto te da el directorio donde está el script actual

# Ahora, accede a la carpeta 'assets' desde la raíz del proyecto
ASSETS_DIR = GAME_DIR.parents[2] / "assets"  # Subimos 2 directorios hacia la raíz del proyecto

# Ruta al archivo de imagen dentro de assets -> raiz/assets/player.png
IMAGE_PATH = ASSETS_DIR / "player.png"

# Cargar el recurso
player_img = pygame.image.load(str(IMAGE_PATH))

❌ Incorrecto - Rutas Absolutas

Evita usar rutas absolutas como "C:/Users/.../game/assets/player.png" o "/home/user/game/assets/player.png". Las rutas absolutas son específicas para el sistema de archivos de tu máquina y no son portables a otros entornos, lo que hace que tu código no sea ejecutable en otras computadoras o plataformas.

# NO hacer esto - solo funciona en tu computadora
player_img = pygame.image.load("C:/Users/Juan/Desktop/game/assets/player.png")
player_img = pygame.image.load("/home/juan/proyecto/assets/player.png")

# NO hacer esto - puede fallar si se ejecuta desde otro directorio
player_img = pygame.image.load("assets/player.png")

Casos de uso a evitar

  • Crear ventanas con pygame.display.set_mode()
  • Llamar pygame.display.flip() o pygame.display.update()
  • Usar pygame.event.get() directamente
  • Crear loops propios con while
  • Hardcodear resoluciones o FPS
  • Hardcodear rutas absolutas (ej: "C:/Users/..." o "/home/user/...")

🎓 Proyecto Académico

Este SDK fue desarrollado como parte del proyecto integrador de la asignatura **Taller de Objetos y Abstracción de Datos** en la Universidad de Oriente.


Hecho por los Integradores del Proyecto Arcade Machine

⬆ Volver arriba

Metadata

Release files for arcade-machine-sdk 1.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for arcade-machine-sdk 1.0.3
File Size Uploaded Provenance
arcade_machine_sdk-1.0.3.tar.gz 12.1 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for arcade-machine-sdk 1.0.3
File Interpreter ABI Platform
arcade_machine_sdk-1.0.3-py3-none-any.whl Python 3 none any Details

Total release size: 22.1 kB

Release files / arcade_machine_sdk-1.0.3.tar.gz

Download URL arcade_machine_sdk-1.0.3.tar.gz
Size 12.1 kB
Tags Source
SHA-256 checksum
How to use checksums
4c369d39ae431b7bc223f2638607152e536804b3f1e0271d87712c1e6344b7ce
BLAKE2b-256 checksum
How to use checksums
074612ad57868869fe1763197199daef6e823170fb427544ffa1be7f71663759
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release files / arcade_machine_sdk-1.0.3-py3-none-any.whl

Download URL arcade_machine_sdk-1.0.3-py3-none-any.whl
Size 10.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6903b74e64b1a9948d577eba030ce7195353cd220000e9365b73660f2b89d3a7
BLAKE2b-256 checksum
How to use checksums
e4a3d0ed95d783c5130bbc2f9bbd6efb7f1b621b3f68bc510602b2e661f9e34b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Security for arcade-machine-sdk 1.0.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page