Jeu Vidéo 2

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

Chaînes

String

String est le nom de la classe en C# qui offre diverses méthodes utiles pour créer et manipuler des chaînes de texte. Cette classe contient des fonctions pour remplacer ou effacer des caractères isoler une partie d'une chaîne ou même créer un tableau à partir d'une chaîne.

Quelques exemples d'utilisation de String:

string phrase = "Bonjour à tous!";
int n = phrase.Length; // 15, le nombre de caractères dans cette chaine
string a = phrase.Substring(3,4); // le mot "jour"
char b = phrase[3]; // le caractère 'j'
string c = phrase.Replace('o','*'); // remplace les 'o' par des '*': c vaut "B*nj*ur à t*us!"

Remarque 1

Les méthodes de la classe String ne modifient pas la chaîne d'origine. Une nouvelle chaîne est fabriquée puis retournée.

Remarque 2

Les caractères qui composent une chaîne peuvent être obtenus individuellement en utilisant la même syntaxe que pour obtenir un élément d'un tableau. Ainsi, maPhrase[2] correspond au caractère situé à la position 2 dans la chaine contenue dans la variable maPhrase. Attention: Comme pour les tableaux, ces positions commencent à 0. Également, le caractère ainsi accédé est de type char et non string.


Concaténation et interpolation

Généralement, il y a 2 façons de construire une chaîne: par concaténation ou par interpolation.

Exemples:

int age=20;
string nom = "Bob";

string concatenation = "Je suis " + nom + " et j'ai " + age + " ans.";
string interpolation = $"Je suis {nom} et j'ai {age} ans.";

// Dans les 2 cas, la chaîne formée est la même:
// "Je suis Bob et j'ai 20 ans."

Le rôle de \

Le caractère \ utilisé dans une chaîne a un usage spécial: il permet d'insérer des guillemets ou d'autres \ dans une chaîne sans causer de problèmes.

Exemples:

// On veut afficher la chaine suivante:
// Je suis "content".
// Comme cette chaîne comporte des guillemets, l'ordinateur aurait de la difficulté à la délimiter:
string phraseErreur= "Je suis "content"."; // ...ERREUR! ne fonctionnera pas!

// Mais avec des \ bien placés, les guillemets ne causeront pas d'ennuis:
string phraseOk= "Je suis \"content\"."; // ...ça fonctionne!

Le rôle de \n

\n sert à indiquer un saut de ligne dans une chaîne: Quand elle sera affichée dans un champ de texte, chaque \n correspondra à un saut de ligne (return).

Exemple:

// On veut créer une chaine qui s'affichera sur 3 lignes différentes:
string info = "Nom: Bob\nAge: 20 ans\nOccupation:Étudiant";

Mise en forme RichText

Dans Unity, un texte affiché dans un champ de texte ou dans la console peut être mis en forme en utilisant des balises semblables à celles utilisées en HTML: C'est ce qu'on appelle du RichText. Les options sont cependant très limitées: on peut mettre du texte en gras (balise b), en italiques (balise i), grossir la police (balise size) ou en changer la couleur (balise color). C'est tout, mais c'est souvent suffisant.

Exemples:

// Affiche "Joue" en rouge:
string phrase1 = "Bob <color=red>joue</color> à un jeu";
Debug.Log(phrase1);

// Affiche "Joue" en vert et en gras:
string phrase2 = "Bob <b><color=green>joue</color></b> à un jeu";
Debug.Log(phrase2);

// Affiche "Joue" en vert et en italiques. La phrase au complet est en plus gros caractères:
string phrase3 = "<size=20>Bob <i><color=green>joue</color></i> à un jeu</size>";
Debug.Log(phrase3);

Propriété d'un objet string

Un objet string (une chaîne de texte) a une seule propriété : la propriété Length qui correspond à sa longueur (nombre de caractères).

La syntaxe de la propriété length est la suivante:

string mot = "bonjour";
int n = mot.Length; // 7, le nombre de caractères dans cette chaine

Principales méthodes d'un objet string

Voici quelques unes des méthodes les plus utilisées de la classe String dans Unity.

Méthode Description Exemples
Contains(string s) Retourne true si la chaine initiale contient la chaîne s. string c = "Bonjour";
bool b = c.Contains("soir");
// b==false
IndexOf(string s) Retourne la position où la chaine s débute dans la chaîne initiale. Si la chaîne initiale ne contient pas la chaîne s, la valeur retournée est -1. string c = "Bonjour";
int i = c.IndexOf("jour"); // i==3
int j = c.IndexOf("o"); // j==1
int k = c.IndexOf("Bob"); // k==-1
Insert(int p, string s) Retourne une nouvelle chaîne dans laquelle la chaîne s a été insérée à la position p. string c = "Bonjour";
string b = c.Insert(3,"TEST");
// b=="BonTESTjour"
string.Join(string s, collection) Fonction statique qui retourne une chaîne en faisant une concaténation des valeurs d'une collection  (tableau ou liste par exemple). Join permet d'insérer une chaine entre chacune des valeurs qui formeront la chaîne retournée. int[ ] nb = {1,3,6};
string c = string.Join("Bob", nb);
// c=="1Bob3Bob6"
Remove(int p, int nb) Retourne une nouvelle chaîne où nb caractères à partir de la position p ont été supprimés. string a="Bonjour";
string b = a.Remove(2,4);
b=="Bor";
Replace(string a, string b) Retourne une chaine dont toutes les occurences d'une autre chaine (a) ont été remplacées par une nouvelle chaine (b). string c = "Bonjour Bob Bouvier!";
string a = "Bo";
string b = "X";
string final = c.Replace(a,b);
final=="Xnjour Xb Xuvier!"
Split(char c)

Retourne un tableau de chaînes dont les éléments sont des sous-chaînes provenant de la chaîne initiales. Cette chaîne initiale est "découpée" selon un caratère spécifié servant de séparateur.

Note: La méthode Split a différentes formes qui peuvent être un peu difficiles à mettre en oeuvre. Dans ce cours, on ne se concentre que sur la forme qui utilise un caractère (char) comme séparateur.

string a = "Bonjour";
string[ ] b = a.Split('o'); // Attention! Écrire 'o' et non "o"
// b=={"b","nj","ur"}
Substring(int p, int nb) Retourne une sous-chaine qui commence à la position p et qui comporte nb caractères. string a = "Bonjour";
string b = a.Substring(3,2);
//b=="jo"
ToCharArray() Retourne un tableau de caractères individuels (char). string a = "allo";
char[ ] b = a.ToCharArray();
//b=={'a','l','l','o'}
ToLower() Retourne une version en minuscules de la chaîne intiale. string a = "Bonjour Bob";
string b = a.ToLower();
//b=="bonjour bob"
ToUpper() Retourne une version en majuscules de la chaîne intiale. string a = "Bonjour Bob";
string b = a.ToUpper();
//b=="BONJOUR BOB"

Remarque

La classe String comporte pas mal plus de méthodes (ainsi que des variantes des méthodes précédentes) que cette courte liste. Consultez la documentation sur le site de MicroSoft pour une liste complète des méthodes disponibles dans String: String Class sur MicroSoft.com


Les objets char

Un objet char en C# représente un caractère seul. On le distingue visuellement d'une chaîne (string) au fait qu'il est délimité par des apostrophes au lieu des guillemets.

string lettre = "x"; // une chaine
char caractere = 'x'; // un caractère

Remarque

Un objet char est plus léger en mémoire qu'un objet string. Quand on a besoin seulement de caracteres uniques, il est préférable d'utiliser autant que possible des objets char. Plusieurs variantes de méthodes de String permettent leur utilisation aussi pour rendre certaines opérations plus efficaces.


Les méthodes de char sont principalement des méthodes de validation. Par exemple, la méthode char.IsLetter(monCaractere) retourne true si monCaractere est une lettre de l'alphabet (majuscule, ou minuscule).

Les plus utiles sont probablement les suivantes:

  • char.IsLetter() - true, si le caractère est une lettre
  • char.IsLower() - true, si le caractère est minuscule
  • char.IsUpper() - true, si le caractère est majuscule
  • char.IsNumber() - true, si le caractère est un nombre
// Exemple de fonction qui valide si une chaîne 
// contient seulement des lettres
private bool EstUnMot(string chaine)
{
    for(int i=0; i<chaine.Length; i++)
    {
        if(char.IsLetter(chaine[i])==false)
        {
            return false;
        }
    }
    
    return true;
}

// Dans la fonction Start() on teste:
void Start()
{
    string mot1="bateau";
    if( EstUnMot(mot1) )
    {
        Debug.Log(mot1 + " est bien un mot!");
    }
    else
    {
        Debug.Log(mot1 + " n'est pas un mot valide...");
    }
    
    // Ce code va afficher "bateau est bien un mot!"
    // Si mot1 était "2bateaux" le code afficherait alors
    // 2bateaux n'est pas un mot valide...
}