Jeu Vidéo 2

Techniques d'intégration multimédia, prof(s):

Tableaux

Qu'est-ce que c'est?

Un tableau est un objet qui permet en gros de stocker plusieurs valeurs de même type dans une seule variable.

Caractéristiques
  • Un tableau ne peut contenir que des valeurs du même type: int, float, string, bool, GameObject, etc.
  • Un tableau est de taille fixe: Une fois créé et peuplé de ses valeurs, on ne peut pas en ajouter ni en supprimer.
  • Dans un tableau, chaque valeur correspond à un indice (une position).
  • Les indices débutent toujours à 0. Ainsi, la première valeur d'un tableau est à l'indice 0, la deuxième valeur est à l'indice 1, etc.
  • Les tableaux sont très performants: l'ordinateur peut aisément traiter des tableaux contenants des milliers de valeurs.
  • Les tableaux sont difficiles à manipuler par programmation: Ils n'offrent que assez peu de méthodes (fonctions) en C#/Unity.
  • D'autres outils, appelés Collections (comme List et ArrayList) jouent un rôle semblable aux tableaux en C# et offrent plus de méthodes de manipulation (Mais attention! Si on veut de la performance, on va préférer utiliser des tableaux quand c'est possible).
Déclaration

Il y a plusieurs façon de déclarer un tableau.

// Façon 1: Déclaration sans initialisation
// La longueur du tableau est spécifiée, mais on le peuplera plus tard...
int[] mesNombres = new int[6]; // tableau de 6 items

// Façon 2: Déclaration avec initialisation directe
// (pas besoin d'indiquer le nombre d'items dans les crochets dans ce cas)
string[] mesMots = new string[] {"pomme","poire","raisin"}; // tableau de 3 items

// Façon 3: Déclaration avec initialisation directe simplifiée
// (Plus court et plus utilisé que la façon 2!)
float[] mesFloat ={1.2f, 4f, 5.7f, 3f}; // tableau de 4 items

Accéder à une valeur, avec tableau[indice]

On peut accèder à une valeur si on connaît son indice. On peut consulter ce valeur (pour l'afficher par exemple), ou la modifier.

// Tableau de 5 entiers pour cet exemple
int[] mesNombres = {3,6,9,5,8}; // tableau de 5 items

// Donc:
// 3 est à l'indice 0
// 6 est à l'indice 1
// 9 est à l'indice 2
// 5 est à l'indice 3
// 8 est à l'indice 4


// Si je veux afficher la valeur 9 à partir de ce tableau:
Debug.Log( mesNombres[2] );

// Si je veux afficher la valeur 9 à partir de ce tableau:
Debug.Log( mesNombres[2] );

// Si je veux remplacer la valeur 6 de ce tableau par un 0:
mesNombres[1] = 0; // le tableau vaut maintenant {3,0,9,5,8}

// Si je veux faire la somme des 2 dernières valeurs du tableau:
int total = mesNombres[3] + mesNombres[4];  // total vaut maintenant 13

// Si je veux augmenter de 10 la dernière valeur du tableau (pour qu'elle soit 18):
mesNombres[4] = mesNombres[4] + 10;
// ou...
mesNombres[4] += 10;

La longueur d'un tableau, avec tableau.Length

Au besoin, on peut mesurer la longueur d'un tableau par programmation grâce à la propriété Length:


int[] mesNombres = {3,6,9,5,8};

int nb = mesNombres.Length;

Debug.Log( "Ce tableau contient " + nb + " valeurs." );

// Affiche: Ce tableau contient 5 valeurs.

Astuce! Afficher sous forme de chaine les valeurs (primitives) d'un tableau
int[] tableau = {1,2,3};

string chaine = string.Join(",", tableau);
Debug.Log(chaine);

// Affiche 1,2,3	  

Attention! Impossible de comparer directement 2 tableaux!

Un tableau est un objet complexe, et non pas une simple valeur primitive comme int ou float. En ce sens, il est impossible de comparer directement 2 tableaux.

Si int[] a={1,2,3} et int[] b={1,2,3} la comparaison a==b donne false, car a et b sont des objets différents (même si ils contiennent des valeurs identiques)!

Pour comparer correctement 2 tableaux, il faut trouver une façon de comparer une à une les valeurs d'un tableau à celles de l'autre (nous verrons quelques approches pour faire cela plus tard).


Associer des objets à un tableau par glisser-déposer (approche 1):


Associer des objets à un tableau par glisser-déposer (approche 2):