Bonjour,

Je m'excuse d'avance si ce n'est pas le bon forum mais je ne savais pas où le poster.

J'essaye d'apprendre à utiliser la bibliothèque SDL mais je rencontre une difficulté dont je ne comprend pas la cause.

Le but est d'ouvrir une fenêtre graphique et lorsque le pointeur passe dedans, des carrés bleux suivent sa trace.

Voici mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <stdlib.h>
#include <stdio.h>
#include <SDL.h>
 
#define Max_Mouse_Pos 20
 
//==initialisation des variables globalles
 
	SDL_Surface* screen = NULL ;
 
 
//Uint16 est un type defini par SDL qui garanti un entier non signé sur 16 bits
	Uint16 mouse_x[Max_Mouse_Pos];
	Uint16 mouse_y[Max_Mouse_Pos];
	Uint16 mouse_pos = 0 ;
	SDL_Event event ; //sert de buffer au différent type de message
 
void draw()
{
 
 SDL_Rect  rect;
 Uint32 color;
 Uint16 index;
 
 
 printf("Je suis dans Draw \n");
 
 //Définition de la couleur noire afin d'effacer l'écran 
   color == SDL_MapRGB(screen->format, 0, 0, 0);
 
 
   SDL_FillRect(screen, NULL, color);
 
    //Définition de la couleur bleue pour afficher les carrés 
     color == SDL_MapRGB(screen->format, 0, 0, 255);
 
   //Affichage de tous les carrés 
  for ((index = 0) ; index < Max_Mouse_Pos ; index++)
   {
 
   rect.w = 5;
   rect.h = 5;
   rect.x = mouse_x[index];
   rect.y = mouse_y[index];
   SDL_FillRect(screen, &rect, color);
 
   } 
 
   //On utilise du double buffer, on change donc de buffer afin d'afficher }
   //SDL_Flip(screen);*/
   printf("Je ici \n");
   SDL_Flip(screen);
   //SDL_UpdateRect(screen, 0, 0, 0, 0);
   }
 
 
 
 
int main(int argc , char *argv[])
{
 
	char bool ='n' ;  //servira de boolean 
 
 
	if ((SDL_Init(SDL_INIT_VIDEO)) < 0) {printf("Erreur %s \n", SDL_GetError( ) );
	atexit(SDL_Quit); exit(0);} //securite en cas de pb
 
 
	//nous lui passons SDL_SWSURFACE et SDL_DOUBLEBUF. SDL_SWSURFACE précise que la mémoire 
	//vidéo que l'on demande sera allouée dans la mémoire système (par opposition à la mémoire vidéo de la carte). 
	//C'est souvent plus lent, mais c'est le plus simple et notre programme est un début. SDL_DOUBLEBUF précise que nous voulons travailler en double buffer.
	screen = SDL_SetVideoMode(640,480,16,
				  //(SDL_SWSURFACE |
				  SDL_DOUBLEBUF);
 
	if (screen == NULL) { printf("Erreur screen null \n"); SDL_Quit ; exit(0);}
	//sert à déterminer le titre de la fenêtre
	SDL_WM_SetCaption("Le Serpent",NULL);
 
 
	do 
	{
	do
	{
		switch (event.type){
			//dit au gestionnaire d'événement qu'il faut quitter la boucle
			case SDL_QUIT : bool = 'o' ; break ;	
			case SDL_MOUSEMOTION :
				printf("Je suis dans mouse momo \n");
				mouse_x[mouse_pos] = (Uint16)event.motion.x; // Il est nécéssaire de caster
				mouse_y[mouse_pos] = (Uint16)event.motion.y; // TSDL_Event est une union de toutes les structures évenement 
				mouse_pos = mouse_pos+1;
				if (mouse_pos == Max_Mouse_Pos) mouse_pos = 0 ;
 
				break ;
		}
 
 
	}while(SDL_PollEvent(&event) == 1); 
	draw();
	}while(bool != 'o');
 
 
 
	SDL_Quit;
 
	return 0 ;
}

Pour la ligne de compilation c'est :
gcc -o test.out test.c `sdl-config --cflags` `sdl-config -libs` -lSDL_image
J'ai éssayé de localiser le problème et il a l'air d'arriver lors du SDL_Flip(). Si je saute la ligne,une fenetre noir apparait mais elle n'est jamais redessiner. Si je le remet ou si je fais un SDL_UpdateRect() et que je recompile j'ai une fenetre graphique mais avec un fond ocre qui ne suit pas le déplacement du pointeur.


Est ce que c'est spécifique à chez moi ?
Me serais je trompé dans le Code ?

Ou y'a t'il une solution ?

Merci d'avance.