CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : c++, SDL, comment sortir d'une boucle ?

News culture
La Planète des Singes : Le Nouveau Royaume - la révolution simienne est en marche !
DébutPage précedente
1
Page suivantePage suivante
farfadetsan farfadetsan
MP
Niveau 6
29 mars 2006 à 15:36:25

En fait je veux quitter mon programme qui est en boucle, par exemple en cliquant ou en appuyant sur une touche.

Je sais pas commet faire ! aidez moi merci.

-pedrolan- -pedrolan-
MP
Niveau 7
29 mars 2006 à 15:38:43

Tu veux savoir comment gérer les touches ou tout simplement sortir par exemple d´un while?

Si c´est le dernier cas c´est avec
break;

farfadetsan farfadetsan
MP
Niveau 6
29 mars 2006 à 15:49:48

Hé ben il faut que je sache faire les deux ^^ !

et si je met break, je le met ou ?

-pedrolan- -pedrolan-
MP
Niveau 7
29 mars 2006 à 16:02:08

Bon alors, si tu veux sortir d´un simple while:

while(...) //condition de la boucle
{
//instructions
break; //sort de la boucle
//tu peux l´utiliser dans une condition:
if(...) break;
//après tu peux mettre d´aurtes instructions
}

Pour la SDL, le tuto de Jean-Yves-Yves, pour t´app
rendre à gérer les évènements...

-pedrolan- -pedrolan-
MP
Niveau 7
29 mars 2006 à 16:04:57

Donc ensuite dans ton code tu mets:

while(1) //boucle infinie
{
/*si la touche est appuyée*/ break;
//autres instructions
}

farfadetsan farfadetsan
MP
Niveau 6
29 mars 2006 à 16:10:11

if(...) break;

oui d´accord mais quesque je met apré if pour expliquer que j´appuie sur n´importe quelle touche ?

-pedrolan- -pedrolan-
MP
Niveau 7
29 mars 2006 à 17:39:12

Ben regarde sur le tuto de JYY, tu as pas mal de trucs pour gérer le clavier avec SDL...

J´ai pas le temps de te faire un code exemple maintenant, donc peut-être demain, sinon:
http://perso.numericable.fr/~fvirtman/info/tuto/index.html

:dehors:

-pedrolan- -pedrolan-
MP
Niveau 7
30 mars 2006 à 22:17:41

Bon, voilà un moyen de gérer les touches.
Il faut d´abord initialiser avec la fonction Init_AppuiTouche.

void Init_AppuiTouche(void)
{
// Traduction UNICODE
SDL_EnableUNICODE(1);

// Répétition des touches
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,
SDL_DEFAULT_REPEAT_INTERVAL+50);
}

//fonction d´appui des touches
bool Appui_Touche(string touche)
{
string touche_clavier;

// Traitement des commandes
while(SDL_PollEvent(&event))
{
// Type d´évènement
switch(event.type)
{
case SDL_KEYDOWN:
// Si on presse une touche
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE:
touche_clavier = "ESCAPE";
break;
case SDLK_LEFT:
touche_clavier = "LEFT";
break;
case SDLK_RETURN:
touche_clavier = "RETURN";
break;
case SDLK_UP:
touche_clavier = "UP";
break;
case SDLK_DOWN:
touche_clavier = "DOWN";
break;
case SDLK_RIGHT:
touche_clavier = "RIGHT";
break;
}
break;

// Si on relache une touche
case SDL_KEYUP:
break;

// Fermeture du programme
case SDL_QUIT:
return 0;

}
}

if (touche_clavier == touche)
{
return TRUE;
}

else
{
return FALSE;
}
}

Bon, c´est les touches les plus utilisés pour la S
DL...
Ensuite, dans le main, tu mets:

while (!AppuiTouche("ESCAPE"))
{
//instructions
}

Pour par exemple sortir de la boucle dès que ´Esc´
est appuyée.

Bon, je n´ai pas testé, donc je ne suis pas sûr que ça marche, notamment pour:

if (touche_clavier == touche)

Je ne sais pas si on peut comparer deux strings comme ça...

-pedrolan- -pedrolan-
MP
Niveau 7
30 mars 2006 à 22:34:11

Arf, apparemment, quelques erreurs dans mon code...
Désolé, pas le temps de corriger...

:bye:

dromar34 dromar34
MP
Niveau 9
02 avril 2006 à 17:36:26

personnelement je trouve que les fonction de Jyy sont vachement pratique ! :)

char intern_key[400];
void UpdateKeys()
{
SDL_Event event;
while(SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
intern_key[event.key.keysym.sym]=1;
break;
case SDL_KEYUP:
intern_key[event.key.keysym.sym]=0;
break;
}
}
}
int Key(int sdlcode)
{
int ret=intern_key[sdlcode];

return ret;
}
/*apres dans ton main tu fais une boucle comme ca*/
while(!Key(SDLK_ESCAPE))
{
UpdateKeys();
}
/* la si tu appuye sur la touche echap tu sort de ta boucle voila apres chacun fais comme il veut ! :) */

farfadetsan farfadetsan
MP
Niveau 6
04 avril 2006 à 14:10:04

solution plus simple :

while(1)
{
SDL_PollEvent(&event);
if (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_RETURN)
break;
}

c´est tout ^^ et ca marche quand on appuye sur enter !

JeanYvesYves JeanYvesYves
MP
Niveau 10
04 avril 2006 à 14:34:40

Il est vrai que ma fonction UpdateEvents ne dit pas si une touche quelconque vient d´etre appuyée.
Mais une petite modif, et ça se rajoute facilement :)

La solution que te propose farfadetsan est bien, par contre, elle ne s´accierai pas a mon UpdateEvents() qui boufferait la file tout seul, ce qui rendrait le truc hasardeux...

farfadetsan farfadetsan
MP
Niveau 6
04 avril 2006 à 14:52:11

"La solution que te propose farfadetsan"

lol farfadetsan c´est moi !! !

euh je comprend pas trop pourquoi tu dit que mon truc est hasardeux, il marche trés bien....

JeanYvesYves JeanYvesYves
MP
Niveau 10
04 avril 2006 à 15:00:28

Non, je n´ai pas dit que ta solution est hasardeuse :)
J´ai dit que si tu la couples avec la solution du UpdateEvents() que j´utilise, alors la, c´est hasardeux :)
Mais ta solution seule est correcte :)

farfadetsan farfadetsan
MP
Niveau 6
04 avril 2006 à 15:10:22

ok merci.
encore une question : comment je fait pour controler un etouche indépendament ?? ?

ex : if( j´appuye sur une touche )
{....}

dromar34 dromar34
MP
Niveau 9
04 avril 2006 à 16:34:43

avec les fonction de JeanYvesYves apres tu a juste a faire :
if(Key(ici tu met le nom de la touche a tester))
et apres tu met au moins une fois dans ta boucle UpdateEvents() et apres c´est tranquil ! :)

JeanYvesYves JeanYvesYves
MP
Niveau 10
04 avril 2006 à 17:43:31

regarde, dans mon tuto, l´exemple qui s´appelle "2.A.2 Promenade" (cf ma carte)

Ouvre juste le fichier main.cpp et regarde comme je controle les touches :)
Un UpdateEvents() et ensuite, comme disais Dromar34, un if (Key(...))

Tu trouveras l´implémentation de UpdateEvents dans le fichier futils.cpp

JeanYvesYves JeanYvesYves
MP
Niveau 10
04 avril 2006 à 17:44:27

au fait, c´est pas main.cpp mais exe.cpp :)

-pedrolan- -pedrolan-
MP
Niveau 7
05 avril 2006 à 14:07:17

Autrement, si tu ne veux pas utiliser SDL (bon je sais que tu le veux, mais si tu ne connais pas ce que je vais te dire, ça peut t´intéresser), en C, avec stdlib (je crois), tu peux utiliser la fonction getch() pour gérer le clavier (enfin pas tout, juste les touches pour écrire).

De cette façon:

  1. include <stdio.h>
  2. include <stdlib.h>

int main(int argc, char** argv[])
{
char touche;
printf("Trouvez la bonne touche pour sortir du programme\n");
while(1)
{
touche = getch();
if (touche == ´q´) break;
/*si on tape ´q´, le programme s´arrête*/
printf("rate\n");
}
return 0;
}

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment