Les Tableaux

Les Tableaux

> Tutoriel LeekScript

Tu connais certainement l'analogie entre les variables informatiques et les boîtes : Le nom de la variable est sur l'étiquette de la boîte; quand tu fais appel à la variable, tu regardes simplement ce qu'il y a dans la boîte.

Et bien on peut faire une analogie semblable entre les tableaux et une commode. Une commode est un meuble qui contient plusieurs tiroirs... un tableau est une entité qui contient plusieurs variables. Schématiquement, c'est tout.

Initialiser un tableau

Un tableau se représente par des crochets. L'exemple ci-dessous crée un tableau vide :

var toto = [];

On reconnaît le mot clé var qu'on utilise déjà pour les variables. toto est donc une variable de type tableau.

var fruits = ["poire", "banane", "pomme"];

Ici, nous avons initialisé le tableau avec 3 valeurs. En gros, on a rangé la chaîne "poire" dans le premier tiroir, "banane" dans le deuxième et "pomme" dans le troisième. Si on avait inversé les 2 premiers fruits, on aurait donc eu un tableau différent.

C'est bien gentil de ranger, mais il faut savoir s'en servir... Et bien c'est simple si on sait compter à partir de 0 (parce qu'en informatique, on aime bien compter à partir de zéro !)

Le premier tiroir porte le numéro 0, le deuxième le numéro 1 et le troisième, le numéro 2. Si on avait un tableau à 100 cases, le dernier porterait donc le numéro 99. Ok, et maintenant ? C'est simple, pour utiliser une case, il suffit d'indiquer son numéro entre crochets :

debug( fruits[1] );

Cet exemple affichera donc la case numéro 1 (la deuxième case, donc) du tableau qui s'appelle fruits. Ici il affichera donc la chaîne "banane".

Et si on veux changer la valeur ? Rien de plus simple, on fait comme pour les variables, en précisant toujours la case à modifier :

fruits[1] = "cerise"; debug( fruits ); // affichera ["poire", "cerise", "pomme"]

Simple, non ?

Et si je demande une case qui n'existe pas ? Genre dans l'exemple précédent, je demande fruits[3] ?

Bien vu ! La troisième case porte le numéro 2, donc la case numéro 3 n'existe pas ! Dans ce cas, la valeur ''null'' est renvoyée.

Bon, j'ai essayé ton truc avec le code en dessous et ça affiche des trucs bizarres, on dirait que j'ai tout cassé !

var fruits = ["poire", "banane", "pomme"]; debug( fruits ); // affichera ["poire", "banane", "pomme"] fruits[3] = "ananas"; debug( fruits ); // affichera ["poire", "banane", "pomme", "ananas"] fruits[50] = "cerise"; debug( fruits ); // affichera [0:"poire", 1:"banane", 2:"pomme", 3:"ananas, 50:"cerise"]

Rassure toi, jeune Padawan, tu n'as rien cassé du tout ! Puisque les cases entre le dernier élément du tableau (numéro 3) et celui que que tu cherches à rajouter (numéro 50) n'existent pas, le leekscript a transformé ton tableau en tableau associatif. Je t'explique ça à la fin de ce tuto. Pour l'instant, considère que c'est un tableau normal où il y a un trou dans la numérotation des cases.

Certaines fonctions de leekwars nous donnent directement un tableau. C'est par exemple le cas de la fonction getAliveEnemies.

Parcourir un tableau

Très bien tout ça. Maintenant, je sais créer des tableaux mais je fait comment pour, par exemple, afficher les noms de tous les adversaires ? je ne sais pas combien il y en a et je vais pas tout faire à la main !

Effectivement. La première idée, ce serait de faire

var enemies = getAliveEnemies(); debug( getName(enemies[0]) ); debug( getName(enemies[1]) ); debug( getName(enemies[2]) ); debug( getName(enemies[3]) ); debug( getName(enemies[4]) );

Mais s'il y a plus que 5 ennemies, il va en manquer, et s'il y en a moins, il y a des lignes en trop ! Pour savoir combien de cases a un tableau, la fonction est count.

var nbEnemies = count(enemies); debug("il y a " + nbEnemies + " ennemies encore vivants.");

Maintenant, comment parcourir le tableau sans galérer ? Par exemple, si tu veux savoir où se trouvent les obstacles sur la carte, getObstacles est fait pour toi... Mais le tableau compte environ une centaines de cases... pas pratique à faire un par un ! C'est maintenant que les Les Boucles révèlent tout leur potentiel !

var obstacles = getObstacles(); var nbObstacles = count(obstacles);

for (var k=0; k

tableau classique tableau associatif

Déclaration tableau vide

var casesAccessibles = []; var casesAccessibles = [:];

Déclaration tableau en dur

var casesAccessibles = [252, 253, 254, 255, 270, 271, 272, 287, 288, 289, 290, 305, 306, 307, 322, 323, 324, 325, 340, 341, 342, 357, 358, 359, 360];

var casesAccessibles = [252 : 3, 253 : 3, 254 : 3, 255 : 3, 270 : 2, 271 : 2, 272 : 2, 287 : 3, 288 : 1, 289 : 1, 290 : 3, 305 : 2, 306 : 0, 307 : 2, 322 : 3, 323 : 1, 324 : 1, 325 : 3, 340 : 2, 341 : 2, 342 : 2, 357 : 3, 358 : 3, 359 : 3, 360 : 3];

Ajout de valeursAjoute en fin de tableau

push(casesAccessibles, uneCase); Ajoute en début de tableau

unshift(casesAccessibles, uneCase);

Ajoute à une position particulière

insert(casesAccessibles, uneCase, position);

caseAccessibles[uneCase] = valeur;

Parcours du tableauParcours sans connaitre l'index

for(var cell in caseAccessibles) { .... }

Boucle sur l'index en partant du début du tableau

for(var i=0; i=0; i--) { var cell = caseAccessibles[i]; .... } Parcours en récupérant l'index et la cellule à la fois

for(var i:var cell in caseAccessibles) { .... } for(var cell:var distance in caseAccessibles) { .... } Modification d'un élémentimpossible directement, il faut supprimer l'ancienne valeur puis insérer la nouvellecaseAccessibles[uneCase] = nouvelleValeur; Suppression d'un élémentIl faut obligatoirement connaitre la position de l'élément à supprimer

remove(caseAccessibles, position); Supprime en connaisant la clé

removeKey(caseAccessibles, caseASupprimer);

Supprime la première valeur trouvée dans le tableau (à appeler plusieurs fois pour supprimer toutes les occurences de la valeur donc)

removeElement(caseAccessibles, distance);