Comprendre les Erreurs d'exécution

Comprendre les Erreurs d'exécution

> Tutoriel LeekScript

Vous codez votre IA comme un bienheureux. Les lignes défilent, et les noms de ... Non attendez on a déjà vu ça. Cette fois ci, plus de messages en rouge dans l'éditeur, le compilateur n'a plus de secrets pour vous. C'est l'heure du duel ! Vous observez vos poireaux dans leur environnement naturel, tel un Steve Irwin du potager. Il se baladent, ils batifolent, ils se mitraillent, qu'ils ont l'air heureux !

Ils ne se doutent pas que dans l'ombre se tapient des ennemis redoutables...

Trop d'opérations effectuées pour ce tour

Aaaaah un classique !! Celle ci n'est pas forcément une erreur de l'IA, mais un dépassement du nombre d'opérations maximum (dépendant de vos Coeurs : 1 million d'opérations par cœur, consultable dans le code via getMaxOperations). Faites un tour sur les tutoriels sur les Opérations pour un article détaillé.

Mon IA est toute petite ! Comment c'est possible ?

Dans ce cas, on peut parier sur une boucle sans condition d'arrêt, ce qu'on appelle une boucle infinie (voir Les Boucles).

Un petit exemple ? Voilà un petit code pour utiliser l'arme sur l'adversaire tant qu'on a des PT :

Tout bête hein ? Et bien non ! Une erreur apparait a l'exécution : Basique, line 13 ▶ Interruption IA : Erreur d'exécution : Trop d'opérations exécutées pour ce tour

Quel peut bien être le problème... Et bien tout simplement, tant que la condition getTP() > 0, la boucle va s'executer. Mais que va-t-il se passer quand on ne peut pas utiliser l'arme ? Et bien on ne va pas perdre de PT ! Et la condition sera toujours vraie ! Donc on a une boucle qui va s'exécuter à l'infiniiiiiiiiiiiiiiiiiiiiiii (c'est-à-dire beaucoup).

Pour corriger ce cas, on peut tester le retour de la fonction useWeapon et en analyser le résultat.

Correction possible :

Mon IA n’est pas si petite que ca !

C'est pas la taille qui compte !

Sans lire votre IA j'aurais du mal à vous corriger... On peut tout de même citer quelques possibilités :

Fonction inconnue

Alors cette fois j'ai bien fait attention, j'ai mis le bon nombre de paramètres dans ma fonction. Alors, oui, mais on ne peut pas mettre n'importe quel paramètre dans les fonctions natives. Ces fonctions nécessitent certains types en entrée. Si vous tentez de les utiliser avec les mauvais paramètres, vous obtiendrez un résultat similaire :

AI Basique, line 14 ▶ Fonction inconnue : useWeapon(function) AI Basique, line 14 ▶ Fonction inconnue : useWeapon(null)

Ici, la fonction useWeapon prend en argument un nombre (une constante WEAPON_...) et on essaye de lui donner une fonction, ou un null. Évidemment le générateur nous râle dessus.

AI Basique, line 11 ▶ Fonction inconnue : sort(number, null) sort attend un tableau en premier paramètre, et on essaye de lui donner un nombre.

AI Basique, line 8 ▶ Fonction inconnue : getNearestEnemyTo(array) getNearestEnemyTo prend un id d'entité en paramètre, pas un tableau.

Cette erreur peut également arriver à cause d'un oubli de parenthèses :

Ici on stocke la fonction getNearestEnemy dans la variable enemy, plutôt que son résultat (voir Les Fonctions). Correction : var enemy = getNearestEnemy();