C : problème création fenêtre (lib SDL)
The Programmeur (du dimanche...)
-
musicetcie Messages postés 393 Date d'inscription Statut Membre Dernière intervention -
musicetcie Messages postés 393 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai réussi à créer 2 fenêtres basiques en C, grâce à la bibliothèque SDL. La première est bordeaux avec un carré gris au milieu et la 2e est constituée d'un dégradé noir&blanc. Tout simple. Là, j'ai voulu faire une graaande fenêtre, avec l'arc en ciel, en gros. Mais quand le programme se lance, la fenêtre s'ouvre, blanche, et se referme dans la seconde (alors que j'ai une fonction pause, externe, qui me bloque la fermeture de la fenêtre tant que je n'ai pas cliqué sur la croix)
Voici mon code (ne désespérez pas tout de suite s'il vous plait ! ;-) ) :
Merci à vous !!
PS : je peux rajouter des commentaires dans mon code, si ça vous arrange !! =)
J'ai réussi à créer 2 fenêtres basiques en C, grâce à la bibliothèque SDL. La première est bordeaux avec un carré gris au milieu et la 2e est constituée d'un dégradé noir&blanc. Tout simple. Là, j'ai voulu faire une graaande fenêtre, avec l'arc en ciel, en gros. Mais quand le programme se lance, la fenêtre s'ouvre, blanche, et se referme dans la seconde (alors que j'ai une fonction pause, externe, qui me bloque la fermeture de la fenêtre tant que je n'ai pas cliqué sur la croix)
Voici mon code (ne désespérez pas tout de suite s'il vous plait ! ;-) ) :
int FenetreDegradeCouleurs()
{
SDL_Surface *ecran = NULL;
SDL_Surface *lignes[256] = {NULL};
SDL_Rect position;
int i=0;
if (SDL_Init(SDL_INIT_VIDEO) == -1)
{
fprintf(stderr, "Erreur d'initialisation de la SDL");
exit(EXIT_FAILURE);
}
ecran = SDL_SetVideoMode(640, 1000, 32, SDL_HWSURFACE);
if (ecran == NULL)
{
fprintf(stderr, "Impossible de charger le mode vidéo : %s\n", SDL_GetError());
exit(EXIT_FAILURE);
}
for (i = 0 ; i <= 255 ; i++)
{lignes[i] = SDL_CreateRGBSurface(SDL_HWSURFACE, 640, 1, 32, 0, 0, 0, 0);}
SDL_WM_SetCaption("Fenetre arc-en-ciel", NULL);
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
for (i = 9 ; i <= 255 ; i++)
{
position.x = 0;
position.y = i%2;
SDL_FillRect(lignes[i], NULL, SDL_MapRGB(ecran->format, 255, i, 9));
SDL_FillRect(lignes[i+123], NULL, SDL_MapRGB(ecran->format, 255-i, 255, 9));
SDL_FillRect(lignes[i+246], NULL, SDL_MapRGB(ecran->format, 9, 255, i));
SDL_FillRect(lignes[i+369], NULL, SDL_MapRGB(ecran->format, 9, 255-i, 255));
SDL_FillRect(lignes[i+492], NULL, SDL_MapRGB(ecran->format, i, 9, 255));
SDL_FillRect(lignes[i+615], NULL, SDL_MapRGB(ecran->format, 9, 255-i, 255));
SDL_FillRect(lignes[i+738], NULL, SDL_MapRGB(ecran->format, 255, 9, 255-i));
}
for (i=0; i<1000;i++)
SDL_BlitSurface(lignes[i], NULL, ecran, &position);
SDL_Flip(ecran);
pause(); // Mise en pause du programme (fermeture quand on clique sur la croix)
SDL_Quit();
return EXIT_SUCCESS;
}
Merci à vous !!
PS : je peux rajouter des commentaires dans mon code, si ça vous arrange !! =)
A mon avis le modulo 2 ne sert à rien (déjà vu ce que je vois, tu veux faire diviser pas modulo, non?), voire même il fait planter l'ouverture de ta fenêtre.
D'ailleurs as-tu vérifié le fichier stderr.txt qui a du se créer au moment de la compilation ?