Développement
Programmation de l'IA
- Documentation API
- Introduction
- Fichier info.nut
- Fichier main.nut
- Principes de base
- Détermination de chemin routier
- Détermination de chemin ferroviaire
- Sauver / Charger des données
- Choses à savoir
- Squirrel
- Listes
- Traiter les erreurs OTTD
- Tramways
- Bibliothèques de l'IA
- Forum
- FAQ du forum
- Comportement de l'IA
IAs
Tous les articles de la catégorie NonIAinfo.nut est un fichier dans lequel vous indiquez à NonIA les informations de base de votre IA. C'était auparavant une partie de main.nut
, mais il en a été séparé pour rendre le débogage plus facile (voyez ici si les détails vous intéressent).
Voyez aussi http://noai.openttd.org/docs/trunk/classAIInfo.html pour une meilleure description (et plus complète) de toutes les fonctions.
Contents |
Structure de info.nut
La structure interne de info.nut
est très simple et suit un modèle présenté ci-dessous.
class MaNouvelleIA extends AIInfo { function GetAuthor() { return "Auteur d'IA débutant"; } function GetName() { return "MaNouvelleIA"; } function GetDescription() { return "Un exemple d'IA en suivant le tutoriel du wiki"; } function GetVersion() { return 1; } function MinVersionToLoad() { return 1; } function GetDate() { return "17/03/2007"; } function GetShortName() { return "MonIA"; } function CreateInstance() { return "MaNouvelleIA"; } function GetAPIVersion() { return "1.0"; } } /* Indique au cœur que nous sommes une IA */ RegisterAI(MaNouvelleIA());
où, bien entendu, vous devez changer les noms comme vous voulez appeler tout. N'oubliez simplement pas le RegisterAI()
, ni d'étendre AIInfo
. Si quelque chose se passe mal, vérifiez si vous avez bien mis: RegisterAI(MaNouvelleAI())
. Vérifiez le ()
après le MaNouvelleIA
!
Paramètres
Il est possible de permettre aux utilisateurs de modifier les paramètres dans votre IA. La seule obligation est que vous devez leur indiquer quels paramètres. Vous pouvez le faire en modifiant votre info.nut
de la manière suivante:
class MaNouvelleIA extends AIInfo { function GetAuthor() { return "Auteur d'IA débutant"; } function GetName() { return "MaNouvelleIA"; } function GetDescription() { return "Un exemple d'IA suivant le tutoriel sur http://wiki.openttd.org/"; } function GetVersion() { return 1; } function MinVersionToLoad() { return 1; } function GetDate() { return "17/03/2007"; } function GetShortName() { return "MonIA"; } function CreateInstance() { return "MaNouvelleIA"; } function GetAPIVersion() { return "1.0"; } function GetSettings() { AddSetting({name = "NomDuParametre", description = "Description du paramètre", min_value = 0, max_value = 10, easy_value = 10, medium_value = 5, hard_value = 0, custom_value = 5, flags = 0}); AddLabels("NomDuParametre", {_0 = "C'est maintenant désactivé", _10 = "Maximum"}); } } /* Indiquer au cœur que nous sommes une IA */ RegisterAI(MaNouvelleIA());
Les nouvelles lignes, bien entendu, sont celles concernant les paramètres. Dans SetSetting, il est important de définir toutes les propriétés. Sinon, une erreur sera renvoyée. Maintenant, dans une IHM de votre IA, il y aura une option pour modifier NomDuParametre entre les valeurs 0 à 10, avec une valeur prédéfinie si vous avez un paramètre de difficulté différent de 'Personnalisé'. IA:TestAI montre aussi des exemples simples utilisant des paramètres booléen (on/off).
Paramètres disponibles pour AddSetting:
Nom | Type | Obligatoire | Description |
---|---|---|---|
name | string | oui | Le nom du paramètre que vous référencez dans votre IA dans this.GetSetting(name) (membre de AIController). Les caractères ',' et '=' sont interdits. |
description | string | oui | Une description de ce que fait le paramètre. Visible pour l'utilisateur dans la fenêtre des paramètres de l'IA. |
min_value | integer | Seulement si les drapeaux ne contiennent pas AICONFIG_RANDOM. | La valeur minimale du paramètre. |
max_value | integer | Seulement si les drapeaux ne contiennent pas AICONFIG_RANDOM. | La valeur maximale du paramètre. |
easy_value | integer | oui | La valeur par défaut du niveau de difficulté facile. |
medium_value | integer | oui | La valeur par défaut du niveau de difficulté intermédiaire. |
hard_value | integer | oui | La valeur par défaut du niveau de difficulté difficile. |
custom_value | integer | oui | La valeur par défaut du niveau de difficulté personnalisé. |
random_deviation | integer | non, interdit si les drapeaux contiennent AICONFIG_RANDOM | Quand le jeu est démarré, la valeur du paramètre sera choisie aléatoirement entre user_specified_value - random_deviation et user_specified_value + random_deviation. |
step_size | integer | non | L'incrément duquel la valeur est modifiée chaque fois que l'utilisateur clic sur un des boutons. |
flags | bitset | oui | Vous pouvez spécifier les drapeaux suivants (combinés avec l'opérateur ou binaire): AICONFIG_RANDOM, AICONFIG_BOOLEAN et AICONFIG_INGAME. Voyez ci-dessous pour une description de ce qu'ils font. |
Drapeaux
Drapeau | Description |
---|---|
AICONFIG_BOOLEAN | Fait du paramètre un choix booléen. Si vous positionnez ce drapeau, ne spécifiez pas min_value ou max_value. Toutes les valeurs de easy_value, medium_value, hard_value et custom_value doivent être 0 ou 1 (pas false/true). |
AICONFIG_RANDOM | Les utilisateurs ne fixeront pas explicitement la valeur, ils obtiendront une valeur aléatoire entre min_value et max_value. |
AICONFIG_INGAME | Seuls les paramètres avec ce drapeau pourront être modifiés en cours de jeu. |
Il est possible de combiner ensemble deux ou plus paramètres. Par exemple, cela produit un booléen aléatoire: flags = AICONFIG_BOOLEAN | AICONFIG_RANDOM
AddLabels
AddLabels accepte deux paramètres; le premier est le nom du paramètre pour lequel les libellés sont définis, et le second une table avec une correspondance entre valeurs et libellés. Comme les identifiants ne peuvent pas commencer par un chiffre, le premier caractère est ignoré (le souligné, dans l'exemple). Le reste de l'identifiant devrait être un nombre pour lequel vous définissez un libellé. Si jamais vous ne définissez aucun libellé, le nombre sera affiché comme tel. Ces libellés servent uniquement pour les utilisateurs; dans votre IA, vous n'aurez que les valeurs numériques, si vous utilisez GetSetting().
Lire les valeurs de paramètre
Maintenant, dans votre IA, vous pouvez demander la valeur de ce paramètre, en écrivant:
MaNouvelleIA.GetSetting("NomDuParametre");
Il y a quelques choses à se souvenir:
- Les paramètres ne changent jamais pendant l'exécution. Vous les fixez avant de démarrer une partie, et c'est tout. //Sauf si vous mettez AICONFIG_INGAME.
- Les paramètres sont toujours des entiers.
- Modifier votre fichier info.nut quand OpenTTD tourne fera que le programme ne remarquera PAS que les valeurs déclarées dans votre GetSettings() ont changé. Vous devez redémarrer le programme (pas seulement la partie) pour qu'ils prennent effet.