Bonjour,
je suis en train de programmer un mastermind, en c avec la sdl2.
Pour faciliter le pb, supposons que je dois trouver une combinaison de 4 jetons avec 2 couleurs (rouge et vert).
J'ai, en bas de mon écran la liste des couleurs disponibles, donc un rouge et un vert.
J'ai en haut de mon écran, 4 places vides.
Avec ma souris, je clique sur le rouge, pour sélectionner la couleur, puis sur les cases pour les remplir.
J'arrive même à tirer en "rafale" pour remplir les 4 cases en rouge, en déplaçant la souris en même temps que je clique :clic-clic-clic-clic.

J'ai décidé de conserver le pointeur flèche de la souris et d'afficher une petite bille de la couleur sélectionnée en bas de la flèche, afin de savoir quelle couleur est en cours.
J'arrive à déplacer mon curseur, suivi par la petite bille de la bonne couleur.

Le problème que je rencontre est que je ne peux plus tirer en rafale.
En effet, je suis obligé de déplacer ma souris sur la 1ere case, de marquer un léger temps d'arrêt sans bouger et de cliquer, puis de déplacer sur la 2eme case, de marquer un léger temps d'arrêt sans bouger et de cliquer, ... quasiment obligé de lacher la souris et de cliquer avec un seul doigt, pour ne pas bouger. stop-clic-stop-clic-stop-clic-stop-clic.

Comme j'utilise un SWITCH CASE avec SDL_MOUSEMOTION pour afficher la petite bille au bon endroit, chaque "léger" déplacement redessine mon écran et ne prend pas en compte le clic, avec SDL_MOUSEBUTTONDOWN.
Est-il possible de "prioriser" un clic sur un déplacement ?

J'ai essayé de placer ma partie déplacement à plusieurs endroits, sans plus de succès

Y a-t-il une solution pour fluidifier tout ceci ?
Est-ce que mes CASE sont mal positionnés ?

Merci de votre aide

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
 
long AttendEvenement(SDL_Renderer *Renderer,Images *Jeton,ChoixDuMenu *Menu, Coord *ClicSouris,int Ligne, int Page)/
{
 while (ActionValide==NON)//tant que pas d'evenement, on boucle ici
    {
        while(SDL_PollEvent(&event))
        {
            switch(event.type) // selon l'événement
            {
            case SDL_WINDOWEVENT: // clic sur la croix de la fenêtre
                if (event.window.event == SDL_WINDOWEVENT_CLOSE) // Fermeture de la fenêtre
                {
                   ...
                }//arret de la boucle
                break;
            case SDL_KEYDOWN://si on appuie sur la touche...
                if(event.key.keysym.sym==SDLK_ESCAPE)//touche echap
                {
                    ...
                }//arret de la boucle
                break;
            case SDL_MOUSEMOTION: //Si souris déplacée
                ClicSouris->ZoneClic=ZC_JEU_MOUVEMENT;
                renvoi=OUI;
                ActionValide=OUI;
                ClicSouris->x=event.motion.x; //position souris
                ClicSouris->y=event.motion.y;
                break;
            case SDL_MOUSEBUTTONDOWN://si on clic, bouton enfoncé,
                if(event.button.button==SDL_BUTTON_LEFT)// si c'est clic gauche
                {
                    ClicSouris->x=event.button.x;//recupêration des coordonnees du clic
                    ClicSouris->y=event.button.y;
                }
                /*   default:
                       ClicSouris->ZoneClic=ZC_JEU_MOUVEMENT;
                       renvoi=OUI;
                       ActionValide=OUI;
                       ClicSouris->x=event.motion.x; //position souris
                       ClicSouris->y=event.motion.y;
                       break;*/
            }
            //   SDL_Delay(10);
        }
    }
}
//***************************
void AfficheTableauVerificationCouleur(SDL_Renderer *Renderer,Images *Jeton,ChoixDuMenu Menu,int Tableau[],char Comp1[],int NumeroLigne,char *ListeSuperGlobal, int Partie)
{
    ...
 
  //  SDL_Rect positionCoulSelect= {event.motion.x,event.motion.y,17,17}; //pour afficher les support de toutes les lignes
 // SDL_Rect selectCoulSelect= {34*CoulSelectionnee,0,34,34}; //pour afficher les support de toutes les lignes
//    SDL_RenderCopy(Renderer,Jeton->Image[0],&selectCoulSelect,&positionCoulSelect); // Copie de la selectionCorrection
 
    SDL_RenderPresent(Renderer);//Actualisation
}
 
//***************************
void AffichePointeur(SDL_Renderer *Renderer,Coord ClicSouris,Images *Jeton, int CoulSelectionnee)
{
    SDL_Rect positionCoulSelect= {ClicSouris.x,ClicSouris.y+10,17,17}; //pour afficher les support de toutes les lignes
    SDL_Rect selectCoulSelect= {34*CoulSelectionnee,0,34,34}; //pour afficher les support de toutes les lignes
 
    SDL_RenderCopy(Renderer,Jeton->Image[0],&selectCoulSelect,&positionCoulSelect); // Copie de la selectionCorrection
    SDL_RenderPresent(Renderer);//Actualisation//////////////////a supprimer ensuite
}