IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Saisie claviers avec sdl


Sujet :

SDL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut Saisie claviers avec sdl
    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
    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 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.
    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é.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    La simplification est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( lettre >= '0' && lettre <= '9' )
    Cela signifie que si la lettre est comprise (en incluant les bords) entre le caractère '0' et le caractère '9'. En effet, si on regarde une table ASCII on remarque que les chiffre se suivent.

    Et maintenant, on attends le second point :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( (event.key.keysym.unicode & 0xFF80) == 0 && ! event.key.keysym.unicode == 0) { // We pass non ascii char and modifier
    On voit, d'après le commentaire, que c'est une protection contre tous les caractères qui ne sont pas dans la table ASCII et qui pourrait donc mettre à mal notre supposition précédente.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Merci de ta réponse,
    J'ai donc changer mon horrible condition par ce que tu m'a dit c'est un peut plus propre et surtout moins coûteux que mes 10 teste.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle saisie clavier avec while
    Par bm dans le forum Général Python
    Réponses: 2
    Dernier message: 12/05/2014, 10h00
  2. Réponses: 2
    Dernier message: 07/11/2008, 16h34
  3. Réponses: 1
    Dernier message: 29/02/2008, 11h48
  4. Affecter variable avec une saisie clavier
    Par DI_2007 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 28/03/2007, 13h43
  5. Entrée clavier en Utf8 avec SDL?
    Par BugFactory dans le forum SDL
    Réponses: 3
    Dernier message: 27/03/2007, 19h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo