Tutoriaux GameMaker
       Débutant
Tutoriel : Débuter avec Game Maker Mark Overmars Glog:Accélérer le Temps de Chargement L'appellation des ressources dans Game Maker. Tutorial: Convertir un .gmk en .gm6! Tutorial Intégral Débutant, Intermédiaire et Confirmé: Partie I:Débutant Tutorial : Les variables de déplacement Tutorial sur sa Boîte de Dialogue et des Astuces pour qu'elle soit plus Esthétique Comment faire? Les Textes à la STARWARS Dessiner des Graphismes pour un Jeu Vidéo, conseils & connaissances de bases Initiation à la création de Jeux Vidéos avec GameMaker Pong Aide GameMaker 6.1 en Français Tutoriel: GameMaker 5.3a en Français Explication du D&D Tuto mise en main: Casse Brique
       Intermédiaire
Tutorial Intégral Débutant, Intermédiaire et Confirmé: Partie II:Intermédiaire Les collisions en gml Mark Overmars Glog: Astuces sur Game Maker - Une aide plus jolie Tutoriel Game Maker - Les Primitives Tutoriel Game Maker - Les Couleurs en GML Compressez un .wav tout en gardant son format Tutorial: Les ressources externes Créer ses propres extensions sous Game Maker 7 Tutoriel GameMaker : Les fichiers ini Tutorial d'apprentissage des timelines et des paths Alléger son jeu avec Game Maker Collisions Nettes pour le mapping Création d'un programme de dessin basique Les variables et les constantes FTP DLL Créer une Variable
       Avancé
Les opérateurs binaires
|
Les opérateurs binaires
Somaire 1- Introduction aux opérateurs binaires 2- Bases et conversion (facultatif) 3- Calculs avec les opérateurs binaires 4- Regles binaires 5- Opérateurs de décalage << et >> 6- Opérateur de complément ~ 7- Le systeme héxadécimal 8- Utilité de ces opérateurs
Ce tutoriel auras pour but d'expliquer le fonctionnement des opérateurs binaires (bitwise), qui sont croyez moi très utiles bien qu'assez obscur au premier abort. La partie 8 est la partie la plus interressante car elle montre leurs utilité.
1- Introduction aux opérateurs binaires
Il existe en tout 6 opérateurs binaires : -Le et (and) noté & -Le ou inclusif (or) noté | -Le ou exclusif (xor) noté ^ -Le décalage a droite >> -Le décalage a gauche << -L'opérateur de complément ~
Les trois premiers opérateurs se présentent sous trois formes, avec une forme qui permettra de calculer avec des nombres, et une autre calculer des bits entre eux. -Le et peut s'écrire : & , && , and -Le ou inclusif peut s'écrire : | , || , or -Le ou exclusif peut s'écrire : ^ , ^^ , xor
Un bit peut avoir seulement deux valeurs (étant de base 2), 0 ou 1. En fait physiquement cela correspond a la polarisation en spin d'un électron (spin down ou spin up). En programmation 1 et 0 correspondent a vrai et faux.
Les opérateurs binaires sont des opérateurs logiques : Par exemple si on vous dit qu'une information est vraie et qu'une autre information l'est aussi, on pourras considérer que l'information totale est vraie. Or si une des deux informations est erronnée, l'information globale seras alors elle aussi erronnée. C'est tout simplement comme ça que fonctionne l'opérateur and.
Si on remplace vrai par 1 et faux par 0, on a alors : 1 and 1 = 1 1 and 0 = 0, de même 0 and 1 = 0 0 and 0 = 0 Voila donc le fonctionnement du and. J'avais dit précédement que and, && et & n'avaient pas tous la même utilitée. En fait le && est la vrai syntaxe en programmation du and, donc ils s'utilisent de la même manière, mais ne servent eux qu'a comparer seulement deux bits entre eux. Le & lui sert à comparer quand à lui deux nombres entre eux.
Pour comparer deux nombres entre eux il faut tout d'abord les ecrire en base 2, s'ils sont en base 10. Nous fonctionnons (nous les humains) en base 10, certainement car nous possédons dix doigts, mais les machines elles fonctionnent en base 2 (voir Spintronique pour savoir pourquoi).
2- Bases et conversion (facultatif)
Cette partie est facultative puisque la conversion base 10 <=> base 2 peut se faire avec la calculatrice de Windows bien que rien ne vous empeche d'apprendre ce mécanisme si vous ne savez pas déja le faire.
Nous possédons donc 10 chiffres permettant d'ecrire tous nos nombres : 0, 1, 2, 3, 4, 5, 6, 7, 8, et 9. Pour la base de 2 on a juste 0 et 1.
Exemple de nombres en base 10 puis en base 2 : 666 <=> 1010011010 23 <=> 10111 13 <=> 1101 2012 <=> 11111011100
a) Conversion base 2 vers base 10
Pour convertir un nombre de base 2 en un nombre de base 10 rien de plus simple, il suffit en partant de la droite multiplier chaque chiffre par 2 puissance sa position. Exemple, avec ^ signifiant puissance et pas xor, et * signifiant multiplier : 10111 base 2 = 1*2^0 + 1*2^1 + 1*2^2 + 0*2^3 + 1*2^4 = 1 + 2 + 4 + 0 + 16 = 23
b) Conversion base 10 vers base 2
Pour passer de la base 2 à la base 10 c'est un peu plus compliqué. Une méthode simple consiste a imaginer notre nombre de base 10 sous forme de billes par exemple, puis d'imaginer des boites pouvant contenir un certain nombre de billes. Nos boite seront classées de cette manière, dans un ordre decroissant du nombre de billes qu'elles peuvet contenir. Si on a 123 à covertir en base 2, il suffit de ce dire que l'on possède 123 billes. Ensuite il faut chercher une puissance de 2 suppérieure a notre nombre de billes. Ici pour 123 on auras donc 2^7 = 128 Nos boites sont donc disposées de cette maniere (les [] signifient boite et le nombre a l'interieur est le nombre de bille que peut contenir la boite, de plus on commence à 2^(7-1) soit 2^6 ) : [2^6] [2^5] [2^4 ] [2^3] [2^2] [2^1] [2^0] soit [64] [32] [16] [8] [4] [2] [1] Maintenant nous allons remplir nos boites de billes avec une regle simple, il faut remplir entierement une boite de bille (1) ou la laisser vide et passer a la suivante si on n'a pas assez de billes (0). Ce qui nous donne : [64] : 1, on peut la remplir entierement, il nous reste donc 123-64 billes, soit 59. [32] : 1, il nous reste 59-32 = 27 billes. [16] : 1, il nous reste 11 billes. [8] : 1, il nous reste 3 billes. [4] : 0, on ne peut pas remplir entierement notre boite, on passe à la suivante. [2] : 1, il nous reste une bille. [1] : 1, on a remplis toutes les boites.
123 s'écrit donc en base 2 : 1111011.
Astuce : pour trouvé la puissance de la dernière boite on peut faire un log de base 2 de notre nombre de base 10 et tronquer. Ici on aurait log2(123) = 6,94 et des poussieres, donc 6 si on tronque, or 2^6 = 64, ce qui est bien la contenance de notre premiere boite. Si vous ne possedez pas le log2 il suffit de faire log(x)/log(2) est le résultat est le même.
3- Calculs avec les opérateurs binaires
Nous avons donc vu le and, et le &&, qui ne permettent que de faire des calculs entre deux bits. Le & sert comme les autres opérateurs mathématiques a faire des calcules entre deux nombres. Pour calculer nombre1 & nombre2 il faut convertir nombre1 et nombres1 en base 2. Ensuite on a plus qu'a comparer chaque bits des deux nombres entres eux.
Exemple : 549 & 320 = 10 0010 0101 & 01 0100 0000 (base 2) Ensuite il suffit de calculer les bits des deux nombres entre eux selon les regles de and :
1 & 0 = 0 0 & 1 = 0 0 & 0 = 0 0 & 1 = 0 1 & 0 = 0 0 & 0 = 0 0 & 0 = 0 1 & 0 = 0 0 & 0 = 0 1 & 0 = 0
donc 549 & 320 = 0
Les opérateurs or et xor fonctionnent selon le même principe. || et or servent à calculer deux bits entre eux et | deux nombres. ^^ et xor de même deux bits et ^ deux nombres.
4- Regles binaires
Voici donc les regles pour les opérateurs &, | et ^ -and 1 & 1 = 1 1 & 0 = 0 0 & 0 = 0 -or 1 | 1 = 1 1 | 0 = 1 0 | 0 = 0 -xor 1 ^ 1 = 0 1 ^ 0 = 1 0 ^ 0 = 0
5- Opérateurs de décalage
Les opérateurs << et >> sont des opérateurs de décalage des bits << décale les bits à gauche, donc pour un nombre xxxx de base 2, alors xxxx<<3 = xxxx000 >> fonctionne de la même manière mais décale les bits a droite. << 1 reviens donc à multiplier par 2, et << 2 par 4, soit << x a multiplier par 2^x (avec ^ signifiant puissance).
Exemples : 125 << 2 = 1111101 << 2 = 111110100 = 500 92 >> 3 = 1011100 >> 3 = 1011 = 11
6- Opérateur de complément ~
L'opérateur ~ sert a inverser les bits d'un nombre. Il faut faire attention car selon le type de variables les valeurs ne sont pas les mêmes. Pour un unsigned char (un entié tenant sur octet non signé), ~12 = 243 car 12 = 00001100 base 2 donc ~12 = 11110011 base 2 = 243 Sous Game Maker ~x seras égal à -x-1.
7- Le systeme héxadécimal
Le systeme héxadécimal est un systeme très interressant car il est très simple de faire passer un nombre de base 2 à base 16 (de héxa). Le systeme héxadécimal étant un systeme de base 16 il utilise donc les premieres lettres de l'alphabet en complément des chiffres traditionnels : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
Pour convertir un nombre de base 2 codé sur un octet il sufit de le couper en deux paquets, puis calculer a quoi correspondent chaque paquet puis remplacer par les symboles correspondants. Par exemple : 10011101 = 9D base 16 car 1001 = 9 base 10 donc 9 base 16 et 1101 = 13 base 10 soit D en héxa
8- Utilité de ces opérateurs
Ces opérateur sont d'une utilité incroyable lorsque l'on programme et surtout lorsque l'on commence à ce raprocher de la machine. Je vais montrer de nombreux exemples à travers lesquels vous verez toute la puissance des opérateur bitwise.
Exemple 1 : Les couleurs Les couleurs sont la plupart du temps codés sur 24bits, avec un octet pour le rouge, un autre pour le vert et le dernier pour le bleu, soit 8bits pour chaque couleurs, c'est le format RGB (pour red green blue). Une couleur est donc composée de rouge, de vert et de bleu avec chacune de ces couleurs primaires allant de 0 à 255. En héxadécimal on a donc toutes les valeurs possibles du noir 000000 au blanc FFFFFF soit 16777216 couleurs possibles ! Sous GM le rouge est codé sur le premier octet a droite, le vert sur l'octet du milieu et le bleu l'octet a gauche. Couleur : [Bleu][Vert][Rouge]
Donc pour créer une couleur avec du rouge, du vert et du bleu il faut remplir le premier octet a droite avec le rouge, le second avec le vert et le dernier avec le bleu. Soit : couleur = (bleu<< 2 octets) + (vert << 1 octet) + (rouge << 0 octet) ce qui donne : couleur = (bleu << 16) + (vert << 8 ) + rouge Faire << 8 revient a multiplier par 256 mais les opérateurs binaire sont plus rapides donc il vaut mieux les utiliser, de plus c'est plus propre et plus compréhensible.
Maintenant si l'on veut récupérer la tonalité de bleu d'une couleur il va faloir tout simplement récupérer le premier octet de celle-ci. Par exemple pour la couleur 94F388 la tonalité de bleu est 94. Il suffit de décaler les bits a droite jusqu'a qu'il ne reste que l'octet qui nous interresse soit le premier en partant de la gauche. On a donc : bleu = couleur >> 16
Pour récuperer le vert on va procéder de la même manière : vert = couleur >> 8 Mais ensuite comment fait-on ? Il reste l'octet codant le vert mais aussi celui qui code le bleu : [bleu][vert], on a réussit a virer l'octet codant le rouge mais il faut aussi virer celui qui code le bleu. C'est la qu'intervient l'opérateur &. En fait il va nous permettre de récupérer notre octet : vert = (couleur >> 8 ) & FF Explication (x est un bit) : comme 0 & x est toujours égal à 0, et que 1 & x est toujours égal à x, faire XXYY & FF signifie donc faire XXYY & 00FF or comme on l'a vu juste avant XX & 00 seras donc égal à 0 et FF (héxa) étant donc 11111111 (base 2), YY & FF seras donc égal à YY.
Donc pour récupérer le rouge : Le rouge étant dans [XX][YY][ZZ] à la troisieme position, il suffit donc de faire [XX][YY][ZZ] & FF car on ne garderas que le premier octet de droite. On a donc : rouge = couleur & FF
Exemple 2 : Modifier un octet bit a bit Si [XX] est un octet, soit [abcdefgh] en base 2 avec abcdefgh des bits, comment récupérer un des bits ou même le modifier ? En fait c'est très simple, et les seuls opérateurs dont on auras besoin vous l'avez compris c'est & , << et >>.
Récupérer c : Pour récupérer c, il va falloir détruire tous les autres bits, on va donc utiliser & pour ça : [abcdefgh] & [00100000] = [00c00000] Maintenant pour isoler c il faut le décaller pour qu'il soit en premiere position a droite : [00c00000]>>5 = c
Récupérer un bit en général : pour récupérer un bit en général dans un nombre on utilise d'abord & puis on décale. La seule infos dont on à besoin c'est la position du bit dans le nombre (ici ^ signifie puissance). Bit = ( nombre & 2^position ) >> position
Exemple 3 : xor et la cryptographie
^ est très interressant car il nous permet de crypter des bits avec d'autres bits. Ce qu'il y a de très pratique avec ^, c'est cette propriétée : a ^ b = c c ^ b = a De cette manière on peut faire : Cryptage => [octet secret ] ^ [ octet clé ] = [ octet crypté ] <= Décryptage [ octet crypté ] ^ [ octet clé ] = [octet secret ]
A vous de faire un petit algo de cryptage pour vous entrainer .
Auteur du tutorial : onilink_ |
19/02/2010 par M@d_Doc |
10 Commentaires
|
|
par Linky439 @ 19/02/2010 10:25 am |
lol j'ai perdu le fil aux nombres en binaires x) Trop compliqué pour moi qui vient quasiment de me lever x) Mais bien sinon |
par bibi675 @ 19/02/2010 10:45 am |
Excellent tutoriel ! Bravo Onilink_ ! |
par Topaze22 @ 19/02/2010 06:35 pm |
Wow, tuto de folie ! Je me demande comment vous faite pour vous motiver à sortir des cours magistraux comme ça !? |
par SonicZeldaMario @ 19/02/2010 07:36 pm |
|
par daminetreg @ 23/02/2010 09:42 am |
Bon tutorial, c'est vrai que sans un tel tuto il est fort probable que beaucoup de débutant en programmation, notamment s'ils passent pas la case game maker, n'ait pas connaissances de l'utilité des opérateurs binaires. Good job done! ^^ |
par Ordinateur @ 10/03/2010 03:14 am |
100110111001010000100110101 sinpa |
par gabin49 @ 15/03/2010 11:48 pm |
magnifique tuto, moi meme je ne savais pas ce qu'etait ces signes : ^, ^^,<<, >> j'en ai appris dans ce tuto, meme si j'en aurai pas vraiment l'utilité, il est très bien détaillé |
par Need @ 19/04/2010 08:22 pm |
|
par red-error @ 29/05/2010 03:43 pm |
J'avais lu, mais décroché, maintenant c'est un peu plus clair, bravo ! Presque compris. |
par Red-error @ 01/08/2010 01:41 pm |
Encore relu, et cette fois-ci c'est la bonne. :D Ca manque franchement de schémas pour visualiser en fait, ou de se munir d'une feuille ou de bloc-note pour s'accrocher. |
       Expérimenté
Tutoriel:Rendre son jeu compatible avec l'explorateur de jeux de Vista Modifier la base de registre avec Game Maker
Tutoriaux Graphismes
       Paint
Le graphisme facile n°2 Le graphisme facile n°1 Tutoriel Paint: Le desert pour les nuls Tutoriel Paint: Comment faire un ciel étoilé Tutorial Paint: Tutorial d’utilisation avancée de paint Tutoriel Paint: Comment faire un décor de vaisseau spacial Tutorial Paint: Dessin d'un Paysage
       Paint shop pro 7
Tutoriel: Effets spéciaux à la Star Wars !
       The Gimp
Tutoriel - The Gimp - Texte métallique Tutoriel - The Gimp : Effet de Reflet Realiste
       PhotoShop
Tutoriel - PhotoShop : Soleil
Tutoriaux Mods de Jeux Vidéos
       UnrealEd 3
Tutoriaux Unreal Ed 3 - Débuter
|