Bonjour,
Alors voila, j'utilise sdl(et débute par la même occasion) pour un projet. A certains moment je pose une question et je veux obtenir une réponse par l'utilisateur du programme. Cette réponse doit être uniquement composé de chiffre. Pour faire cet saisie, j'ai réutiliser une fonction utiliser dans dans mon projet de fin de de l'ans passé (qui avait été fournit par mon prof) que j'ai modifier pour l'adapté a mon nouveau projet. Pour pouvoir récupérer uniquement des chiffre, je met dans les condition sur les touche enfoncer que si c'est un chiffre je l'ajoute à la chaîne de caractère de la réponse sinon je ne fait rien. Cependant ceci n'est pas très propre car pour prendre uniquement les chiffre j'ai mit dans une condition 10 test (1 pour chaque chiffre)
Voila l'endroit ou se situe les condition sur les touche enfoncé (qui ce situe dans une boucle n'apparaissant pas ici, j'ai juste mit l'endroit en rapport avec ma demande) avec mon horrible condition à 10 test
Je voudrait savoir si il y avait un moyen pour dire que la touche appuyé doigt être uniquement un chiffre plutôt que ce que j'ai mit.
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 if ( (event.key.keysym.unicode & 0xFF80) == 0 && ! event.key.keysym.unicode == 0) { // We pass non ascii char and modifier if( (event.key.keysym.unicode & 0x7F) == '\r'|| answerIdx>5) { // Detecting the carriage return => We got the full answer flag_keepRunning = 0; break; } else if( (event.key.keysym.unicode & 0x7F) == '\b') { // Detecting the backspace => remove last char answer[--answerIdx] = '\0'; } else if( (event.key.keysym.unicode & 0x7F)=='0' || (event.key.keysym.unicode & 0x7F)=='1' || (event.key.keysym.unicode & 0x7F)=='2' || (event.key.keysym.unicode & 0x7F)=='3' || (event.key.keysym.unicode & 0x7F)=='4' || (event.key.keysym.unicode & 0x7F)=='5' || (event.key.keysym.unicode & 0x7F)=='6' || (event.key.keysym.unicode & 0x7F)=='7' || (event.key.keysym.unicode & 0x7F)=='8' || (event.key.keysym.unicode & 0x7F)=='9') { answer[answerIdx++]=event.key.keysym.unicode & 0x7F; } flag_keyReleased = 0; strcpy(printedText, question); strcat(printedText, answer); SDL_FreeSurface(printedSurf); printedSurf = TTF_RenderText_Blended(myFont, printedText, fontColor); SDL_BlitSurface(printedSurf, NULL, screen, offset ); if( SDL_Flip( screen ) == -1 ) { exitStatus = EXIT_FAILURE; flag_keepRunning = 0; break; } }
Je voudrais également savoir, afin de comprendre, pourquoi mon prof avait mit event.key.keysym.unicode & 0xFF80 ou event.key.keysym.unicode & 0x7F dans les condition pour récupérer la valeur des touches. A quoi sa sert de mettre 0xFF80 ou 0x7F et quel est la différence entre ces deux code. j'ai compris que cela venait du fait que l'ont utilisait pas la table ascii a ce moment la mais pourquoi event.key.keysym.unicode doit être associer à autre chose.
Merci d'avance pour l'aide et le temps que vous m'accordé.
Partager