UG RRobots Fork

RDOC

COPYright

Cliquer sur le titre pour l'afficher

Installation

La méthode express

Installation depuis GemCutter

Si vous n'avez pas encore GemCutter

  $ sudo bash
  # gem ins gemcutter
  # gem tumble

Installation de UG_RRobots

  # gem ins UG_RRobots

That's all folk !

Téléchargement

UG_RRobots peut se télécharger depuis :

http://www.ultragreen.net/projects/rrobots/files

On choisit, soit le Gem déja construit, soit le tar.gz si on veut modifier le projet avant installation
Les fichiers sont classés par Release

création

Remarque : Cette étape n'est necessaire que si on choisit de télécharger les sources

Exemple version 2.2 :


  $  wget http://www.ultragreen.net/attachments/download/55/UG_RRobots-2.2.tgz
  $ tar xvzf G_RRobots-2.2.tgz
  $ cd UG_RRobots-2.2/
  $ rake clean
  $ rake clobber
  $ rake gem 
  $ rake package # pour refaire le tgz 

le gem et le tgz sont dans le sous-répertoire pkg
si vous installez depuis le gem fraîchement crée la partie wget du Rubygem est à remplacer par la commande


  $ cd pkg

sinon pour récupéré le gem


  $ wget http://www.ultragreen.net/attachments/download/56/UG_RRobots-2.2.gem

Installation gem

On doit être root pour installer :


  $ sudo bash
  # gem install UG_RRobots-2.2.gem

Pour désinstaller :


  $ sudo bash
  # gem uninstall UG_RRobots

Configuration

Format du fichier

fichier YAML : rrobots.yaml


  battlefield: 
    :width: 800
    :height: 800
  bullets: 
    :speed: 30
  filename: rrobots.yml
  game: 
    :timeout: 50000
  mines: 
    :with_mines: false
    :bullet_energy_resistance: 2
    :energy_hit_points: 20
  robots: 
    :nb_mines: 3
    :radar_mine_scanning_performance: 500
    :energy_max: 100
  toolboxes: 
    :energy_heal_points: 20
    :life_time: 200
    :with_toolboxes: false
    :spawning_chances: 100

priorité de lecture des fichiers

UG_RRobots possède toutes ses valeurs par défaut en dur dans le code , la configuration par défaut écrite dans :

GEM_PATH/config/rrobots.yml

est identique à ces valeurs, mais on peut la modifier.
Grâce à l'argument -write-config de la commande rrobots on peut cloner cette config dans le path ou on execute le jeu.
Si on n'utilise pas l'argument -ignore-config, Le jeu lit ensuite (merge) les différences entre les valeurs par défaut, puis celle de la config principale, puis celle du fichier dans le PATH.
Sinon, le fichier de config dans le PATH est ignoré.

Présentation

Version

- UG RRobots Fork v1.0
- fork of RRobots v0.2.2

Au début il y avait CRobots (Version C), suivit par PRobots (Pascal) et beaucoup d'autres, récemment (quelques années quand même) Robocode à fait son apparition (version Java) et maintenant il y a RRobots qui apporte le fun à la communauté Ruby
Cette Variante du programme initilale de Simon Kröger, http://rubyforge.org/projects/rrobots, apporte de nouvelles fonctionnalitées

De quoi parle-t-on ?

UG RRobots est une simulation de champs de bataille pour Robots Virtuels
Chaque Robots possède un Radar et un Canon
Les robots peuvent bouger vers l'avant et l'arrière et son entièrement contrôlés par des scripts en Ruby
Tous les robots ont les même caractéristiques, et tant que le joueur n'a pas codé son Intelligence le robot est un objet inerte.

Un exemple de script rudimentaire

il pourrait ressembler à ceci :

require 'robot'
class NervousDuck
   include Robot
  def tick events
    turn_radar 1 if time == 0
    turn_gun 30 if time < 3
    accelerate 1
    turn 2
    fire 3 unless events['robot_scanned'].empty? 
  end
end

Précaution : le fichier d'un robot doit avoir le même nom que la Classe du Robot (son nom), par exemple ici NervousDuck.rb

API RRobots

La seule méthode à implémenter au minimum pour animer votre robot est la méthode tick qui a pour paramètre events, un hachage des événements qui sont survenus pendant le dernier 'tick'.
Un tick est une opération atomique pour tout les éléments du jeu.

En incluant le module Ruby Robot vous récupérez les méthodes indispensable pour piloter votre robot :

  • battlefield_height : la longueur du champ de bataille
  • battlefield_width : la largeur du champ de bataille
  • energy : la quantité d'énergie restante (si elle tombe à 0 votre robot meure )
  • gun_heading : l'orientation de votre canon, EST : 0 / NORD : 90 / OUEST : 180 / SUD : 270)
  • gun_heat : l'indicateur de surchauffe du canon, quand il re-descent à 0, vous pouvez tirer de nouveau
  • heading : l'orientation de votre robot, EST : 0 / NORD : 90 / OUEST : 180 / SUD : 270)
  • size : le rayon de votre robot, si x <= size vous heurtez le mur gauche
  • radar_heading : l'orientation de votre radar, EST : 0 / NORD : 90 / OUEST : 180 / SUD : 270)
  • time : le nombre de 'tick' depuis le début du round.
  • speed : votre vitesse (-8/8)
  • x : votre abscisse X, dans l'intervalle 0...battlefield_width
  • y : votre ordonné Y, dans l'intervalle 0...battlefield_height
  • accelerate(param) : définit l'accélération (la vitesse max est -8/8, l'acceleration max est 1/-1, une vitesse négative signifie reculer
  • stop : réduit votre vitesse à 0, l'opération prend 1 ticks par point de vitesse, positif ou négatif
  • fire(power) : lance un boulet de canon dans le sens de votre canon, la puissance va de 0,1 à 3 (plus la puissance est grande plus le temps de surchauffe est grand)
  • turn(degrés)* : tourne votre robot et donc votre canon et votre radar (max 10 degrés par tick)
  • turn_gun(degres) : tourne votre canon et donc votre radar (max 30 degrés par tick)
  • turn_radar(degres) : tourne votre radar (max 60 degrés par tick)
  • dead : renvoie vrai si vous êtes mort
  • drop_mine : pose une mine sous le robot (une mine ne peut pas abimer le robot qui l'a posée)
  • say(msg) : affiche un message sur l'écran en mode GUI/TK au dessus de votre robot.
  • broadcast(msg) : envoie un message à tous les robots sur le champs de bataille, une clef '*broadcast*' est ajouté au hachage '*events*' avec le message et la direction
  • team_broadcast(msg) envoie un message à tous les robots de votre equipe sur le champs de bataille, une clef '*team_broadcast*' est ajouté au hachage '*events*' avec le message et la direction

Cette liste de méthode est volontairement réduite et basique, à la charge du joueur créer ses propres méthodes de haut niveau grace à la puissance de Ruby.
(exemple : move_to, fire_at, etc...)

Quelques mots d'explication :

  • Le canon est monté sur le corps du robot, donc si vous bougez le robot le canon suit.
    Pareil pour le radar, qui se trouve sur le canon.
  • Le radar scan tout se qui trouve sur le rayon de déplacement cumulé du robot, du canon et du radar lui même (mouvement relatif du radar) sur un '*tick*' donné, mais ne renvoi que la distance vers le/les objets scannés (clef robot_scanned avec la distance en valeur pour les robots, clef toolbox_scanned avec la distance en valeur pour les boites à outils, clef mine_scanned) ceci fait donc un angles d'incertitude maximum de 100°, pour pouvoir être précis il faut bouger votre radar plus doucement.
  • UG RRobots Fork introduit les boites à outils, elle sont donc détectables par le radar, lorsqu'un robot passe sur l'une d'elle, il récupère des points d'energie (20 par défaut).
    Les boites à outils apparaissent de façon aléatoire et reste pour une durée définie ( 200 ticks par défaut), chaque tick elle ont la même chance (faible) d'apparaître (1 sur 100 par défaut)
    Les mines déposables peuvent être détecté par les autres robots si il sont suffisamment près d'elle, et dans l'axe du radar (défaut 500 px)
    Les mines sont destructible par l'abus du canon d'un robot de force > (par défaut 2).

UG RRobots Fork, comme la version d'origine, est implémenté en Ruby pur avec une Interface Graphique TK et peut tourner sur de nombreuses plateformes qui possèdent Ruby et TK, le moteur du jeu en lui même peu très bien se passer de TK.
UG RRobots Fork à été testé sur Windows, la plus part des distributions Linux, FreeBSD et Windows

UG RRobots supporte le moteur GUI GOSU
Ce moteur fournit une meilleur qualité de rendu, du son et même de la musique.

le choix du moteur est possible par la ligne de commande, voir usage

Utilisation des commandes

rrobots

  USAGE: rrobots [resolution] [#match] [-nogui] [-speed=<N>] [-timeout=<N>] [-teams=<N>] [-with-toolboxes] [-with-mines] [-set-locale=<locale>]  [-set-gui-engine=<engine>]
                 <FirstRobotClassName[.rb]> <SecondRobotClassName[.rb]> <...>
        ou : rrobots [-set-locale=<locale>] -list-internals
        ou : rrobots [-set-locale=<locale>] -list-locales
    ou : rrobots [-set-locale=<locale>] -list-gui-engines
    ou : rrobots [-set-locale=<locale>] -manual 
    ou : rrobots [-set-locale=<locale>]

Sans arguments : donne cette page d'usage de la commande

  • [-list-internals] (exclusif) donne la liste des robots disponible en interne.
  • [resolution] (optionel) de la forme 640x480 ou 800x600. (defaut 800x800).
  • [match] (optionel) pour rejouer un match, nommage du format #nombre, enregistre ou rejoue un match.
  • [-nogui] (optionel) execute le match sans GUI, pour maximiser la vitesse.(ignores l'argument speed si il est présent).
  • [-speed=<N>] (optionel, défaut to 1) maj de la GUI après N ticks. Plus N est grand plus le match est rapide.
  • [-timeout=<N>] (optionel, défaut 50000) nombre de tick max d'un match.
  • [-teams=<N>] (optionel) découpe en N équipes. le match s'arrête quand il ne reste plus qu'un robots ou en timeout.
  • [-with-toolboxes] (optionel) pour accepter l'apparition de boite à outils (aleatoire).
  • [-ignore-config] (optionel) pour ignorer la lecture de la configuration dans le fichier YAML du path.
  • [-write-config] (optionel) pour écrire un dump de la configuration dans le fichier YAML du path.
  • [-set-locale] (optionel) force une locale.
  • [-list-locales] (exclusif) liste les locales disponibles.
  • [-manual] (exclusif) donne la page de manuel du projet RRobots
  • [-set-gui-engine] (optionel) force un moteur GUI si il existe dans la liste des moteurs disponibles.
  • [-list-gui-engines] (exclusive) liste moteurs GUI disponibles.
  • [-with-mines] (optionel) accepte le dépôt de mines parl les robots (default 3).
Remarques :
  • le fichier d'un robot doit avoir le même nom que la Classe du Robot
  • (jusqu'à 8 robots)

Exemple :

rrobots SittingDuck NervousDuck'

ou

rrobots 600x600 #1234567890 SittingDuck NervousDuck'

tournament

  USAGE : tournament [-timeout=<N>] [-matches=<N>] [-with-toolboxes] [-with-mines] [-set-locale=<locale>] 
                     (-dir=<Directory> | <RobotClassName[.rb]>+)
     ou : tournament [-set-locale=<locale>] -list-locales
     ou : tournament [-set-locale=<locale>] -manual
     ou : tournament [-set-locale=<locale>]

Sans arguments : donne cette page d'usage de la commande

  • [-timeout=<N>] (optionel, defaut 10000) nombre de tick max d'un match.
  • [-matches=<N>] (optionel, defaut 2) nombre de face à face par couple de 2 robots.
  • -dir=<Directory> tout les fichiers .rb de ce répertoire s'affronte par match réciproque.
  • [-ignore-config] (optionel) pour ignorer la lecture de la configuration dans le fichier YAML du path.
  • [-with-toolboxes] (optionel) active le mode d'apparition de boites à outils.
  • [-set-locale] (optionel) force un locale.
  • [-list-locales] (exclusif) liste les locales disponibles.
  • [-manual] (exclusif) donne la page de manuel du projet RRobots.
  • [-list-internals] (exclusif) donne la liste des robots disponible en interne.
  • [-with-mines] (optionel) accepte le dépôt de mines parl les robots (default 3).

Ce mode n'a pas besoin de TK nio de GOSU

- le fichier d'un robot doit avoir le même nom que la Classe du Robot
- les robots s'affrontes un contre un
- les resultats son disponible au formats YAML et HTML