Bonjour,
Je suis débutant en c et pour m'entrainner je suis en train de faire un tetris.
J'essaie depuis hier de créer une fonction qui gérera les collisions verticales mais ça ne semble pas vouloir fonctionner même si tout semble être bon (enfin d'après moi).
Voici mon code:
Pour que ça soit clair pour tout le monde, comme on dit "une photo vaut 1000 mots", j'ai ajouté cette petite illustration pour vous décrire ce que je compte faire.
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
28
29
30
31 // Fonction qui vérifie si il y a collision entre un bloc qui se trouve dans la forme et un bloc se trouvant dans la carte int verifierCollisionCarte(SDL_Rect positionForme, int carte[][TAILLE_FORME], int carteForme[][NB_BLOCS_HAUTEUR]) { SDL_Rect positionBlocCarte; // La position du bloc dans la CARTE int i = 0, j = 0, flag = 0; for(i = 0; i < TAILLE_FORME ; i++) { for(j = 0; j < TAILLE_FORME ; j++) { if(carteForme[i][j]) // Quand on trouve un bloc dans la forme on effectue la vérification { // On convertie la position du bloc de sa position dans la carte de la forme à sa position dans la carte générale // Un bloc se trouvant aux coordonées{1,1} d'une forme se trouvant à {2,2} aurat pour coodonées dans la carte {3,3} // Voir l'image... positionBlocCarte.x = positionForme.x + i; positionBlocCarte.y = positionForme.y + j; // Si il n'y a aucun obstacle à la position en dessous du bloc et que ce n'est pas la limite de la carte on incrémente flag if (carte[positionBlocCarte.x][positionBlocCarte.y + 1] == 0 && positionBlocCarte.y +1 < NB_BLOCS_HAUTEUR-1 ) flag++; } } } if(flag) return 1; else return 0; }
Qu'est ce qui cloche dans mon code ?
Merci.
EDIT:
JE crois avoir trouvé d'où venait le problème. C'est peut-être le flag que j'utilise mal.
J'essaie de trouver une solution. si vous en avez une merci de la partager avec moi
EDIT2 :
Normalement ce code devrai régler le problème du flag:
Je viens de tester et je m'apercois que mon flag est toujours égale à 1. Je ne vois pas du tout ce qui peut causer ça.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // Si flag = 4, ça veut dire que tous les blocs ont le champs libre pour descendre. if(flag == 4) return 1; else return 0;
Partager