Développement
- Jalons de développement
- Suggestion de changements de l'API
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 NonIAAu fur et à mesure que le développement progresse, des changements importants sont introduits dans le système NonIA. Cette page les documente. Les éléments les plus récents sont en tête.
Contents |
12 janvier 2009
NonIA est fusionné avec le tronc principal. Youpi!
20 juillet 2008 - Nouvelle manière d'assigner des IAs à une (fonctionnalité de) compagnie
Depuis le 20/08/2008 (r13771), il existe une nouvelle méthode pour indiquer quelle IA doit contrôler quelle compagnie, et avec quels paramètres. De ce fait, l'option de ligne de commande '-a' est supprimé. Prochainement, une IHM sera ajoutée pour faciliter l'édition, mais pour le moment, vous devrez ouvrir 'openttd.cfg' et ajouter/modifier la section suivante:
[ai_players] none = YourAI =
Vous pouvez définir jusqu'à 8 emplacements. Pour chaque IA démarrant sur cet emplacement (compagnie), l'IA que vous avez assignée sera démarrée. Si un joueur humain démarre une compagnie sur cet emplacement, les infos de l'IA sont ignorées. 'none' indique une compagnie humaine.
20 mai 2008 - main.nut est coupé en deux
Depuis le 20/05/2008 (r13194), une nouvelle méthode pour enregistrer votre IA est en place. Cette méthode résoud de nombreux problèmes anciens. Comme, par exemple, si vous avez un problème de compilation dans votre main.nut
, au démarrage, cela ne donnera plus d'erreur. L'erreur s'affiche quand l'IA veut démarrer, et ainsi, nous pouvons la rediriger vers la fenêtre de débogage de l'IA. Cela résout le problème où l'utilisateur n'a aucune idée de la raison pour laquelle l'IA ne se manifeste pas (car beaucoup d'utilisateurs (Windows) ne regardent jamais la console). La seule chose importante désormais est que, au démarrage, votre info.nut
soit correct. Ce qui ne devrait pas être trop difficile pour la plupart des gens.
Mise à jour depuis un ancien système
En gros, ce que vous devez faire est de déplacer une petite partie de votre main.nut
dans info.nut
. Exemple:
class FWrightAI extends AIFactory { function GetAuthor() { return "OpenTTD Dev Team"; } function GetName() { return "WrightAI"; } function GetDescription() { return "Une IA simple qui tente de vous battre uniquement avec des avions"; } function GetVersion() { return 1.1; } function GetDate() { return "24/02/2008"; } function CreateInstance() { return "WrightAI"; } } /* Indique au cœur que nous sommes une IA */ iFWrightAI <- FWrightAI();
devrait être supprimé et info.nut
devrait contenir:
class WrightAI extends AIInfo { function GetAuthor() { return "OpenTTD Dev Team"; } function GetName() { return "WrightAI"; } function GetDescription() { return "Une IA simple qui tente de vous battre uniquement avec des avions"; } function GetVersion() { return 1.1; } function GetDate() { return "24/02/2008"; } function CreateInstance() { return "WrightAI"; } } RegisterAI(WrightAI());
Ce dont il faut se souvenir:
-
la ligne
<-
devientRegisterAI
-
AIFactory
devientAIInfo
.
17 mars 2008 - Suppression du support de C++
Depuis le 17 mars 2008, il n'est plus possible d'écrire votre IA en C++. Le seul langage pour écrire votre IA est Squirrel. Cela est dû à diverses raisons, parmi lesquelles:
- Il est difficile de maintenir un framework qui supporte à la fois Squirrel et C++.
- Squirrel nous limitait pour faire des choses intéressantes en C++, et C++ nous limitait pour faire des choses intéressantes en SQ.
- Quand j'ai une IA en C++ et que vous voulez l'essayer, je dois vous envoyer les sources et vous devez recompiler OpenTTD.
- Même si ce dernier point était résolu avec des modules, il ne serait pas compatible entre plateformes.
- Squirrel est assez mature pour relever le défi.
- Squirrel permet un échange facile des AIs entre utilisateurs.
- Si vous faites une erreur en C++, vous pouvez planter le jeu. En SQ, nous pouvons contenir tout problème dans la machine virtuelle, et ne tuer que l'IA.
Bien entendu, il y a des inconvénients, qui sont, pour mémoire:
- C++ est plus rapide, bien que la différence ne soit pas aussi importante qu'attendu.
- C++ permet de jouer avec les pointeurs. Bien que ce soit aussi une mauvaise chose, cela peut fonctionner pour le mieux.
Donc pour résumer: en supprimant C+ des langages possibles pour écrire votre IA, nous gagnons en simplicité dans le framework, nous gagnons en sécurité, et plus que tout: en portabilité. Pour ces raisons, il a été unanimement décidé de supprimer C++ comme langage possible pour le framework NonIA.