defrule :
Cette instruction crée une nouvelle règle.
Syntaxe : (defrule (condition) => (action))
Exemple : Après 30 secondes de jeu, déclarer forfait.
(defrule
(game-time greater-than 30)
=>
(resign)
)
defconst :
Cette commande permet de créer une constante définie par l'utilisateur.
Syntaxe : (defconst <nom-de-la-constante> <valeur>)
<nom-de-la-constante> est un nom choisi par l'utilisateur, l'utilisation
du formatage de nom du système (mots-séparés-par-des-traits par exemple) est
recommandée mais pas obligatoire.
<valeur> est un nombre entier compris entre -32768 et 32727 (correspondant
au type short pour les programmeurs en C++).
Exemple : définition d'un nombre maximal de péons et utilisation de la
constante
(defconst nombre-max-villageois 25)
(defrule
(civilian-population less-than nombre-max-villageois)
(can-train villager)
=>
(train villager)
)
Remarque :
Les constantes sont très utiles pour nommer les objectifs
(<goal-id>), les valeurs des objectifs, les timers (<timer -id>),
les railleries (<taunt-id>), etc. Sans les constantes, les exemples cités
ci-dessus ne seraient que des nombres sans nom.
Pour plus d'informations sur l'utilisation de defconst, se reporter à la
rubrique "Chargement conditionnel et les constantes définies par
l'utilisateur"
Astuce :
Si vous regroupez toutes vos définitions de constantes dans
un fichier, il deviendra plus aisé de personnaliser le comportement de votre IA
en changeant le nombre représenté par la constante sans avoir à changer cette
valeur partout dans le fichier. Dans l'exemple précédent, si vous faîtes
référence à nombre-max-villageois à plusieurs endroits dans votre script, ce
sera plus facile de changer la valeur 25 de nombre-max-villageois en valeur 15
à un seul endroit.
load :
La commande load vous permet de fournir le nom d'un fichier d'un autre script à
charger à l'intérieur de votre propre script. Il devient plus facile
d'organiser et de réutiliser des parties de vos scripts à nouveau.
Le langage de script supporte le chargement d'un fichier script à partir d'un
autre fichier script. Les fichiers chargés ont un aspect identique au fichier
script original, ainsi n'importe quel fichier script peut être chargé par un
autre fichier script.
Syntaxe :
(load "filename")
Cette commande peut être insérée n'importe où entre les règles.
Exemple :
(defrule ...........................)
(load "Dark Age Economy")
(defrule ...........................)
Remarque :
Vous remarquerez que le nom de fichier ne possède aucun chemin ni extension.
L'interpréteur de script ajoute automatiquement un chemin et une extension. Un
f ichier script chargé doit se trouver dans le même répertoire que le fichier
chargeant.
Il est important de mentionner le fait que la commande de chargement s'exécute
immédiatement. Cela signifie que lorsqu'une commande load est rencontrée, le
parsage du fichier courant est interrompu jusqu'à ce que la commande de
chargement soit terminée. A ce point, le parsage reprend, commençant par la
règle suivant immédiatement la commande load.
Les commandes de chargement peuvent s'emboîter (un script charge un autre
script) jusqu'à 10 niveaux de profondeur.
On peut rendre modulaire le comportement d'un JGO en chargeant plusieurs
fichiers scripts depuis le fichier script maître. Cette approche n'a
d'intérêt que lorsque les fichiers scripts chargés n'ont pas de domaines
d'expertise se recouvrant.
load-random :
Une variante de la commande de chargement qui permet un chargement aléatoire de
fichier. Cette commande offre la possibilité de rendre la stratégie d'un JGO
aléatoire à un niveau supérieur à celui des règles.
Syntaxe :
(load-random <probabilité1> "nom-de-fichier1" ... <probabilitéN>
"nom-de-fichierN" "nom-de-fichier-par-défaut")
Comme tous les fichiers partage le même tirage au sort, une commande
load-random ne peut aboutir au chargement que d'un seul fichier. Ainsi, la somme
des probabilités ne doit jamais être supérieure à 100.
Exemple :
(load-random
20 "fichier1"
10 "fichier2"
40 "fichier3"
"fichier4"
)
Dans cet exemple, le fichier1 a 20% de chance d'être chargé, le fichier2 a 10%
de chance d'être chargé, le fichier3 a 40% de chance d'être chargé et le
fichier4 est chargé lorsqu'aucun des trois premiers n'a été chargé. Le
fichier4 est appelé fichier par défaut.
Cas spécial N° 1 :
(load-random
20 "fichier1"
10 "fichier2"
40 "fichier3"
)
Il n'y a pas de fichier par défaut. Cette syntaxe est correcte et signifie
qu'il y a 30% de chance qu'aucun fichier ne soit chargé.
Cas spécial N° 2 :
(load-random "fichier")
Le fichier par défaut sera toujours chargé. Cette syntaxe est correcte mais
elle est peut recommandée.