Bonjour

Je suis en train de coder mon propre tétris et je suis face à un drôle de problème.

Lorsque le bloc arrive, il tombe normalement:


Mais lorsqu'il a touché le "sol", une copie de ce bloc se place au milieu du jeu.
(Je pense que le bloc est placé en Y avec les coordonnées de X).
Voici une petite image montrant le problème:

(Le carré du haut est l'intrus).

Voici le code utilisé pour générer les coordonnées du bloc:
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
case 2:  //Case 2 == CARRE
/*
pos est de type SDL_Rect et est un tableau de 4 cases.  Il contient les coordonnées du bloc en train de tomber.
*/
        case 2:  //Carré
        if(carte[pos[2].x][pos[2].y+1] == 0 && carte[pos[3].x][pos[3].y+1] == 0
        && (pos[2].y+1) < NB_BLOCS_H){
            for(int i=0;i<4;i++){
                pos[i].y++;
            }
        }
        if(pos[2].y+1 == NB_BLOCS_H || carte[pos[2].x][pos[2].y+1] != 0
        || carte[pos[3].x][pos[3].y+1] != 0){
            carte[x_1][y_1] = 4;
            carte[pos[1].x][pos[1].y] = 4;
            carte[pos[2].x][pos[2].y] = 4;
            carte[pos[3].x][pos[3].y] = 4;
            pos[0].x = -1;
            pos[0].y = -1;
            pos[1].x = -1;
            pos[1].y = -1;
            pos[2].x = -1;
            pos[2].y = -1;
            pos[3].x = -1;
            pos[3].y = -1;
            etat = true;
 
        }
        break;
Voici le code qui colle les images à l'écran:
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
//Blittage du décor
    for(int i=0;i<NB_BLOCS_L;i++){
        for(int j=0;j<NB_BLOCS_H;j++){
            position.x = i*TAILLE_BLOC;
            position.y = j*TAILLE_BLOC;
            switch(carte[i][j]){
                case 0:
                SDL_BlitSurface(vide, NULL, ecran, &position);
                break;
                case 1://Ligne
                SDL_BlitSurface(jaune, NULL, ecran, &position);
                break;
                case 2://Bloc
                SDL_BlitSurface(rouge, NULL, ecran, &position);
                break;
//Pour l'instant, seul 2 "case" sont faits.
            }
           //Blittage du bloc en cours de descente
            for(int alpha=0;alpha<4;alpha++){
                if(pos_piece[alpha].x == i && pos_piece[alpha].y == j){
                    position.x = i*TAILLE_BLOC;
                    position.y = j*TAILLE_BLOC;
                    SDL_BlitSurface(jaune, NULL, ecran, &position);
                }
            }//Fin du "for"
        }
    }

Ou est le problème?

Merci d'avance.