Python

Python

> Programmation

Depuis la version 2.49, en plus du LeekScript, vous pouvez écrire les intelligences artificielles de vos poireaux en Python (ou en JavaScript / TypeScript). Les IA s'exécutent dans un environnement sécurisé et déterministe, avec accès à toute l'API de combat du jeu, et peuvent affronter des IA écrites dans n'importe quel autre langage.

Débutant ? Suivez le tutoriel Python pour apprendre à coder votre première IA, pas à pas.

Choisir le langage

Le langage d'une IA est déterminé par l'extension de son fichier :

| Langage | Extension | |---------|-----------| | LeekScript | (aucune) | | JavaScript | .js ou .mjs | | TypeScript | .ts ou .mts | | Python | .py |

Le langage se choisit à la création d'un fichier (bouton « Nouvelle IA » de l'éditeur) ou comme langage par défaut de la première IA à l'inscription. Renommer un fichier en changeant son extension change son langage.

Point d'entrée : turn()

À chaque tour, le moteur exécute votre IA. Deux façons d'écrire :

IA simple : écrivez directement votre code, il est rejoué à chaque tour :

IA avec état : définissez une fonction turn(). Le corps du fichier n'est évalué qu'une seule fois (déclarez-y vos classes et variables persistantes), puis turn() est rejouée à chaque tour :

L'API de combat

L'API du jeu est exposée sous forme orientée objet, et garde ses noms camelCase en Python : me.setWeapon(...), Fight.getNearestEnemy(). Il n'y a pas de variable globale me : votre entité s'obtient via Fight.me.

Contrairement au LeekScript, il n'y a ni fonctions globales ni constantes « plates » (getNearestEnemy(), WEAPON_PISTOL…) : toute l'API passe par les objets ci-dessous.

Arborescence des classes

Les entités renvoyées par l'API sont typées : isinstance(enemy, Leek), isinstance(enemy, Bulb)

| Classe | Membres principaux | |--------|--------------------| | Entity | life, maxLife, tp, mp, strength, agility, wisdom, resistance, science, magic, level, name, cell, weapon, weapons, chips, effects, states, summons, alive, dead, isAlly(), isEnemy(), distance(cible) | | Me | tout Entity, plus les actions : moveToward(cible), moveAwayFrom(cible), useWeapon(cible), useChip(puce, cible), setWeapon(arme), say(message), summon(puce, case, ia), canUseWeapon(cible), weaponCell(cible), chipCells(puce, cible), weaponTargets(case)… | | Cell | x, y, empty, obstacle, entity, distance(cible), pathLength(cible), lineOfSight(cible), path(cible) | | Weapon / Chip | cost, minRange, maxRange, area, launchType, maxUses, needsLos, features (plus cooldown et currentCooldown pour Chip) | | Effect | type, value, caster, turns, critical, item, target | | Feature | type, minValue, maxValue, turns, targets |

À côté des classes, quatre singletons :

| Singleton | Rôle | Membres principaux | |-----------|------|--------------------| | Fight | le combat | me, turn, getNearestEnemy(), getFarthestEnemy(), getEnemies(), getAliveEnemies(), getAllies(), getAlliedTurret()… | | Field | le terrain | cellFromXY(x, y), getObstacles(), distance(a, b), pathLength(a, b), lineOfSight(a, b), path(a, b) | | Registers | stockage persistant entre les combats | get(clé), set(clé, valeur), delete(clé), all() | | Debug | visualisation sur le terrain | mark(cases, couleur), markText(cases, texte), show(case), clearMarks(), pause() |

Les constantes

Les constantes sont rangées par famille, sous deux formes :

L'autocomplétion de l'éditeur (Weapon., Effect., Entity.Stat.…) liste tous les membres disponibles, avec la vérification de types en direct (Pyright).

Plusieurs fichiers

Découpez votre IA en modules avec l'import Python classique :

Seuls vos propres fichiers sont accessibles. Les noms de modules suivent les règles Python : pas de tirets, utilisez des underscores. Les imports circulaires ne sont pas autorisés.

La bibliothèque standard

La bibliothèque standard de Python 3.12 est disponible : math, itertools, collections, heapq, functools, random… En revanche, pas de paquets externes (pip), et les modules d'accès au système (fichiers, réseau, processus) sont inaccessibles.

Environnement d'exécution

Voir aussi