La SDL (Simple DirectMedia Layer) est une bibliothèque logicielle libre. Son API (Application Programming Interface) est utilisée pour créer des applications multimédias en deux dimensions pouvant comprendre du son comme les jeux vidéo, les démos graphiques, les émulateurs, etc. (Wikipédia)
Pour un premier projet, il faut préalablement installer la SDL.
Télécharger l'archive de la SDL et la dézipper dans "c:\MinGW". Vous devez obtenir l’arborescence ci-dessous :
Faire un clic droit sur le projet et cliquer sur "Properties".
Dans la sous-catégorie "Linker", sélectionner "All configurations" puis taper le chemin "c:\MinGW\sdl\lib" dans "Additional Library Directories", puis cliquer sur le bouton "..." de la ligne "Libraries".
Cliquer sur le bouton "Add Library...".
Sélectionner le fichier "libmingw32.a" du dossier "c:\MinGW\lib".
Cliquer à nouveau sur le bouton "Add Library..." et sélectionner le fichier "libSDL2main.a" du dossier "c:\MinGW\sdl\lib".
Faire de même pour les fichiers "libSDL2.a" et "libSDL2.dll.a" du dossier "c:\MinGW\sdl\lib". Vous devez obtenir l'affichage ci-dessous. Cliquer sur "OK".
Dans la sous-catégorie "C Compiler", sélectionner "All configurations" puis taper le chemin "c:\MinGW\sdl\include" dans "Include directories", puis cliquer sur "OK".
Enfin, pour terminer, copier le fichier "SDL2.dll" (à prendre dans le dossier "c:\MinGW\sdl\bin") dans le dossier où se trouve le .exe de vortre projet.
Le code ci-dessous ouvre une fenêtre de 800x600 pixels avec un fond blanc, dessine un rectangle rouge de 320x240.
#include <stdio.h>
#include <stdlib.h>
#include <SDL.h>
#include <SDL_surface.h>
int main(int argc, char** argv) {
SDL_Window* pWindow = NULL;
SDL_Surface *screen = NULL;
/* Initialisation de la SDL */
if (SDL_Init(SDL_INIT_VIDEO) != 0 )
{
fprintf(stdout,"Échec de l'initialisation de la SDL (%s)n",SDL_GetError());
return -1;
}
/* Création de la fenêtre */
pWindow = SDL_CreateWindow("Ma fenêtre",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
800,
600,
SDL_WINDOW_SHOWN);
if(pWindow) {
screen = SDL_GetWindowSurface(pWindow);
}
else {
fprintf(stderr,"Erreur de création de la fenêtre: %sn",SDL_GetError());
return -1;
}
/* On efface l'écran */
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
// Dessin d'un rectangle rouge
/* Declaring the surface. */
SDL_Surface *s;
/* Creating the surface. */
s = SDL_CreateRGBSurface(0, 320, 240, 32, 0, 0, 0, 0);
/* Filling the surface with red color. */
SDL_FillRect(s, NULL, SDL_MapRGB(s->format, 255, 0, 0));
SDL_Rect position;
position.x = 0;
position.y = 0;
SDL_BlitSurface(s, NULL, screen, &position);
// Mise à jour de l'affichage
SDL_UpdateWindowSurface(pWindow);
int continuer = 1; /* Notre booléen pour la boucle */
SDL_Event event; /* La variable contenant l'événement */
while (continuer) /* TANT QUE la variable ne vaut pas 0 */
{
SDL_WaitEvent(&event); /* On attend un événement qu'on récupère dans event */
switch(event.type) /* On teste le type d'événement */
{
case SDL_QUIT: /* Si c'est un événement QUITTER */
continuer = 0; /* On met le booléen à 0, donc la boucle va s'arrêter */
break;
case SDL_KEYDOWN: /* Si c'est un évènement clavier */
switch (event.key.keysym.sym)
{
case SDLK_ESCAPE: /* Appui sur la touche Echap, on arrête le programme */
continuer = 0;
break;
case SDLK_DOWN:
/* On efface l'écran */
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
position.x = 0;
position.y = position.y + 1;
// s contient toujours le rectangle rouge
// On peut donc le redessiner à une autre position
SDL_BlitSurface(s, NULL, screen, &position);
// Mise à jour de l'affichage
SDL_UpdateWindowSurface(pWindow);
break;
}
break;
}
}
SDL_Delay(1000); /* Attendre 1 seconde */
// Close and destroy the window
SDL_DestroyWindow(pWindow);
// Clean up
SDL_Quit();
return 0;
}
Documentation de la SDL : https://wiki.libsdl.org/FrontPage
Article connexe : Installer et configurer MinGW avec NetBeans