Le traitement des chaînes.Rédigé par Jean Monos.
Exemple mfa compatible seulement avec Clickteam Fusion 2.5
L'exemple mfa sansextenssion est compatible avec la version lite.
String Parser n'est pas disponible sur la version lite.
Téléchargement de l'archive qui contient les exemples :
http://comptoir-mmf.eu/tuto/traitementchaine.rarIntroductionLa matrice, la gestion de donnée, les sauvegardes, et plein de truc encore que le traitement de chaîne peut être utile. Qu'es donc tout ça ?
8,2,2,4,6,2,7,4,6,4,7,5,3,4,8,4
Et voici un exemple, la chaîne en italique possède (dans cette exemple) deux caractéristiques.
Des valeurs numériques. (Qui peuvent être Alphanumérique bien sur)
Et une Virgule.
La virgule permet de séparer les valeurs numériques. C'est que nous appelons un séparateur !
Les Valeurs Numérique (ou Alphanumérique) sont souvent appelé des éléments.
Mais pourquoi ? Pour plein de chose Imaginé sur une ligne de 16 cases, avant de le début de votre niveau il faut le composer de tiles, avec ce genre de chaîne, le programme va savoir que sur la premier case il faut placer le tiles numéros 8, la seconde case le tiles numéros 2, la troisième case encore le tiles 2 et ainsi de suite jusque à la 16em case.
Avec un petit éditeur à coté vous pouvez générer des niveaux et le lire seulement la présence d'une seule scène dans Fusion et pas utiliser la méthode, une scène=> un niveau... Gain de place et faciliter de débuge assuré
Ceci est bien sur un exemple très très simple pour comprendre l'utilité.
Avant de continuer, une petite chose, vous êtes maître de dire ce que vous voulez dans vos chaine. On peux faire des groupes de trois nombres, le premier et le numéros de tiles, le 2em ça position X, et le 3em ça position Y, on repars sur un nouveau cycle. Le 4em (et donc le 1er d'un nouveau cycle) est le numéros de tiles, le 5em ça position X et le 6em ça position Y... Ce qui permet d'affiner et d'ajouter d'autre information à traiter.
Vous pouvez aussi utiliser plusieurs séparateurs. Pratique pour faire des groupes de donnée.
4,0,0#2,0,1#4,0,2Voici un autre exemple ou je combine deux séparateurs. La virgule et le Croisillon (#). (Non ce n'est pas un dièse)
Le programme va en premier lieu sortir le premier groupe (élément) entre le croisillon pour enfin sortir les informations entre les virgules. (Numéros de tiles, position X, Position Y dans mon exemple bien sur)
On ne fait pas que des niveaux avec ça !Non, travailler des chaines avec séparateur n'est pas dédier à faire des niveaux de jeu ! Il y a plein de possibilité dont même moi je n'ai pas idée. L'autre truc cool c'est de réaliser votre système de sauvegarde !
Voici un exemple, je veux sauvegarder la position de mon joueur sur la carte et reprendre ma partie plus tard ! Avec l'expérience les gens utilises le fichier ini pour ça. Mais un simple fichier texte fait la même chose avec une petite chaîne avec une virgule. Numéros du niveau,position x,position Y. On peux même facilement ajouter d'autre donnée, vie, nombre de bombe, et j'en passe. Alors oui le fichier ini semble plus facile à utiliser, mais à la base ce n'est pas fait pour ça. Le fichier ini est un fichier de configuration, mais Chacun utilise la méthode qui lui semble le meilleur. (¨Personnellement j'utilise beaucoup plus les tableaux et la possibilité de sauvegarder directement dans un fichier, une fois ce fichier recharger, tout est en place automatiquement.)
Allons plus loin sur une idée. La triche ! Le fichier ini peut facilement être trafiquer. Le fichier texte aussi vous allez me dire. Mais si vous "coder" la chaîne en entier avant de la sauvegarder ? Et la décoder dans le logiciel en lui même avant de la travailler ? Dans le fichier Ini, il faut coder et décoder chaque éléments. Personnellement je trouve plus simple de coder une chaîne en entier. (Il y a quand même des méthodes pour parer cela en réalisant une empreinte MD5 des informations sauvegardées avec une clef secrète bien sur le mémoriser aussi dans le fichier ini et au chargement recomposer l'empreinte et ce qui est sauvegarder. Si c'est différent, le joueur à changé une valeur et donc tricher ! Voir le tuto sur les scores en lignes pour comprendre l'idée !)
Passons à la pratique !C'est bien beau ce blabla, mais on fait comment sur Clickteam Fusion 2.5 ?
Il y a plusieurs méthode ! Utiliser directement une extension. (Sting parser), ou les fonctions de base du logiciel.
Nous allons débuter avec les fonctions de base du logiciel si vous le voulez bien. (De toute façon vous n'avez pas le choix)
Avec les fonctions de base !Dans le pack il y a un exemple : sansextenssion.mfa
C'est un exemple que j'ai réalisé pour vous montrer que sans extenssion, vous pouvez analyser une chaine de caractère et de sortir des éléments entre les séparateurs ! Ceci est une méthode parmi tant d'autre.
Dans la premier chaine globale, j'ai placer le séparateur que je voulais utiliser : une virgule.
J'ai ajouté 5 objets. Trois Chaîne, un compteur, et un bouton.
Une Chaîne "source" qui sera le texte à analyser.
Une Chaîne "sortie" qui permet de sortir l'élément analysé
Une Chaîne "Recherche Caract" qui va accueillir le caractère à comparer !
Le Compteur "Curseur" qui permet de connaitre l'emplacement de la lettre à analyser dans la Chaîne.
Et un bouton pour lancer l'analyse d'un élément.
Dans cette exemple nous lançons la recherche élément par élément manuellement. Bien sur le plus souvent il faut faire ça automatiquement pour enchaîner la sortie des éléments entre les séparateurs pour effectuer le travaille dessus.
Ligne 3 : Quand le bouton suivant est utilisé, on le désactive, on efface le contenue du texte sortie pour accueillir le prochain, et lance la boucle Lecture qui sera le moteur de recherche du programme.
Ligne 5 : Quand la boucle Lecture est appelé, nous allons mémoriser un caractère de la chaîne qui se trouve à la place de la valeur du curseur. Pour cela nous allons utiliser une fonction du logiciel : Extraire la sous chaîne du milieu qui se trouve dans Spécial/Chaînes[i] en éditeur d'expression. C'est une fonction pratique qui permet sortie d'une chaîne, un nombre de caractère voulue, a partir de l'emplacement voulus. Exemple : Dans la chaîne [i]Je suis un Clickeur je peux demander de sortir 5 caractère a partir de 3. (Attention on débute à 0 quand c'est pour l'emplacement) ce qui fait SUIS U
Attention aussi, les espaces comptes. Donc dans notre exemple, nous allons sortir un seul caractère a partir de la valeur du compteur curseur. Ensuite nous allons lancer la Boucle recherche.
Ligne 7 : Quand la boucle Recherche est appelé, et que le contenue de la valeur global (Séparateur) donc une virgule est égale au contenue de la chaîne Recherche caract (vous savez le caractère qui est mémorisé plus haut), alors on active le bouton prêt pour rechercher l'élément suivant, et on ajoute 1 au compteur curseur. L'élément est trouvé au complet.
Ligne 8 : C'est l'inverse de la ligne 7, Quand la boucle Recherche est appelé et que le caractère est différent de la virgule dans notre exemple, alors on ajoute 1 au compteur curseur, on ajoute le caractère que nous avons comparé dans la sortie, et on relance une nouvelle Lecture pour comparer le prochain caractère.
Ligne 10 : Une petite protection pour éviter un "bug" de mémoire. On compare la longueur de la chaîne Source avec la fonction Len, et la valeur du compteur. Comme ça le compteur sait quand il arrive à la fin de la chaîne et peut repartir à 0. Si on fait une recherche au delà du nombre de caractère contenue dans la source, Fusion ne va pas aimer. Comment sortir une lettre qui n'existe pas ?
Voici donc un petit exemple sans l'utilisation d'une extension. Il y a plein de chose à faire en fonction de vos besoins bien sur. A vous de vous adapter.
String Parser Cette fois si nous allons utiliser l'extension String Parser. Nous voulons le même résultat que sans extension. Afficher Élément par Élément se qui se trouve entre deux séparateurs. Le Fichier exemple est stringparsemfa
J'ai posé pour cette exemple trois objets. String Parser, l'objet Chaîne "Sortie" et un compteur "Élément"
Ligne 3 : En début de scène ont demande à string parser de mémoriser une virgule en tant que séparateur et le texte à analyser.
Ligne 5 : Chaque fois que nous utilisons le bouton on modifie dans la chaîne "sortie", l'élément voulue en fonction de la valeur du compteur et on ajoute 1 au compteur. Attention le premier élément est bien le "1" et non le "0".
Ligne 7 : Comme sans extension une simple mesure de protection pour reboucler la recherche.
C'est tout avec String Parser. Par de recherche caractère par caractère à comparer. String Parser permet aussi de lire et enregistrer des données sur des fichiers, d'utiliser plusieurs séparateur, de faire un cryptage MD5 et bien plus encore.
Comme sans extension, l'exemple n'est pas automatiser. Vous allez devoir utiliser des boucles pour sortir les éléments et les traiter voir en faire une 2nd analyse si il des séparateurs dans des séparateurs. 1,2,3#1,5,5#
1er étape sortir le premier élément entre les croisillons et ensuite les trois éléments entre les Virgules.
Mais ça vous savez le faire maintenant !