MTProd > Dev4all > Articles > Langages > C & C++ > Opération Binaire en C > 4 Un peu de pratique
Rechercher24 Personnes en-ligne
Opération Binaire en C

4  Un peu de pratique

Sa va un moment la théorie
Passons à la pratique afin de mieux comprendre ce que nous avons vu dans les chapitres précédents.
Nous avons repris l'exemple du chapitre Votre premier jeu Windows - C++/DirectX, il s'agit d'un petit "jeu" dans lequel vous pouvez déplacer un sprite.
Nous allons voir comment gérer les boutons du clavier et de la souris. Les fonctions utilisées sont alors ReadKeyboardInput(), ReadMouseInput, DoKeyboardAction() et DoMouseAction(), toutes contenues dans le fichier input.h.



4.1  Valeurs des boutons

Avant voir comment fonctionnent nos boutons, voyons leurs valeurs, nous les avons définit ici par des macros (fichier globals.h), comme ceci :

#define KEY_ESCAPE                0x00000001l
#define KEY_UP                    0x00000002l
#define KEY_DOWN                0x00000004l
#define KEY_LEFT                0x00000008l
#define KEY_RIGHT                0x00000010l
#define KEY_ENTER                0x00000020l
#define KEY_CONTROL                0x00000040l
#define KEY_S                    0x00000080l
#define KEY_L                    0x00000100l
#define KEY_ADD                    0x00000200l
#define KEY_SUBTRACT            0x00000400l
#define KEY_SPACE                0x00000800l
#define KEY_SHIFT                0x00001000l





4.2  Bouton enfoncé

Lorsqu'un bouton est enfoncé nous utilisons l'opérateur bitwise OR (voir § 3.2) pour le stocker, voyons ce que cela nous donnes si le bouton KEY_UP et KEY_RIGHT sont enfoncés :
La valeur binaire de KEY_UP (sur 8 bits) est 00000010, la valeur binaire de KEY_RIGHT : 00010000.
Imaginons que nous déclarons une variable de type BYTE (8 bits) nommé state, nous lui donnons comme valeur binaire 00000000.
Nous effectuons maintenant l'opération suivante lorsque KEY_UP est enfoncé : state |= KEY_UP soit le calcul bitwise OR sur ces deux valeurs :

00000000 (valeur actuelle de state)
OR
00000010 (valeur de KEY_UP)

Le résultat vaudra :
00000010
Nous effectuons maintenant le calcul suivant pour state |= KEY_RIGHT (la touche KEY_RIGHT est enfoncé) :

00000010 (valeur actuelle de state)
OR
00010000 (valeur de KEY_RIGHT)

state vaudra alors :
00010010




4.3  Bouton non-enfoncé

Imaginons que les boutons KEY_UP et KEY_RIGHT sont toujours enfoncés, state vaut donc 00010010.
Imaginons maintenant que l'utilisateur relache le bouton KEY_RIGHT, qu'allons-nous faire ?
Nous allons utiliser l'opérateur bitwise AND (voir § 3.1) ainsi que l'opérateur bitwise de complément ~ (voir § 3.4) comme ceci : state &= ~KEY_RIGHT, ce qui nous le calcul suivant :

00010010 (valeur actuelle de state)
&
11101111 (valeur inversé (~) de KEY_RIGHT)

Le résultat vaudra donc :
00000010
Notre bouton KEY_RIGHT à bien été "effacé" de state, voyons maintenant comment lire cette valeur.




4.4  Lire nos boutons

C'est tout simple, nous allons utiliser l'opérateur bitwise AND (voir § 3.1) afin de tester la valeur de state.
Par exemple pour tester si le bouton KEY_UP est enfoncé nous allons alors faire : if ( state & KEY_UP ), soit "est-ce que state contient le bouton KEY_UP ?" ce qui donne le calcul suivant :

00000010 (valeur actuelle de state)
&
00000010 (valeur de KEY_UP)

Tous les bits de KEY_UP sont aussi allumés chez state, notre bouton est donc enfoncé !
Faisons le même test pour le bouton KEY_RIGHT :

00000010 (valeur actuelle de state)
&
00010000 (valeur de KEY_RIGHT)

Tous les bits de KEY_RIGHT ne sont pas allumés chez state, notre bouton n'est donc pas enfoncé !





<<  3  Les opérateurs bitwiseSommaire5  Conclusion  >>

 Accés rapide

1  L'opérateur sizeof
2  Les opérateurs logiques
3  Les opérateurs bitwise
4  Un peu de pratique

Valeurs des boutons

Bouton enfoncé

Bouton non-enfoncé

Lire nos boutons

5  Conclusion
Voir le sommaire complet

 Liens utiles

  • Publier un article
  • Envoyer cette page
  • Ecrire à l'auteur

  •  Mini-Chat

    Thienou (00h11): salut
    Thienou (00h13): Oula mon inscription date de 11 ans je me sent vieux :)
    neowolf25 (17h59): MMF2 en "pay what you want" jusqu'à demain sur
    neowolf25 (17h59): https://www.hu
    mblebundle.com/
    weekly

    Miuka (21h15): Coin coin de 2014
    Miuka (21h15): Des gens qui ont migré sur le forum Clickteam ou ailleurs ?
    Strike (09h45): Salut les vieux !
    Hikarion (12h46): Salut les djeunz
    Hikarion (13h38): A qui profite le scandale ?
    Hikarion (13h44): le chat irc est toujours actif ?

    Votre message



     Archives

     Dev4all Newsletter

    Restez à jour avec la newsletter mensuelle !

    Votre e-mail


    1800 abonnés

     Recommander Dev4all

    Recommandez Dev4all à un ami. Cela fera grandir notre communauté !

    E-mails de vos amis




    [ Accueil | S'inscrire | Mon Dev4all | Communauté | Téléchargements | Articles | Forums | Chat ]

    [ A propos de Dev4all | Aide | La charte Dev4all | Contact ]

    © 2000-2018 MTProd. Tous droits réservés.
    L'utilisation de Dev4all implique l'acceptation et le respect de la charte Dev4all.