Supprimer ligne tableau

yoarf Messages postés 215 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 19 février 2009 - 28 déc. 2005 à 15:06
cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Derniè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.

Merci

6 réponses

cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 1 novembre 2010 1
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.

bali_ballo....=]
0
yoarf Messages postés 215 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 19 février 2009
28 déc. 2005 à 19:43
En fait je veux supprimer la ligne l du tableau, puis, que tout ceux qu'il y a au dessus tombe un cascade (pincipe de la ligne pleine d'un tetris).

Je fais donc ceci:

function supp_ligne(){

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)){
mat_cuve.splice(l);
}

}

maj_cuve_case_grise();
}

La suppression ne se fait pas correctement, et la mise à jour des lignes du dessus ne se fait pas correctement (voir code ci avant).
0
cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 1 novembre 2010 1
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!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0
yoarf Messages postés 215 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 19 février 2009
28 déc. 2005 à 21:38
Désolé j'ai un peu de mal mais pourrais tu m'écrire le code ? lol

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yoarf Messages postés 215 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 19 février 2009
28 déc. 2005 à 21:42
je fais un truc comme ça , mais , ça jarte tout :
function supp_ligne(){

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)){
mat_cuve.splice(l,12);
mat_cuve.shift();
}

}
new Array();
maj_cuve_case_grise();
}
0
cs_bali_balo Messages postés 1378 Date d'inscription samedi 9 octobre 2004 Statut Membre Dernière intervention 1 novembre 2010 1
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" :

tab.unshif( new Array(maLongueur) );

Voilà tou "lalahitou"

bali_balo....=]
0
Rejoignez-nous