Outils pour utilisateurs

Outils du site


fr:yaml:listes-boucles

Language / Langue : FR | EN

Listes, collections et boucles

Depuis la 4.17, un scénario YAML peut ranger ses données dans des listes et des collections, puis les parcourir. Ces fonctions sont aussi disponibles dans les formulaires de l'éditeur. La syntaxe TXT ne change pas.

Déclarer et lire

vars:
  position: 0
  nombre: 0
vars_texte:
  objet_tire: ''
listes:
  sac: [clé, potion, potion]
  groupe:
    - {nom: Arthur, vie: 70}
    - {nom: Morgane, vie: 95}
collections:
  heros: {nom: Arthur, vie: 90}

Une liste est ordonnée, avec des indices à partir de 0. Une collection contient des propriétés nommées. Elles peuvent contenir d'autres listes et collections ; les valeurs simples sont des textes ou des entiers, sans booléen, décimal ni null.

texte: 't_heros.nom_t : v_heros.vie_v PV ; premier objet : t_sac[0]_t'

v_…_v lit un nombre, t_…_t un texte. Un indice variable s'écrit groupe[v_position_v].vie. Le chemin doit aboutir à une valeur simple existante : on ne peut pas afficher toute une fiche avec t_heros_t. Les points et crochets servent aux chemins, pas aux noms des propriétés.

Modifier une liste

Dans le faire: d'une action ou d'un événement :

faire:
  - heros.vie + 10
  - {liste: sac, ajouter: potion}
  - {liste: sac, retirer: potion}
  - {liste: sac, retirer: potion, occurrences: toutes}
  - {liste: groupe, supprimer_indice: 0}
  - nombre = compter(sac)

ajouter accepte aussi une fiche, par exemple {nom: Merlin, vie: 80}. retirer enlève la première occurrence ; occurrences: toutes les enlève toutes. Pour supprimer une fiche, utiliser son indice.

compter(sac) donne la longueur ; compter(sac, “potion”) compte cette valeur. Le comptage, le retrait et la recherche comparent les représentations textuelles : 10 et “10” correspondent, “010” reste différent. Pour chercher une fiche par une propriété, utiliser une boucle et une condition.

Tirer, piocher, mélanger

faire:
  - {liste: sac, choisir: hasard, resultat: objet_tire}
  - {liste: sac, melanger: hasard}
  - liste: sac
    piocher: {valeur: potion}
    resultat: objet_tire
    texte_ok: 'Tu prends : t_objet_tire_t.'
    texte_ko: Tu ne trouves aucune potion.
  - {liste: sac, indice_de: clé, resultat: position}
Opération Résultat
choisir: hasard Choisit sans retirer.
piocher: hasard Choisit puis retire l'élément.
piocher: premier / dernier Retire le premier ou le dernier.
piocher: {indice: 2} Retire le troisième élément. Accepte v_position_v.
piocher: {valeur: potion} Retire la première valeur correspondante. Accepte t_nom_t.
melanger: hasard Change l'ordre sans ajouter ni retirer.
indice_de: clé Écrit le premier indice trouvé, ou -1 ; ne retire rien.

Le résultat doit être une destination simple déclarée du bon type : vars_texte pour du texte, vars pour un nombre, ou une propriété simple. Le tirage ne transfère pas de fiche entière. Une pioche invalide laisse la liste et sa destination intactes.

texte_ok et texte_ko sont facultatifs sur les blocs liste:. Ils sont rendus après l'opération et peuvent lire le résultat. Un échec prévu avec texte_ko laisse continuer le faire: ; texte_ko: “” le traite en silence.

Le message KO concerne une liste vide au tirage, une valeur absente au retrait ou à la recherche, ou un indice hors limites à la pioche/suppression. Une recherche absente écrit toujours -1. Les erreurs de type, de destination et de budget restent des erreurs. Sans ces champs, les règles habituelles restent appliquées : retrait absent sans effet, recherche à -1, tirage impossible ou suppression hors limites en erreur.

Trier et garder

faire:
  - {liste: groupe, trier: decroissant, par: vie}
  - {liste: groupe, garder: 2}

croissant est l'autre ordre. Omettre par pour des valeurs simples. Les clés doivent toutes être des nombres ou toutes des textes ; le tri des textes suit l'ordre Unicode, sensible à la casse et aux accents. Les égalités gardent leur ordre précédent. garder: 0 vide la liste ; un nombre supérieur à sa longueur la laisse entière.

Trier, mélanger ou réduire une liste parcourue, ou un de ses parents, est refusé. Faire ces opérations avant ou après la boucle.

Parcourir et répéter

faire:
  - pour_chaque: personnage
    dans: groupe
    indice: place
    faire:
      - personnage.vie + 5
      - si: v_personnage.vie_v > 100
        faire: personnage.vie = 100
      - texte: 't_personnage.nom_t : v_personnage.vie_v PV'
  - repeter: 3
    faire: heros.vie + 1

L'alias personnage désigne l'élément réel : le modifier change la liste. L'indice facultatif commence à 0 et reste en lecture seule. Ces noms existent seulement dans le corps ; ils doivent être distincts des autres alias et des variables du scénario.

Le parcours suit la liste actuelle : un ajout en fin peut être visité ; un élément retiré ne le sera plus. L'alias d'un élément supprimé devient inutilisable. Les automatismes sont vérifiés après la boucle extérieure, pas entre ses passages.

stop quitte seulement la boucle courante ; continue passe au passage suivant. On peut les placer sous une condition. Une redirection ou une fin de partie arrête les boucles et la suite des effets du contexte quitté.

Le corps accepte les conditions, données, textes et médias habituels. Les pauses, interactions et commandes du joueur sont exclues. declencher_event:id peut appeler un événement manuel local ou global compatible ; ses conditions et son état restent appliqués, les sous-appels sont vérifiés et les récursions refusées.

Ces boucles fonctionnent aussi dans les actions, événements, timers et déclencheurs globaux. Limites communes à une commande : 8 niveaux, 1 000 passages et 20 000 opérations, automatismes compris. Une erreur arrête la chaîne ; les effets précédents restent appliqués.

Afficher sans modifier

texte:
  - 'Le groupe :'
  - pour_chaque: personnage
    dans: groupe
    faire:
      - texte: 't_personnage.nom_t : v_personnage.vie_v PV'

Dans un texte ou un HUD, les boucles sont en lecture seule : textes, médias, conditions, styles, boucles, stop et continue. Aucun effet au redessin. Leur budget est distinct de celui des commandes et renouvelé au rendu.

Une liste d'adresses d'images ou de sprites s'affiche avec [[grid:3:images]] : trois colonnes, lignes calculées. Voir Tuiles et grilles.

Sauvegarde et portée

Racine Portée
sac Partie en cours, incluse dans la sauvegarde.
sac_p Stockage local entre les parties ; id: stable requis.
classement_o Partagée en ligne si la source du scénario est autorisée par le serveur.

Hors des sources autorisées, _o reste local à la partie. Le suffixe de la racine décide : une propriété vie_o dans une collection locale reste locale. Reprendre une partie ne remplace pas les valeurs persistantes actuelles par celles du checkpoint. Dans l'export HTML, _o reste local au navigateur, sans partage entre joueurs.

Deux écritures online simultanées sur la même racine peuvent se remplacer : la dernière sauvegarde gagne, même sur deux propriétés différentes. Choisir les moments utiles pour écrire.

Les modèles peuvent associer leurs listes et collections aux données du scénario, y compris à un chemin traversant uniquement des collections, sans indice de liste ni copie.

Voir aussi : Raccourcis ; Données dans l'éditeur.

Descriptions et tags

Les descriptions sont séparées des valeurs, dans infos_donnees: :

collections:
  heros: {nom: Arthur, vie: 100}
listes:
  sac: [clé, corde]
infos_donnees:
  heros:
    description: Le personnage du joueur.
    tags: [combat]
  heros.vie:
    description: 'Points de vie actuels : v_heros.vie_v'
  sac[0]:
    description: Une petite clé en fer.
tags:
  combat: {}

examiner heros.vie affiche sa valeur et sa description. On peut aussi examiner heros, sac ou sac[0]. Les racines et valeurs composées affichent leur description ; une valeur simple affiche aussi sa valeur. L'indice décrit la position indiquée dans la liste.

Les tags se déclarent sur les racines, pas sur une propriété ou un indice. Dans une salle portant le tag, la liste ou collection entière retrouve sa valeur initiale. Avec tag-avant, les initialisations de la salle passent ensuite ; avec tag-après, celles du tag passent en dernier. En anglais : data_info, tag-before et tag-after.

Dans l'éditeur, les fiches regroupent nom, type, valeur et description ; les racines proposent aussi leurs tags. Renommer une racine ou une propriété suit les références et les descriptions. Supprimer un élément décale les descriptions des indices suivants dans les valeurs initiales du scénario. Les formulaires offrent repli, pagination et recherche pour les grands ensembles.

fr/yaml/listes-boucles.txt · Dernière modification : de cyrilfiesta