> Tutoriel LeekScript
Nous allons maintenant parler des fonctions du LeekScript !
Les fonctions sont un aspect incontournable de la programmation. Elles permettent de mémoriser une série d'actions que vous pourrez réutiliser quand bon vous semblera.
Sur Leek Wars, on peut distinguer deux types de fonctions :
Nous ne parlerons que des fonctions natives pour le moment.
Les fonctions natives sont les fonctions que le LeekScript met à votre disposition, ce sont elles qui vous permettront d’obtenir de nombreuses informations sur le combat. C’est aussi grâce à elles que vous pourrez contrôler les actions de votre poireau.
Les fonctions sont rapidement reconnaissables à leur syntaxe :
nomDeLaFonction(parametres);
Vous les avez déjà vues dans l'IA de base lors du chapitre sur l'Éditeur. Pour rappel :
// Quatre fonctions très utiles var enemy = getNearestEnemy(); setWeapon(WEAPON_PISTOL); moveToward(enemy); useWeapon(enemy);
getNearestEnemy, setWeapon, moveToward et useWeapon sont quatre fonctions que le LeekScript met à votre disposition.
Une compréhension minimale peut aider à comprendre l’utilité d’une fonction sans devoir consulter la documentation. Les noms des fonctions sont généralement explicites et montrent à quoi elles servent.
Qu'est-ce que le "retour" d'une fonction ? Ce n'est pas systématique, mais une fonction peut renvoyer une information.
C'est le cas dans cet exemple :
var enemy = getNearestEnemy();
Si vous avez été attentif au chapitre précédent, vous comprenez qu'une variable "enemy" est créée. Et qu'en même temps, on lui affecte une valeur avec le symbole égal '='.
Mais qu'est-ce qu'on lui affecte exactement ? C'est là que la fonction getNearestEnemy entre en jeu. Cette fonction renvoie l'identifiant de l'ennemi le plus proche.
Ainsi, lorsque votre poireau va exécuter ce code, il va appeler la fonction getNearestEnemy. Celle-ci va lui renvoyer l'identifiant du poireau le plus proche qui sera ensuite stocké dans la variable "enemy";
Si vous êtes curieux, vous pouvez ajouter un debug :
var enemy = getNearestEnemy(); debug(enemy);
Si vous exécutez ce code dans un combat de test en 1v1, vous devriez voir s'afficher le chiffre 1, ou 0. Les identifiants des poireaux en combat ne sont rien de plus que des chiffres. Pour un combat de 4 poireaux, ceux-ci seraient numérotées de 0 à 3.
Comme vous pouvez le voir, debug est une fonction native du LeekScript. Vous vous demandez peut-être pourquoi l'on met la variable "enemy" entre les parenthèses ? On y vient.
Voilà comment on appelle ce qui se trouve dans les parenthèses : des paramètres. Ces petites bêtes sont bien utiles. L'action que réalisera une fonction dépendra de ses paramètres.
Pour revenir à la fonction debug, celle-ci affiche un message dans les logs du combat. Et ce message, c'est vous qui lui indiquez son contenu, grâce à un paramètre.
Si vous donnez la valeur 5 en paramètre à debug, le message sera "5". Si vous donnez le texte "J'aime la soupe de poireaux" à debug, le message sera "J'aime la soupe de poireaux".
Voilà ce qu'il se passe avec ces fonctions :
var enemy = getNearestEnemy(); setWeapon(WEAPON_PISTOL); moveToward(enemy); useWeapon(enemy);
setWeapon fait équiper une arme à votre poireau. Pour lui indiquer quelle arme il doit équiper, il faut passer l'identifiant de l'arme en paramètre. Ici, c'est "WEAPON_PISTOL", il s'agit d'une constante qui désigne l'arme Pistolet. Cette constante correspond au nombre 37, l'identifiant du pistolet. Vous pourriez écrire 37 à la place de WEAPON_PISTOL, cela aurait le même effet. Mais le fait d'utiliser la constante rend le code plus compréhensible, et d'éviter d'avoir à mémoriser les identifiants de chaque armes/puces.
moveToward permet de faire avancer votre poireau en direction d'un autre. La fonction a besoin de l'identifiant d'un poireau cible pour cela. C'est là que vous ressortez votre variable "enemy". Souvenez-vous qu'elle contient désormais l'identifiant de votre adversaire le plus proche. En passant cette variable à moveToward, vous vous dirigerez vers ce méchant poireau.
Avec useWeapon votre poireau essayera de tirer sur un poireau. De la même manière, vous indiquez à la fonction que vous souhaitez tirer sur votre ennemi.
Certaines fonctions ne renvoient pas de valeur et n'en attendent pas non plus. Mais elles ne sont pas inutiles pour autant !
Par exemple, la fonction pause. Elle permet de mettre le combat en pause lorsque vous le visionnerez. (Cela n'a pas d'impact sur le combat, c'est la même chose qu'appuyer manuellement sur le bouton "Pause" ou sur la touche "P" de votre clavier pendant un combat) La fonction n'attend pas non plus de paramètres. Vous ne pouvez donc pas influencer son comportement.
Mais revenons sur le retour. Regardez ce code :
var enemy = getNearestEnemy(); moveToward(enemy);
Et si je vous disais que moveToward a une valeur de retour ? Vous n'êtes pas obligé de récupérer le retour d'une fonction. moveToward renvoie le nombre de points de mouvements consommés. Si vous vous trouvez à deux cases de distance de votre adversaire, la fonction n'avancera que d'une case. Une fois collé à votre adversaire, vous ne pouvez plus avancer vers lui, à moins de lui marcher sur la tête. Dans ce cas, tous vos points de mouvements ne seront pas consommés. Si vous n'en avez utilisé qu'un seul, la fonction retournera l'entier "1”.
Par exemple :
var enemy = getNearestEnemy(); var mpUtilise = moveToward(enemy); debug("J'ai avancé de " + mpUtilise + " cellules !");
Ainsi, si cette information ne vous intéresse pas, il n'y a pas besoin de la récupérer. C'est aussi le cas pour getNearestEnemy par exemple, mais avouez qu'il serait assez inutile d'appeler cette fonction sans récupérer son retour.
Les fonctions natives vous seront utiles, vraiment très utiles. Sans elles, autant dire que vous ne pouvez rien faire de votre poireau.
Cette notion est extrêmement importante, et vous prendrez conscience de toute sa puissance dans la chapitre sur les fonctions personnelles.
N'hésitez pas à jeter un œil à l'annexe sur la Tutoriel LeekScript La Documentation. Vous y apprendrez à lire la documentation, qui contient une liste exhaustive des fonctions mises à votre disposition dans Leek Wars.
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.