Leek Wars

Leek Wars

17 juillet 2016

Leek Wars mais qu'est-ce que c'est ?

Leek Wars c'est peut-être l'une des meilleures façons d'apprendre la programmation en s'amusant. Leek Wars est un jeu auquel on joue dans son navigateur avec un concept très original. Vous possédez un ou plusieurs poireaux, et vous développez une intelligence artificielle pour celui-ci afin de le faire affronter d'autres poireaux dans le potager!

À l'inscription vous obtenez votre premier poireau, lorsque celui-ci atteint le niveau 50 vous pouvez en acheter un autre, et ce jusqu'à un maximum de 4 poireaux. Votre poireau a donc un niveau qui progresse avec les points d'expérience que vous obtenez en battant d'autres poireaux au potager. À chaque passage de niveau vous obtenez des points qui vous permettent d'acheter des compétences. (Vie, force, science, magie, sagesse, résistance etc.) Vous obtenez également de l'argent avec lequel vous pouvez acheter des armes et des puces (d'attaque, de défense, etc.) pour vos poireaux.

Dans le potager il y a des duels, (un poireau contre un poireau), des combats d'éleveur (tous vos poireaux contre tous les poireaux d'un adversaire), et des combats d'équipe. Le jeu vous propose automatiquement des combattants de votre niveau, basés sur le classement ELO.

Du coup il faut coder ?

En dehors du choix des armes et des compétences, votre seule influence sur les combats sera l'IA que vous développerez pour votre poireau! Le langage s'appelle LeekScript et reprend à peu près la syntaxe du Javascript, avec quelques subtilités. (Edit : Ils ont sorti un LeekScript v2 depuis!)

Leek Wars propose une documentation très complète avec l'ensemble des fonctions du langage. Il y a des fonctions pour prendre connaissance de l'état de la partie (où sont les adversaires, combien de vies ils ont), des fonctions de combat, des fonctions pour connaître les caractéristiques de votre poireau, les armes et les puces équipés. Je précise que les combats sont au tour par tout, et que chaque poireau dispose de X points de déplacement et de Y points d'actions, limitant pour chaque tour le nombre de possibilités.

Mon algo

Personnellement, très exité à l'idée de développer une "intelligence artificielle", j'ai voulu aller le plus loin possible dans mon algorithme. J'ai donc choisis de faire une IA universelle, qui évalue automatiquement mon poireau, ses caractéristiques, ses armes, ses puces, sa position, qui évalue ensuite le ou les adversaires (vies, caractéristiques, armes, puces) pour déterminer à chaque tour la meilleure combinaison d'action possible pour infliger le plus de dégâts possible en prenant le moins de risque possible.

Concrètement j'analyse de la façon la plus optimisé possible toutes les positions de la carte que je peux atteindre, et pour chaque position avec quelle arme ou puce je pourrais attaquer l'ennemi, sachant que chaque arme a un porté différent. Je cherche la meilleure combinaison de déplacement et de coup pour blesser au maximum l'adversaire. Tout en faisant ça j'essaie de limiter au maximum mes déplacements sur cette première étape de façon à pouvoir me cacher avec les points de mouvements qu'il me reste. Pour me cacher j'étudie l'ensemble des positions à m'a porté, et je regarde en fonction des armes de l'adversaire et de ses points de déplacement quels dégâts il pourra me faire au maximum, en tenant compte des dégâts de zones, c'est-à-dire des armes explosives qui font des dégâts sur plusieurs cellules.

Après 1 ou 2 mois sur Leek Wars, arrivé à la 15e version de mon algorithme, j'ai enfin 3 de mes 4 poireaux qui ont atteint le niveau 301, niveau le plus haut qu'un poireau puisse atteindre. Dont mon meilleur poireau avec un talent moyen 240 points au-dessus de la moyenne des poireaux de niveau 301. Mon 4e poieau étant de profile booster (en gros il est là pour booster ses alliés en combat d'équipe) sa progression était beaucoup trop lente pour atteindre le niveau 301 en quelques mois.

LeekWars builder

Qui aime coder dans son navigateur ? Personne. Tout le monde a un IDE préféré ! Du coup j'ai développé mon IA en local sur Sublime Text. Mais du coup, deux problématiques :

  • C'est long de copier coller son IA à chaque fois dans Leek Wars pour la tester
  • Mon IA fait 3 000 lignes, j'aimerais la séparer dans plusieurs fichiers pour avoir un code plus clair

Avec la participation d'un collègue j'ai donc développé un petit outil (que vous pourrez retrouver sur github) pour compiler vos multiples fichiers LeekScript en un seul (en gros gérer les includes) et mettre automatiquement à jour votre IA sur la plateforme Leek Wars! Elle est pas belle la vie ?

Voir LeekWars builder sur Github