Publicando tu juego — empaquetado y distribución

By Carlos Montiel | Especialista en IA Empresarial
Publicado: 2026-07-28 | Por: Carlos Montiel | Lectura: ~5 minutos

Un juego que solo corre en tu máquina de desarrollo no es un juego terminado. Cerramos el curso empaquetando y distribuyendo lo que construiste.

De "funciona en mi máquina" a "funciona en cualquier máquina"

En la lección anterior decidimos cuándo migrar de C a C++. Ahora, con el motor ya maduro, toca el último paso del ciclo: que alguien que nunca instaló un compilador pueda descargar tu juego y jugarlo con un doble clic. Esto implica resolver dependencias (¿tiene el usuario SDL2 instalado?), compilar para cada plataforma objetivo, y organizar los archivos de una forma que el sistema operativo reconozca como una aplicación válida.

Compilación estática vs. dinámica

Por defecto, tu ejecutable depende de que SDL2 esté instalado como librería dinámica (`.dll`, `.so`, `.dylib`) en la computadora del usuario. La forma más simple de evitar pedirle al usuario que instale nada es distribuir esas librerías dinámicas junto a tu ejecutable, o enlazar estáticamente cuando sea posible.

# Enlazado dinámico (necesitas distribuir las .dll/.so junto al ejecutable) g++ main.cpp -O2 -o juego -lSDL2 -lSDL2_image # Enlazado estático de tu propio código, pero SDL2 sigue siendo dinámica g++ main.cpp -O2 -static-libgcc -static-libstdc++ -o juego -lSDL2

En Windows, la forma más práctica es copiar los archivos `SDL2.dll`, `SDL2_image.dll` (y sus dependencias) a la misma carpeta que tu `.exe` — Windows busca DLLs primero en el directorio del ejecutable.

mi_juego_windows/ ├── juego.exe ├── SDL2.dll ├── SDL2_image.dll ├── libpng16-16.dll └── assets/ ├── sprites/ └── sonidos/

Compilación multiplataforma con CMake

Para no mantener tres sistemas de compilación distintos, seguimos usando el mismo `CMakeLists.txt` de la lección 2, agregando reglas específicas por plataforma cuando haga falta.

cmake_minimum_required(VERSION 3.16) project(MiJuego) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) if(WIN32) set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++") endif() find_package(SDL2 REQUIRED) find_package(SDL2_image REQUIRED) add_executable(juego src/main.cpp) target_link_libraries(juego PRIVATE SDL2::SDL2 SDL2::SDL2main SDL2_image::SDL2_image) # Copia los assets junto al ejecutable automáticamente al compilar add_custom_command(TARGET juego POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/assets $<TARGET_FILE_DIR:juego>/assets)

Compilando en cada plataforma objetivo (o usando compilación cruzada con MinGW desde Linux para generar el `.exe` de Windows sin salir de tu máquina):

mkdir build_release && cd build_release cmake -DCMAKE_BUILD_TYPE=Release .. cmake --build . --config Release

Empaquetando para macOS: el bundle .app

macOS espera que las aplicaciones gráficas vengan empaquetadas como un `.app`, una carpeta con una estructura específica que el Finder reconoce como una sola aplicación.

MiJuego.app/ └── Contents/ ├── Info.plist ├── MacOS/ │ └── juego (el ejecutable compilado) ├── Resources/ │ └── icono.icns └── Frameworks/ ├── SDL2.framework/ └── SDL2_image.framework/
<!-- Info.plist mínimo --> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleExecutable</key> <string>juego</string> <key>CFBundleName</key> <string>MiJuego</string> <key>CFBundleIdentifier</key> <string>com.tunombre.mijuego</string> <key>CFBundleVersion</key> <string>1.0.0</string> </dict> </plist>

Empaquetando para Linux: AppImage

Para Linux, distribuir un binario suelto obliga al usuario a instalar dependencias manualmente. AppImage empaqueta el ejecutable junto con todas sus librerías en un solo archivo ejecutable, sin necesidad de instalación.

mi_juego.AppDir/ ├── AppRun (script que lanza el ejecutable real) ├── mijuego.desktop ├── icono.png └── usr/ ├── bin/ │ └── juego └── lib/ ├── libSDL2.so └── libSDL2_image.so
# Generar el AppImage final con la herramienta appimagetool ./appimagetool-x86_64.AppImage mi_juego.AppDir MiJuego-x86_64.AppImage

Dónde publicar tu juego terminado

Con los ejecutables empaquetados para cada plataforma, las opciones más accesibles para un desarrollador independiente son:

- itch.io: sin costo de entrada, ideal para publicar tu primer juego y recibir retroalimentación real de jugadores. - Steam (a través de Steamworks): requiere una cuota única de registro, pero da acceso a la mayor base de jugadores de PC. - Tu propia página web: la opción con más control, aunque requiere que resuelvas tú mismo el hosting de los archivos de descarga.

Para todas estas plataformas, es buena práctica incluir un `README` con los requisitos mínimos (sistema operativo, controles del juego) y un número de versión claro (`1.0.0`), que te permitirá comunicar actualizaciones futuras sin ambigüedad.

El último uso de tu asistente de IA en este curso

Antes de publicar, pídele a tu asistente de IA que revise tu proyecto completo buscando específicamente: rutas de archivos escritas de forma absoluta (que solo funcionan en tu máquina y romperán el juego en la de un jugador), mensajes de depuración (`printf`, `SDL_Log`) que quedaron activos y no deberían estar en la versión final, y cualquier credencial o dato sensible que se te haya colado en el código fuente si tu juego incluye funciones de red como las de las lecciones 9 y 10. Es una revisión rápida que evita errores vergonzosos en el primer lanzamiento.

Lo que construiste en este curso

Empezamos con la pregunta de por qué combinar C++ con un asistente de IA, configuramos un entorno completo, y construimos Pong desde cero. Le agregamos sprites animados, colisiones físicas reales, guardado persistente, una máquina de estados ordenando el flujo del juego, enemigos con pathfinding, y finalmente lo llevamos a la red como un juego multijugador. Cerramos optimizando su rendimiento, decidiendo con criterio cuándo migrar de C a C++, y hoy lo empaquetamos listo para que cualquiera lo juegue.

Ese es el punto real de este curso: no reemplazar tu criterio como programador con IA, sino usarla para moverte más rápido sin dejar de entender cada línea que corre en tu juego. Lo que sigue depende de ti — el siguiente proyecto, más grande o más ambicioso, ya lo vas a construir solo, con tu asistente de IA como el copiloto que ya sabes dirigir.

Carlos Montiel
Arquitecto de Soluciones IA Empresarial
Especialista en LLMs, Agentes y Orquestación
guatemalia.com/#contacto · info@guatemalia.com

¿Necesitas implementar IA en tu empresa?

Carlos Montiel es arquitecto de soluciones IA empresarial. Implementa LLMs, Agentes, RAG y orquestadores en empresas de Guatemala y Latinoamérica. Contáctalo para una consultoría.

Contactar a Carlos Montiel

info@guatemalia.com