Programa en C++ con SDL. Encuentra el fallo del código fuente

Hola, resulta que estoy haciendo un programa en C++ que hace uso de la librería SDL y quiero que se vea una imagen por pantalla y que con el teclado pueda moverla en las 4 direcciones.

Me compila, pero por alguna razón no aparece la imagen por pantalla. A ver si me podéis echar una mano. Gracias:

/***************************************************************/
// Leer, procesar (modificar) y renderizar (dibujar) por MouTio
/***************************************************************/
#include <iostream>
#include <cstdlib>
#include <SDL.h>

using namespace std;
int main() {

SDL_Surface *image, *screen;
SDL_Rect dest;
SDL_Event event;
int done = 0;
atexit(SDL_Quit);
int arriba=0, abajo=0, izquierda=0, derecha=0, mov=10;
// Iniciar SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
cout <<"No se pudo iniciar SDL: %s\n" << SDL_GetError();
exit(1);
}
// Activamos modo de video
screen = SDL_SetVideoMode(800,600,24,SDL_HWSURFACE);
if (screen == NULL) {
cout <<"No se puede inicializar el modo gráfico: \n" << SDL_GetError();
exit(1);

/************************  LEER ************************/
// Cargamos gráfico
image = SDL_LoadBMP("mt.bmp");
if ( image == NULL ) {
cout <<"No pude cargar gráfico: %s\n" << SDL_GetError();
exit(1);
}
// Transparencia: el color verde es transparente en la imagen
SDL_SetColorKey(image, SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(image->format,0,255,0));
// Definimos donde dibujaremos el gráfico
dest.x = 100;
dest.y = 450;
dest.w = image->w;
dest.h = image->h;
/************** INICIO DEL BUCLE PRINCIPAL **************/
// Bucle hasta que pulsemos escape
}while(done == 0) {
// Esperamos la pulsación de alguna tecla
while (SDL_PollEvent(&event) ) {
if (event.type == SDL_KEYDOWN){
    // Esperamos la pulsación de alguna flecha de dirección para movernos o ESCAPE para salir
    if(event.key.keysym.sym == SDLK_UP){ arriba=1; }
    if(event.key.keysym.sym == SDLK_DOWN){ abajo=1; }
    if(event.key.keysym.sym == SDLK_RIGHT){ derecha=1; }
    if(event.key.keysym.sym == SDLK_LEFT){ izquierda=1; }
    if(event.key.keysym.sym == SDLK_ESCAPE){done = 1;}
}
}


/**********************  MODIFICAR **********************/
// Definimos nueva posición del gráfico
if (izquierda){dest.x-=mov;}
if (derecha){dest.x+=mov;}
if (abajo){dest.y+=mov;}
if (arriba){dest.y-=mov;}

/***********************  DIBUJAR ***********************/
// Borramos la imagen anterior
SDL_FillRect(screen,&dest,SDL_MapRGB(screen->format,0,0,0));
// Copiamos el gráfico a la pantalla.
SDL_BlitSurface(image, NULL, screen, &dest);
// Mostramos la pantalla
SDL_Flip(screen);
}
/***************  FIN DEL BUCLE PRINCIPAL ***************/
// liberar superficie
SDL_FreeSurface(image);
SDL_FreeSurface(screen);
return 0;
}
A ver si es esto.
if (screen == NULL) {
cout <<"No se puede inicializar el modo gráfico: \n" << SDL_GetError();
exit(1);

/************************  LEER ************************/
// Cargamos gráfico
image = SDL_LoadBMP("mt.bmp");


Comprueba eso. Si no se puede iniciar el modo gráfico, muestras el error y sales, eso bien. Pero la parte de cargar el gráfico está dentro de ese if, te falta cerrarlo tras el exit.
Menuda tontería, jajajaja. Y yo dándole mil vueltas.

Muchísimas gracias.
2 respuestas