Bonjour,
Je suis en train d'essayer de comprendre un code préexistant, et je bloque sur un point.
Le sujet général du code est la création d'un labyrinthe, et chaque case doit comporter une mention indiquant si on y es déjà passé ou non.
Pour cela, le code indique :
typedef enum { MUR_BAS = 0x1, MUR_DROITE = 0x2, PASSAGE = 0x4 } cell_state_t;
puis des macros permettent d'agir sur les murs et le passage :
#define INIT_MUR(pos) laby[pos] |= MUR_BAS | MUR_DROITE
#define DETRUIRE_BAS(pos) laby[pos] &= ~MUR_BAS
#define DETRUIRE_DROITE(pos) laby[pos] &= ~MUR_DROITE
#define RESET_PASSAGE(pos) laby[pos] &= ~PASSAGE
#define MARQUER_PASSAGE(pos) laby[pos] |= PASSAGE
#define EST_MARQUE(pos) (laby[pos] & PASSAGE)
avec typedef char cases; laby = new cases[(lg)*(lrg)];
1)Si quelqu'un a l'explication des &= , |=, je veux bien car je n'ai rien trouvé sur le net
2) plus important, j'aimerai bien comprendre le type de données que sont MUR_BAS, MUR_DROITE, PASSAGE et EST_MARQUE, car je pensais qu'il s'agissait plus ou moins de booléens mais ce genre d'instruction ne marche pas (le programme ne rentre pas dans le if lors de l'exécution même quand ça devrait) :
if ( !EST_MARQUE(position-lg) ) { cout<<"haut"<<endl;}
et cout<<!EST_MARQUE(position-lg); est refusé par le compilateur. Du coup j'ai un peu du mal à déboguer le code...
Quels genre de tests faut-il donc faire pour savoir si on est déjà passé sur une case ou pas ?
Un grand merci d'avance aux gentils babasseurs qui me répondront !
Audrey.
PS : je précise que je ne recherche pas de solutions alternatives à ce code (en passant par des structures, par exemple, c'est déjà fait !) mais que j'aimerai bien comprendre tout ça...
Partager