yoarf
Messages postés215Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention19 février 2009
-
28 déc. 2005 à 15:06
cs_bali_balo
Messages postés1378Date d'inscriptionsamedi 9 octobre 2004StatutMembreDernière intervention 1 novembre 2010
-
28 déc. 2005 à 23:10
Bonjour,
Voilà j'ai une matrice de cette forme :
mat_cuve = new Array();
for (l 280; l < 680; l l+20){
mat_cuve[l]=new Array();
for (c 140; c < 380; c c+20){
mat_cuve[l][c] = 0;
}
}
En fait je fais un tetris, ainsi ma fonction doit retirer une ligne pleine soit une ligne remplie de "1".
Ce code :
for (l 280; l < 680; l l+20){
b=0;
if ((mat_cuve[l][140] == 1)&& (mat_cuve[l][160] == 1)&&(mat_cuve[l][180] == 1)&&(mat_cuve[l][200] == 1)&&(mat_cuve[l][220] == 1)&&(mat_cuve[l][240] == 1)&&(mat_cuve[l][260] == 1)&&(mat_cuve[l][280] == 1)&&(mat_cuve[l][300] == 1)&&(mat_cuve[l][320] == 1)&&(mat_cuve[l][340] == 1)&&(mat_cuve[l][360] == 1)){
trace ("ligne : " + l);
}
}
maj_cuve_case_grise();
M'indique correctement où se place la ligne pleine.
Maintenant je voudrais la supprimer et biensur décaler toutes les lignes de dessus.
Ainsi, je fais :
for (l 280; l < 680; l l+20){
b=0;
if ((mat_cuve[l][140] == 1)&& (mat_cuve[l][160] == 1)&&(mat_cuve[l][180] == 1)&&(mat_cuve[l][200] == 1)&&(mat_cuve[l][220] == 1)&&(mat_cuve[l][240] == 1)&&(mat_cuve[l][260] == 1)&&(mat_cuve[l][280] == 1)&&(mat_cuve[l][300] == 1)&&(mat_cuve[l][320] == 1)&&(mat_cuve[l][340] == 1)&&(mat_cuve[l][360] == 1)){
do{
for (j=140; j<380; j=j+20){
mat_cuve[l-b][j]=mat_cuve[l-b-20][j];
}
b=b+20;
}while (l-b==280);
}
}
maj_cuve_case_grise();
Mais cela ne fonctionne pas, donc si vous avez une idée (pour info maj_cuve_case_grise(); mets à jour seulement seulement l'aspect visuel donc n'y faites pas attention.
cs_bali_balo
Messages postés1378Date d'inscriptionsamedi 9 octobre 2004StatutMembreDernière intervention 1 novembre 20101 28 déc. 2005 à 15:33
utilise la fonction splice() sur un Array...Un Array c'est une pile FIFO, LIFO et une ListeChaînée en même temps...
Donc tu peut faire n'importe quel opératon dessus.
Et le décalage se fait automatiquement.
cs_bali_balo
Messages postés1378Date d'inscriptionsamedi 9 octobre 2004StatutMembreDernière intervention 1 novembre 20101 28 déc. 2005 à 21:30
Eh bien tu n'as qu'à supprimer le premier élément du tableau avec shift()
Ensuite tu rajoute un tableau: new Array() à la fin de ton tableau de tableau...
bali_balo....={ j'ai mal au dents!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
cs_bali_balo
Messages postés1378Date d'inscriptionsamedi 9 octobre 2004StatutMembreDernière intervention 1 novembre 20101 28 déc. 2005 à 23:10
D'abord, au lieu de vérifié la dernière ligne si elle comporte que des "1", pourquoi ne pas faire une boucle while et vérifier si il y a un "0" dans une de ces cases...
exemple :
while ( !( monTableau[ ligne[i] ] ) )//tant que dans la ligne il y a un "1" faire...
{
//bloque de code qui supprime ta ligne
}
//sinon la ligne n'est pas complète
Ensuite, il sert à quoi ton new Array() tout seul là???
Il faudrait peut-être le rajouter à la fin de ton tableau qui lui contient des tableaux( qui correspondent au lignes )...non...
Donc fait ceci pour rajouter un nouveau tableau à la fin d'un tableau ( nommé "tab" par exemple ) de longueur "maLongueur" :