Laboratoire SUPINFO de recherche en robotique

Tuto Robocode – Part 1

Tuto Robocode – Part 1

23 avr, 2013

 

 

Robocode est un jeu de programmation éducatif. Il a été conçu par Matthew Nelson, un ingénieur logiciel d’ IBM en 2001.

Robocode est un outil facile à utiliser et fonctionne sur toute plateforme supportant Java.

 

Le but est développer en Java ou en C#, un tank automatisé qui devra être capable de vaincre d’autres tanks, eux aussi automatisés (ou pas, nous verrons cela plus tard.).

Les combats se déroulent sur une carte simple, et en temps réel.

Chaque participant peut se retrouver dans la création des robots, les plus novices en programmation apprendront les bases: la lecture de javadocs, l’héritage, les classes, ou la gestion d’événements;

Tandis que les plus expérimentés pourront comparer leurs compétences, et les mettre en valeurs sur le champ de bataille!

 

Je vais ici vous aider à bien démarrer avec Robocode. C’est parti!

Je considère que si vous savez programmer, un minimum, vous savez installer et utiliser un logiciel. :)

Je ne m’attarderais donc pas sur ces parties.

Téléchargement de Robocode:

Vous pouvez télécharger Robocode ICI

Selon votre OS, je vous laisse installer le logiciel.

 

Exécution du logiciel:

À l’exécution, cette fenêtre apparaît:

HomeRobocode

 

Les différents Menu:

Battle: Ici, vous démarrez un nouveau combat, ouvrir un non terminé qui aura été sauvegardé, enregistrer et lires vos scores, ou encore prendre un « screen ».

Robot: Vous viendrez souvent ici. C’est la où vous créerez votre Robot! et bien sûr l’optimiserez. Vous pouvez aussi importer d’autres robots et créer des équipent. Oui, les combats en équipe sont possibles!

Options: Contient différents réglages, nous y reviendrons plus tard.

Help: Pour, bien sûr, les informations, la documentation, et les mises à jour.

 

Le champ de bataille: C’est l’endroit où vos robots s’affronteront.

 

La barre inférieure:

Pause/Debug: Permet de mettre en pause et d’analyser étape par étape les actions de votre robot.

Next Turn: Passe à l’étape suivante.

Stop: Comme son nom l’indique, Arrête toute exécution en cours.

Restart: Redémarre à zéro le match.

SlideBar: Permets de modifier la vitesse d’exécution du combat en cours.

 

Et enfin la barre latérale:

Dans la partie supérieure, vous verrez la liste des robots qui seront sur le champ de bataille.

L’indicateur de vie de chaque robot et si vous cliquez sur le robot, vous accéderez à la console du robot.

MainBattleLog: Affiche la console du combat en cours.

 

Nous allons à présent étudier l’anatomie d’un robot (Tank), cela est important pour bien comprendre les lignes de codes qui vont suivre…

 

anatomie

 

 

Nous remarquons 3 parties distinctes:

  • Véhicule (en violet) : Comprenez le moyen de déplacement de votre robot. Il y a 4 méthodes de base à connaître.
  1. ahead(x) : Fait avancer votre tank de ‘x’ pixels.
  2. back(x) : Fait reculer votre tank de ‘x’ pixels.
  3. turnRight(y) : Fait tourner votre tank sur lui-même de ‘y’ degrés vers la droite.
  4. turnLeft(y) : Fait tourner votre tank sur lui-même de ‘y’ degrés vers la gauche.

 

  • Gun(en jaune) : Le canon qui vous permettra de détruire vos adversaires.
  1. turnGunRight(y) : Tourne le canon de ‘y’ degrés vers la droite.
  2. turnGunLeft(y) : Tourne le canon de ‘y’ degrés vers la gauche.
  3. fire(x) : Tirer!!! ‘x’ représente la puissance du tire.

 

  • Radar(en bleu) : Vous permettra de repérer vos ennemis et d’avoir des informations sur eux.
  1. turnRadarRight(x) : Tourne le radar de ‘y’ degrés vers la droite.
  2. turnRadarLeft(x) : Tourne le radar de ‘y’ degrés vers la gauche.

x‘ est de type ‘double’.
y‘ est de type ‘double’ compris entre 0 et 360 degrés selon le schéma suivant:

 

coordonées

 

 

 

On peut remarquer sur le schéma précédent, les coordonnées en fonction du champ de bataille.

(0,0) représente le coin en bas à gauche du champ de bataille, et en haut à droite (battlefield_width,battlefield_height), les dimensions du champ de bataille.

Ces informations sont importantes et nous servirons plus tard.

 

Bon après ce petit tour d’horizon rapide, au boulot! Créons notre robot!

Cliquez sur le menu « Robot« , puis sur « Editor » (ou bien le raccourci ‘ »CTRL+E« )

 

EditorRobocode

 

Maintenant « File« , « New » puis « Robot » (ou le raccourci « CTRL+N« )

Entrer le nom de votre robot, puis valider:

NameBot

 

Puis, le nom du ‘package’, entrer votre nom par exemple, ou vos initiales, en minuscules.

 

Package

Cliquez sur ‘OK’ et l’éditeur est lancé, et vous voyez enfin les premières lignes de codes! Analysons tout ça:

Editeur1

Nous retrouvons donc:

  • en ligne 1 : le package portant le nom que vous lui aviez donné précédemment.
  • en ligne 2 : L’import des sources nécessaires au fonctionnement du programme.
  • en ligne 3 : Commenté, //import java.awt.Color;  cet import permettra, si vous le souhaitez, de personnaliser les couleurs de votre tank.
  • en ligne 7 : le début de votre Class, c’est de la que va commencer votre code.
  • en ligne 12 : la méthode principale de votre programme: public void run ()

Cette méthode doit contenir une boucle ‘While’ (tant que), ‘While(true)’ signifie que l’on crée une boucle infinie. Infinie? non, en fait, cela permet d’exécuter les actions que cette boucle contient jusqu’à la fin du combat.

On remarque à l’intérieur, quelques méthodes vu précédemment. Ces méthodes (si vous avez tout compris :) ) seront exécutées chacune à la suite, à l’infini.

Excepté! Si un événement vient perturber son exécution!

Un événement est une méthode qui stoppera l’exécution de la méthode run(), si cette méthode d’événement est appelée.

Vous n’avez rien à faire, le logiciel Robocode gère cette partie, votre travail est d’expliquer au programme comment réagir si un tel événement ce produit.

Définissons les méthodes d’événements inclussent dans ce programme de démonstration:

  • onScannedRobot(ScannedRobotEvent e) :  Lorsqu’un robot est scanné par votre radar, le programme exécute le contenue de cette méthode.
  • onHitByBullet(HitByBulletEvent e) :  Lorsque votre robot est touché par un tir adverse, le programme exécute le contenu de cette méthode.
  • onHitWall(HitWallEvent e) : Lorsque votre robot touche un mur, vous connaissez la chanson… ;)

 

À partir de maintenant, vous connaissez les bases pour construire votre robot!  

Il ne vous reste plus qu’à compiler votre code :  Cliquer sur ‘Compiler‘, puis ‘Compile‘ (ou le CTRL+B).

Si votre fichier n’est pas encore enregistré, robocode vous le rappellera avant la compilation.

Et, si vous n’avez aucune erreur dans votre code (si vous n’y avez pas encore touché, ça devrait être bon ^^ ), votre robot est prêt pour le combat!

compile

Si ce n’est pas le cas, corriger vos erreurs avant d’aller plus loin.

Vous remarquerez la dernière ligne, qui vous indique selon la taille de votre code, le titre du robot que vous avez crée: ici, un NanoBot…

Pas terrible… Mais ce n’est que le début! :D

Les différents titres:

  1. Megabots   -  Supérieur à 1500 bytes
  2. Minibots   –  Inférieur à 1500 bytes
  3. Microbots  –  Inférieur à 750 bytes
  4. Nanobots   -  Inférieur à 250 bytes

 

Vous pouvez dès à présent fermer la fenêtre de l’éditeur, et revenir sur la fenêtre principale.

Pour tester votre robot, cliquer sur « Battle », puis « New » ou le raccourci ‘CTRL+N‘).

NewBattle

 

Sélectionner votre ‘package’ ou bien ‘(All), puis votre robot, et cliquer sur ‘Add’.

Votre robot doit apparaître dans la liste de droite.

Ajouter un deuxième robot, que vous allez affronter ( ou plusieurs).

Sélectionner le nombre de round (ici, 100).

Cliquer sur ‘Start Battle’ Pour commencer le combat.

Fight

 

Le combat lancé, vous pouvez analyser le comportement de votre robot, et déjà penser à ses différentes optimisations.

Après 100 Rounds (en ayant poussé la slideBar au Max ), voici mes résultats:

Result

 

Nous voyons que notre robot à terminé premier avec un score de 8594 et un taux de réussite de 58 %

  • Total Score- Tous les points suivant sont additionnés, et cela détermine le rang de chaque robot dans cette bataille.
  • Survival Score - Si votre robot survit lorsqu’un autre meurt, vous gagner 50 points supplémentaires.
  • ‘Last’ Survivor Bonus - Si vous êtes le dernier robot encore en vie sur le champ de bataille, vous gagez 10 points supplémentaires pour chaque robot qui seront morts avant vous.
  • Bullet Damage - Votre robot marque 1 point pour chaque point de dégât qu’il cause aux ennemis.
  • Bullet Damage Bonus - Quand le robot tue un ennemi, vous gagnez 20% supplémentaire de la totalité des dommages que vous avez faits à cet ennemi.
  • Ram Damage - Le robot marque 2 points pour chaque point de dégâts qu’il cause en battant des ennemis.
  • Ram Damage Bonus- Quand le robot détruit un ennemi, il augmente de  30% tous les points de dégâts qu’il a infligés à cet ennemi.
  • 1sts, 2ds, 3rd - Ne montre pas le classement, mais le nombre de fois détaillées que votre robot à survécu, c’est-à-dire le nombre de tours où votre robot à été placé à la 1re, 2e, ou 3e place.

Voilà, vous avez les bases pour commencer votre premier robot. N’hésitez pas à commenter ce Tuto, et à poster vos questions ou remarques.

Dans la partie 2, nous verrons plus en détail les événements, ainsi que la récupération d’informations.

À bientôt! 

 

Un commentaire

  1. Une présentation visuelle simple et sympa qui dit le minimum nécessaire. C’est cool, merci !
    Quelques grosses fautes d’orthographes qui font mal aux yeux ;-)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>