| SDL: Primeros pasos: Programación de Vídeo Juegos | ||
|---|---|---|
| Anterior | ||
A continuación se muestra un ejemplo completo con todo lo que hemos aprendido en este artículo. El ejemplo carga una imagen en la pantalla hasta que el usuario pulsa una tecla para salir. Todavía no hemos visto nada sobre los eventos y las funciones para trabajar con teclado, que veremos en próximos artículos (o eso espero), así que lo que no entendáis no le deis importancia. Podemos ver en el ejemplo que el bucle de nuestro juego, como vimos en el capítulo "Programando un Vídeo Juego", es el "while" que se estará repitiendo hasta que se pulse una tecla. Por ahora es un bucle sencillo, pero es aquí donde tendremos que ir comprobando todos lo que hará nuestro juego: control de colsiones, disparos de enemigos, movimientos del jugador, etc...
En el caso que estés utilizando Anjuta en Linux, vas a tener que ejecutar el programa desde consola para que puede coger el archivo PNG. Ya veremos como solucionar esto en el futuro. El ejecutable lo tienes en el directorio "src/" del proyecto creado por Anjuta. Nuestro programa será algo tal que así:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <SDL.h>
#include <SDL_ttf.h>
#include <SDL_mixer.h>
#include <SDL_image.h>
int main (int argc, char *argv[]) {
SDL_Event event;
SDL_Surface *screen;
SDL_Surface *imagen;
SDL_Rect rect;
int done = 0;
screen = SDL_SetVideoMode(640,480,16, SDL_SWSURFACE | SDL_DOUBLEBUF );
if(!screen){
printf("No se pudo iniciar la pantalla: %s\n", SDL_GetError());
SDL_Quit();
exit(-1);
}
imagen = IMG_Load ("curso.png");
rect.x = 100;
rect.y = 100;
rect.w = imagen->w;
rect.h = imagen->h;
SDL_BlitSurface(imagen, NULL, screen, &rect);
while (done == 0) {
SDL_Flip (screen);
// Comprobando teclas para opciones
while (SDL_PollEvent(&event)) {
// Cerrar la ventana
if (event.type == SDL_QUIT) { done = 1; }
// Pulsando una tecla
if (event.type == SDL_KEYDOWN) {
done = 1;
}
}
}
SDL_FreeSurface(imagen);
SDL_FreeSurface(screen);
SDL_Quit();
printf("\nTodo ha salido bien.\n");
return 0;
}