Bonjour
Je rencontre quelques problèmes dans mon tétris lorsqu'il faut supprimer une ligne.
J'ai créé une variable booléenne "ligne" pour savoir si la ligne est remplie ou non. Elle est initialisée à "false".
J'ai ensuite un "switch" pour blitter tous les éléments de la carte (1 nombre = 1 couleur de bloc -> 0 = rien sur la carte).
Voici le code que j'utilise:
Deux boucles parcourent la variable "carte" (qui est un tableau de NB_BLOCS_H de hauteur et de NB_BLOCS_L de largeur.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 for(int i=0;i<NB_BLOCS_H;i++){ for(int j=0;j<NB_BLOCS_L;j++){ ligne = true; int pos_x =j*TAILLE_BLOC, pos_y = i*TAILLE_BLOC; switch(carte[i][j]){ case 0: vide.SetLeft(pos_x); vide.SetTop(pos_y); ecran.Draw(vide); ligne = false; break; case 1: jaune.SetLeft(pos_x); jaune.SetTop(pos_y); ecran.Draw(jaune); break; case 2: rouge.SetLeft(pos_x); rouge.SetTop(pos_y); ecran.Draw(rouge); break; case 3: bleu.SetLeft(pos_x); bleu.SetTop(pos_y); ecran.Draw(bleu); break; case 4: brun.SetLeft(pos_x); brun.SetTop(pos_y); ecran.Draw(brun); break; case 5: mauve.SetLeft(pos_x); mauve.SetTop(pos_y); ecran.Draw(mauve); break; case 6: orange.SetLeft(pos_x); orange.SetTop(pos_y); ecran.Draw(orange); break; case 7: vert.SetLeft(pos_x); vert.SetTop(pos_y); ecran.Draw(vert); break; } }//Fin du "for" de parcours de ligne horizontal if(ligne){ for(int k=0;k<NB_BLOCS_L;k++){ carte[i][k] = 0; } for(int remonte_lignes = i; remonte_lignes < 0; remonte_lignes--){ for(int k=0;k<NB_BLOCS_L;k++){ if(carte[remonte_lignes][k] != 0){ carte[remonte_lignes+1][k] = carte[remonte_lignes][k]; carte[remonte_lignes][k] = 0; }//Fin du "if" }//Fin du premier "for" }//Fin du "for" de la remontée de lignes }//Fin du "if" si la ligne est remplie }
On teste la valeur de la "case" et on blitte le bloc correspondant.
A CHAQUE DEBUT DE LIGNE, la variable "ligne" (booléen) passe à "true". Si jamais un seul espace vide (0) est affiché, elle passe à "false".
Le programme sort ensuite du "for" qui parcours la carte horizontalement et teste si la variable "ligne" vaut "true" ou "false".
Si cette variable est à "true", alors, le programme supprime la ligne et fait descendre tous les blocs.
Les problèmes sont les suivants:
-Si un bloc est présent dans le coin inférieur droit de la carte (DERNIER BLOC "BLITTE" (colle à l'écran), le programme supprime toute la ligne
-Le code de suppression de ligne est foireux, le programme supprime tout ou une grande partie des blocs présents à l'écran.
Quels sont les problèmes?
Merci d'avance.
Partager