pctroll { jorge palacios }

desarrollador de juegos, programador, investigador de IA

Entorno SDL / C++ en Windows con MingW y NetBeans

minwg netbeans windows sdl c++

Para quienes tenemos un gusto adquirido por C/C++, y la idea de desarrollar juegos en base a estos poderosos lenguajes por cuanto son considerados como lingua franca en el mundo tecnológico, dejo un tutorial para configurar un entorno o ambiente de trabajo para desarrollar juegos.

¿Por qué estas herramientas? Porque son gratuitas (a excepción de Windows). En principio lo importante es aprender y es recomendable buscar herramientas gratuitas, o muy económicas, para adquirir experiencia y a medida que se va avanzando la inversión de tiempo y dinero puede ser mayor a partir de los resultados adquiridos. Lista la parte filosófica del asunto.

MingW

Ir al siguiente enlace: http://sourceforge.net/projects/mingw/

mingw

web de descarga

mingw

ejecutable del instalador

mingw

"use pre-packaged repository catalogues"

mingw

instalamos en el directorio C:MingW

mingw

opciones adicionales

En las opciones adicionales vamos a seleccionar lo siguiente:

  • C Compiler (que viene por defecto).
  • C++ Compiler.
  • MSYS Basic System.

Toda la instalación se hace al momento directamente desde la web, por lo que si tarde poco o mucho depende del ancho de banda.

Por último es importante agregar los siguientes directorios a las variables de entorno (PATH):

  • C:MinGWbin
  • C:MinGWmsys1.0bin

SDL

Vamos a la página de descarga de SDL 1.2: http://www.libsdl.org/download-1.2.php, y en la sección Development Libraries descargar SDL-devel-1.2.14-mingw32.tar.gz (Mingw32)

sdl

dice MingW, no hay pérdida

Adicionalmente recomiendo descargar de una vez los siguientes agregados:

Para el caso de estos dos paquetes, seleccionamos los que se utilizan con VisualStudio y dicen VC.

sdl_image

sdl_image

sdl_mixer

sdl_mixer

Dentro de cada paquete hay dos directorios importantes:

  • include
  • lib

De forma directa aplicar las siguientes reglas:

  • Todo lo que se encuentre en include hay que colocarlo en un directorio nuevo: C:MinGWincludeSDL.
  • Todos los archivos en lib con extensión .a y .lib deben ir en: C:MinGWlib.
  • Todos los archivos en lib con extensión .dll van en C:WindowsSystem32 (versión 32 bits) o en C:WindowsSysWOW64 (versión 64 bits). Hay que estar bien pendientes con esto.
  • En el caso del paquete principal de SDL, el archivo SDL.dll, se encuentra en el directorio bin.
  • Considerar respaldar todos los archivos .dll en un directorio personal para cuando se decida pasar el ejecutable del juego a otras personas (luego se profundizará sobre el asunto).

NetBeans

Como es de suponerse, vamos al sitio de descarga de NetBeans: http://netbeans.org/downloads/index.html. Creo que es bastante obvia la opción a seleccionar y demás está decir que tienes que tener Java instalado (conocido como JRE o Java Runtime Environment). Puedes verificar si tienes Java, en este link de Oracle. Sino, ahí mismo lo puedes descargar y luego instalar el NetBeans.

netbeans

sitio de descarga

La forma de configurar el IDE para que establezca todas las conexiones, se hace de forma casi directa luego de seleccionar el directorio base. Dejo como referencia mi configuración.

netbeans c++

configuración

Afortunadamente esto se hace una sola vez. Creo que ya estamos listos con la parte de descarga, instalación y configuración básica de las herramientas.

Probar el entorno

Esto es sencillo. Creamos un proyecto nuevo, enlazamos los archivos de las bibliotecas y echamos código. Se escribe en una frase, ahora hay que desglosarlo paso por paso.

Crear un nuevo proyecto de tipo Aplicación C++.

netbeans

nuevo proyecto

netbeans

aplicación c++

Asignar un nombre. Yo le coloqué pruebaSDL.

netbeans

pruebaSDL

Configurar SDL en el proyecto en el panel de Propiedades.

netbeans

propiedades

En la opción Configuration hay que seleccionar All Configurations.

En la categoría Linker (izquierda) colocar los siguientes archivos en la opción Libraries (derecha) en este preciso orden:

  1. libmingw32.a
  2. libSDLmain.a
  3. libSDL.dll.a
  4. opengl32.a
  5. SDL_image.lib
  6. SDL_mixer.lib

Más abajo de Libraries está la opción Additional Options, y ahí hay que escribir textualmente (sin comillas) “-Dmain=SDLmain -mwindows”.

netbeans

configuración - Linker

En la categoría Run hay que seleccionar Output Window en la opción Console Type.

netbeans

configuración - Run

Aplicar todos los cambios realizados, revisando con detenimiento los detalles. Toca modificar el código fuente del único archivo que se tiene para el momento; main.cc.

netbeans

main.cc

Hay que cambiar ese contenido por las siguientes líneas. Si bien el objetivo es primero probar que sirve, dejé ciertos comentarios como para que se tenga idea de lo que hace el código y no dejar a nadie guindando confundido.

#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_mixer.h>

void initSDL()
{
    int anchoVentana = 800;
    int altoVentana = 600;
    int bitsPorPixel = 32;

    // centrar la ventana a crear
    putenv("SDL_VIDEO_WINDOW_POS");
    putenv("SDL_VIDEO_CENTERED=1");
    // inicializacion de SDL
    SDL_Init(SDL_INIT_EVERYTHING);
    // creacion de titulo
    SDL_WM_SetCaption("pruebaSDL", 0);
    // creacion de ventana nueva
    SDL_SetVideoMode(anchoVentana, altoVentana, bitsPorPixel, SDL_HWSURFACE | SDL_SWSURFACE);

    // inicializacion y configuracion de SDL_mixer
    Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024);
    Mix_AllocateChannels(64);
}

void quitSDL()
{
    Mix_CloseAudio();
    Mix_Quit();
    SDL_Quit();
}

/*
 *
 */
int main(int argc, char** argv) {

    bool gameOver = false;
    SDL_Surface* pantalla = 0;
    SDL_Event    e;

    initSDL();
    pantalla = SDL_GetVideoSurface();

    /*
     * Carga de imagen
     */
    SDL_Surface* img = 0;
    SDL_Surface* tmp = 0;
    tmp = IMG_Load("imagen.png");
    img = SDL_DisplayFormatAlpha(tmp);
    SDL_FreeSurface(tmp);

    /*
     * Carga de pista y puesta en marcha
     */
    Mix_Music* bgm = 0;
    bgm = Mix_LoadMUS("Attack_O-DeeJay_C-8240_hifi.mp3");
    Mix_PlayMusic(bgm, -1);

    /*
     * Ciclo de juego
     */
    while (!gameOver)
    {
        /*
         * Recoleccion de eventos
         */
        while (SDL_PollEvent(&e))
        {
            if (e.type == SDL_QUIT)
                gameOver = true;
        }

        // dibujar la imagen 'img' en pantalla
        SDL_BlitSurface(img, 0, pantalla, 0);
        // refrescar pantalla
        SDL_Flip(pantalla);
    }

    SDL_FreeSurface(img);
    Mix_FreeMusic(bgm);

    quitSDL();

    return 0;
}

Descarguen estos assets para realizar la prueba. Consta de un archivo .png como imagen de fondo para la ventana, un archivo .mp3 para el fondo musical y un LEEME.txt con la información sobre el autor de dicho mp3 (el cual fue obtenido de manera totalmente gratuita y sin infringir en violación a los derechos de autor). La imagen y el audio deben colocarlo en el directorio raíz del proyecto (donde se encuentra main.cc).

Para compilar y de inmediato correr el programa, presionar F6 o hacer click en el botón verde de ejecutar (o muy famoso para play).

Me resta decirles que es importante que dejen sus comentarios para saber cómo fue la experiencia, si todo salió bien o, por el contrario, la secuencia de pasos tiene algún desperfecto. Gracias de antemano.

Crédito imagen: Los logos y marcas son propiedad de sus respectivos dueños.

1 Comment

  1. ¿”SDL-devel-1.2.14-mingw32.tar.gz” hay que instalarlo, o solo poner los archivos que comentas, en las carpetas que has sugerido?
    Muchas gracias.

Deja un comentario