Oniromancie: Tutoriels - Traitement des chaînes


Comment ça marche?

Aëdemphia
Par Sylvanor

Fighting Robots Quest
Par Boulon

Forstale
Par Ødd Clock

Geex
Par roys

Inexistence
Par Falco

La Légende d'Ibabou
Par Zaitan

Lije
Par Gaetz

LoveMaster
Par Cuddlefox

Sarcia
Par Kaëlar

Super Mario RPG - Lost Souls
Par Omegabowser

News: Concours des Alex d'Or 2017-18: (...) / News: MegaMaker : créez votre propre (...) / News: Test de Tinker Quarry / Sorties: Leave the Room / Jeux: Leave the Room /

Chat  (31 connectés)

Bienvenue
visiteur !






publicité RPG Maker!

Statistiques

Liste des
membres


Contact

76 connectés actuellement

9180004 visiteurs
depuis l'ouverture

1078 visiteurs
aujourd'hui

Groupe Facebook

Barre de séparation

Partenaires




TOP
GAMEMAKING


Les 5 plus
visités

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Pixelandgame

Tashiroworld

HeyMakeGames

Au hasard

Forum RMXP

Medator

Skaaz - Création de MMORP

Les deux derniers

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Nos autres partenaires

Devenir
partenaire


Barre de séparation

Un site du réseau
War Paradise

Annuaires référenceurs





Traitement des chaînes
Ecrit par Monos

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.rar


Introduction
La 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,2
Voici 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 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 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 !


Falco - posté le 21/12/2014 à 15:34:44. (15290 messages postés) - heberge

L'homme à Abattre

On a du mal à comprendre par moment, mais sinon c'est cool, merci pour ce tuto :P
String Parser c'est vraiment utile, j'avais eu du mal à comprendre son fonctionnement au début, du coup je ne l'utilisais jamais... aujourd'hui je peux plus m'en passer !

Pixold - Site web sur mes créations - Inexistence - Disponible sur Steam- Zelda Creator -Suivez moi sur Twitter


Monos - posté le 21/12/2014 à 15:43:00. (56278 messages postés) - admin

Vive le making libre

Tu peux me dire ou tu as du mal stp pour que je puisse corrigé ?
Oui String parser est vraiment cool comme extension.

Pixner|Offgame | Le comptoire des clikeurs


Grim - posté le 22/12/2014 à 14:14:49. (250 messages postés)

Je n'ai jamais utilisé de logiciels comme MMF and co mais je me permet de poser mes petites critiques.

Citation:

La 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 ?



J'ai du mal à comprendre cette phrase. Je pense qu'une meilleure formulation serait :

"Le traitement des chaines peut être utile dans beaucoup de cas de figure, par exemple, les matrices, la gestion de données (notamment dans le cas des sauvegardes) et pleins d'autre choses, dans ce tutoriel nous allons voir comment nous en servir".

La seconde partie sur les séparateurs est assez péremptoire et fausse. Dans ce contexte, tu établis que la virgule est un séparateur, mais il faut attendre qu'elle soit considérée comme tel par le parseur.

Donc de mon point de vue, le soucis de ton article est purement sturcturel. Si j'étais toi, je présenterai les caractéristiques des chaines :

* Taille, composée de caractères (évidence structurelle de la chaine)
* Composable (concatènation), la chaine est un monoïde (vivant).
* Décomposable (fragmentation par motif) ce qui entraine le partit pris sur les motifs.
* Présentation du String Parser dans des cas pratiques.
* Cas plus général.

Parce que ce que je ressent dans ton article, c'est principalement que le String Parser c'est bien. Et c'est tout.
Parce que parser une chaine, c'est l'analyser, et éventuellement l'a transformer.

http://funkywork.github.io/


Monos - posté le 22/12/2014 à 17:49:28. (56278 messages postés) - admin

Vive le making libre

Je prend note Grim je ferrais une petite modification dans la semaine.

Pixner|Offgame | Le comptoire des clikeurs

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe

Plan du site:

Activité: Accueil | News | Forum | Flash-news | Chat | Commentaires | Galerie | Screen de la semaine | Sorties | Articles perso | Livre d'or | Recherche
Jeux: Index jeux séparés | Top Classiques | Top Originaux | Les autres | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Jeux complets | Proposer
Rubriques: Le Wiki | Collection Oniro | Tutoriaux | Scripts | Guides | Gaming-Live | Tests | Making-of | Interviews | Articles perso | OST | L'Annuaire | Divers | Palmarès
Hébergés: Aëdemphia | Fighting Robots Quest | Forstale | Geex | Inexistence | La Légende d'Ibabou | Lije | LoveMaster | Sarcia | Super Mario RPG - Lost Souls
Ressources: Jeux | Programmes | Packs de ressources | Midis | Eléments séparés | Sprites
RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis