Table des matières

Routine simple

Une routine simple est un bloc d’instructions qu’on peut réutiliser depuis n’importe quelle autre routine (action, règle, réaction, ou une autre routine simple). Elle évite la duplication de code.

Définir et appeler une routine simple

Définition

routine remercier:
  dire "« Merci et à bientôt ! »".
fin routine

Appel

Les deux formes ci-dessous sont équivalentes :

exécuter routine remercier.
exécuter la routine remercier.

Exemple minimal complet

wiki_routines_routine_simple_min
Le lieu de test est un lieu.
 
routine remercier:
  dire "« Merci ! »".
fin routine
 
action saluer:
  exécuter la routine remercier.
fin action
 
règle avant commencer le jeu:
  dire "Essayez : {/saluer/}".
fin règle

tester cet exemple

Paramètres typés (''ceci'' / ''cela'')

Une routine simple peut accepter jusqu’à deux paramètres typés ceci et cela, déclarés dans un bloc définitions:, et utilisés dans le bloc exécution:. La forme courte (sans étiquette, comme plus haut) reste valide pour les routines sans paramètre.

Types disponibles

Type Sémantique Ce qu’on peut passer à l’appel
nombre valeur entière, capturée à l’appel (lecture seule) un littéral (5), la valeur d’un compteur, une propriété numérique
texte chaîne, capturée à l’appel (lecture seule) une chaîne "…", l’intitulé d’un élément
compteur référence à un compteur (la routine peut le modifier) un compteur
<classe> référence à un élément du type <classe> (modifiable) un élément dont la classe hérite de <classe> (objet, lieu, vivant, dragon, …)
élément catchall : n’importe quel élément du jeu (objet, lieu, personne, …) un objet, un lieu, une personne… (le compteur n’en hérite pas — voir ligne « compteur »)

L’article admis est un ou une (paramètre singulier). des est refusé.

Définition et appel

wiki_routines_routine_param_min
Le salon est un lieu.
La potion est un objet dans le salon.
Le score est un compteur initialisé à 0.
 
routine LancerObjet:
  définitions:
    ceci est un objet.
    cela est un nombre.
  exécution:
    dire "Vous lancez [intitulé ceci] avec [c cela] points de force.".
fin routine
 
routine ajusterScore:
  définitions:
    ceci est un compteur.
  exécution:
    changer ceci augmente de 10.
    dire "Bonus ! Score : [c ceci].".
fin routine
 
routine notifier:
  définitions:
    ceci est un texte.
  exécution:
    dire "Note : [ceci]".
fin routine
 
règle après commencer le jeu:
  exécuter routine LancerObjet avec la potion et 5.
  exécuter routine ajusterScore avec le score.
  exécuter routine notifier avec "Bienvenue !".
fin règle

tester cet exemple

Sans bloc ''définitions:''

Sans bloc définitions:, la routine n’attend aucun paramètre. exécuter routine X avec 5 sur une telle routine remonte une erreur.

Balises d’interpolation utiles

Dans le corps d’une routine paramétrée :

Surcharge de routines

Plusieurs routines peuvent partager le même nom si leur signature diffère (arité ou types des paramètres). Le moteur choisit automatiquement la variante la plus spécifique à l’appel.

wiki_routines_routine_surcharge
Le salon est un lieu.
La pomme est un objet dans le salon.
Le chien est un vivant dans le salon.
 
routine logger:
  dire "ZERO.".
fin routine
 
routine logger:
  définitions:
    ceci est un objet.
  exécution:
    dire "OBJ : [intitulé ceci].".
fin routine
 
routine logger:
  définitions:
    ceci est un vivant.
  exécution:
    dire "VIV : [intitulé ceci].".
fin routine
 
règle après commencer le jeu:
  exécuter routine logger.                   -- ZERO
  exécuter routine logger avec la pomme.     -- OBJ
  exécuter routine logger avec le chien.     -- VIV (vivant > objet)
fin règle

tester cet exemple

Règles de spécificité :

Limitation des appels différés

Les appels différés (dans N <unité>) ne supportent pas encore le passage d’arguments. La routine programmée doit être une variante sans paramètre.

Cas typique : factoriser un affichage

Une routine appelée depuis plusieurs actions affichant le même message :

wiki_routines_sac_inventaire
Le lieu de test est un lieu.
Le sac est un contenant dans l'inventaire.
La pomme est un objet vu ici.
La clé est un objet vu ici.
 
routine afficherContenuSac:
  dire "Votre sac [si le sac contient un objet]contient : [lister objets sac][sinon]est vide.[fin si]".
fin routine
 
action ouvrir le sac:
  exécuter la routine afficherContenuSac.
fin action
 
action fouiller le sac:
  exécuter la routine afficherContenuSac.
fin action
 
règle avant commencer le jeu:
  dire "Essayez : {/prendre la pomme/} puis {/ouvrir le sac/} ou {/fouiller le sac/}.".
fin règle

tester cet exemple

Programmer l’exécution d’une routine

Une routine simple peut être déclenchée après un délai en temps réel :

règle après commencer le jeu:
  exécuter la routine alarme dans 30 secondes.
fin règle

→ Voir Programmer une routine.

Exemple plus consistant : magasin

Une routine remercier appelée par deux actions distinctes acheter et vendre.

wiki_routines_magasin_remercier
Le magasin est un lieu.
L'objet à acheter est un objet vu dans le magasin.
 
routine remercier:
  dire "« Merci et à bientôt ! »".
fin routine
 
action acheter:
  dire "Vous achetez l'objet.".
  exécuter la routine remercier.
fin action
 
action vendre:
  dire "Vous vendez l'objet.".
  exécuter la routine remercier.
fin action
 
règle avant commencer le jeu:
  dire "Essayez : {/acheter/} ou {/vendre/}.".
fin règle

tester cet exemple

Voir aussi