Je suis en train de créer un tétris et j'ai un drôle de problème.
Lorsqu'un nouveau bloc arrive, il tombe normalement, mais lorsqu'il touche le "sol" du jeu, un bloc parasite apparaît à mi-hauteur:
Le second bloc qui tombe se "fixe" donc sur le bloc parasite (normal, un bloc ne sait pas descendre sur un bloc.
Le problème est que le second bloc a aussi un "parasite". Voyez plutôt:
Le jeu est en fait composé d'une carte de INT (comme dans mario Sokoban) qui contient tout le jeu (sauf le menu) ainsi que les blocs "fixes".
Les coordonnées du bloc qui tombe sont retenues dans un tableau de 4 SDL_Rect.
Ce tableau est envoyé à une fonction qui regarde si le bloc peut encore descendre et, si ce n'est pas le cas, fixe ses coordonnées dans le tableau "carte" (tableau de INT, tout le jeu). et met à -1 les coordonnées du bloc qui tombe (pour ne pas qu'il s'affiche).
Le problème se situe dans cette fonction, lorsque les coodonnées du bloc qui "tombe" sont "greffées" dans le tableau de INT.
Voici le code de ma fonction (pour les test, on ne peut faire tomber qu'une barre horizontale).
void bloc::descente(SDL_Rect *pos, int piece, int carte[][NB_BLOCS_L], bool &forme){
/*
SDL_Rect *pos est le tableau de 4 contenant les coord. du bloc qui tombe
piece est le tupe de piece (un nombre de 1 à 7) 1 pour la barre horizontale
carte[][NB_BLOCS_L] est la ... carte qui contient tous les blocs qui ne peuvent plus bouger
&forme est un booléen qui indique si on doit piocher une nouvelle piece ou non.
*/
switch(piece){//Suivant la pièce, les manip. seront différentes
//SI la barre peut tomber, on la fait descendre d'un cran
for(int i=0;i<4;i++){
pos[i].y++;
}
}
else{
//Sinon, on la fixe dans le tableau de INT
for(int i=0;i<4;i++)
carte[pos[i].x][pos[i].y] = piece;
/*Le nombre "piece" instéré dans la carte indique quelle couleur de
bloc sera blittée"*/
pos[i].x = -1;
pos[i].y = -1;
/*Si le bloc ne peut plus tomber (puisqu'il est fixé dans la carte), on
pourra piocher une nouvelle pièce la prochaine fois*/
forme = true;
}//Fin du "else"
break;
}//Fin du "switch"
}//Fin de la fonction
J'ai affiché les coordonnées du bloc avant de l'insérer dans la carte et voici ce que ça donne:
Citation : Tétris
8 29
10 29
11 29
12 29
(Coordonnées X puis Y) --> Dans le cas où seul 1 barre horizontale est tombée!!!
Et voici ce que contient la variable "carte" AVANT LA FIN DE LA FONCTION:
Citation : Tétris
...début de la carte....
carte[8][29] = 1
... carte[9][9] = 1
...
carte[9][29] = 1
... carte[10][9] = 1
...
carte[10][29] = 1
... carte[11][9] = 1
...
carte[11][29] = 1
... carte[12][9] = 1
...Suite de la carte...
(Les lignes en rouge sont les intrus).
J'ai essayé de toutes les manière possible mais le bloc intrus est toujours là. Je commence à être désespéré!
Quelqu'un voit-il le bug?
Merci d'avance à tous ceux qui pourront m'aider!
Un traitement de texte léger, rapide et fiable : DadaWord (ou sur GitHub)
Blocs parasite
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.