## 3. Structure

Cette section présente la structure du programme, comment les robots bougent, tirent et contrôlent leur radar, comment les points sont comptés et comment s'établit un tournoi.

## 3.1 Déplacement d'un robot

Le robot réagit comme un véhicule à quatre roues. Il se déplace dans une direction avec un léger coefficient de frottement au roulement et glisse sur le côté avec un coefficient de frottement au glissement beaucoup plus important. Le troisième effet de ralentissement est celui de la résistance de l'air, qui s'applique dans la direction opposée au déplacement du robot et qui augmment avec la vitesse.

Il y a trois façon de modifier les déplacement d'un robot, l'accéleration, la rotation et le freinage.

L'accélération est utilisée pour augmenter la vitesse du robot dans la direction de l'avant du robot; Vous ne pouvez pas directement contrôler la vitesse du robot. L'accélération est le seul moyen de faire bouger le robot.

En faisant pivoter le robot, vous pouver le faire tourner. Notez qu'une rotation n'affecte pas directement la direction du déplacement, mais seulement la direction de l'avant du robot. Le coefficient de frottement de glissement, avec l'accélération, pourra eventuellement engager le virage du robot.

Freiner augmentera le coefficient de frottement à sa valeur maximum. C'est quand les roues sont bloquées et que le robot glisse au lieu de rouler. N'oubliez pas de relacher le frein quand vous voulez repartir.

## 3.2 Energie

La santé du robot est mesurée par son énergie. Il y a plusieurs façons de perdre de l'énergie : lorsque le robot

- est atteint par un missile,
- se cogne contre un autre robot ou contre un mur,
- saute sur une mine ou
- tire un missile.

Par contre, il n'y a qu'un seul moyen de regagner de l'énergie : manger de 'cookie'.

## 3.3 Le radar

La méthode principale permettant d'obtenir des informations sur le monde avoisinant est le radar. Chaque fois que le robot est 'mis à jour', il reçoit un message de son radar, donnant des informations sur l'objet le plus près dans la direction du radar, i.e. la distance et le type de l'objet. Si il s'agit d'un robot, le niveau d'énegie de ce robot sera également donnée.

Puisque le radar est la seul source d'information sur ce qui l'entoure, il est essentiel de le manipuler au maximum de ses performances. Il est également important de bien manoeuvrer le radar, pour obtenir une colection de données utiles.

## 3.4 Tirer

Tirer est la meilleur méthode pour éliminer les autres robots. Dans RealTimeBattle, les missiles se déplacent à vitesse constante, obtenue en sommant la vitesse du robot au moment du tire et la vitesse du tire dans la direction pointée par le canon. Il se déplacera jusqu'à ce qu'il rencontre un objet.

Quand le missile est tiré, il lui faut une énergie qui entrainera des dégats sur le robot qui le tire. L'énergie est donc limitée. L'énergie minimale interdit des tires trop faibles, qui permettrait de détruire une mine trop facilement. L'énergie maximale est limitée par le potentiel de tire du robot qui augmente avec le temps.

Tirer ne se fait donc pas sans risque, puisque le robot qui tire perdra de l'énergie, proportionellement à l'énergie du tire.

Si un 'cookie' ou une mine est touchée, il est détruit, en fonction de l'énergie du missile. C'est pourquoi il faut une énergie minimum si vous voulez détruire une mine.

Deux missiles s'entrechoquant ne seront pas détruits. Leur vitesse et energie seront superposées pour ne former qu'un seul missile. Dans le cas de deux missiles se déplaçant dans la même direction, leurs énergies seront ajoutées et dans le cas contraire, leur énergie sera annulées.

## 3.5 Collisions

Les robots sont des objets fragiles, et ils s'abiment lorsqu'ils se cognent contre des murs ou sur d'autres robots. Quand ils se choquent, les robots agissent comme des balles qui rebondissent, sous l'influence de trois facteurs, le coefficient de restitution, la duretée et le coefficient de protection. Sur l'avant, les robots sont fait d'un matériel différent, plus dur et qui le protége plus. Vous pouvez utiliser cette proprièté pour cogner les autres robots en leur affligeant plus de dégas que vous n'en recevrez.

## 3.6 Cookies et Mines

Les 'cookies' et les 'mines' sont à de même objets. Leur seule différence est que les robots gagneront de l'énergie en cognant des cookies et en perdront sur des mines. Ces objets sont placés aléatoirement sur le terrain de jeu pendant le jeu. Leur énergie et fréquence d'apparition peuvent être modifiées dans les options.

## 3.7 Temps

Comme le nom du programme le laisse entendre, le temps utilisé est le temps réel. Il est essentiel que les robots répondent suffisament rapidement aux événements du jeu. Le jeu progresse en appelant une fonction de mise à jour à des intervalles de temps réguliers. Entre ces deux moments, les robots doivent se partager les resources CPU. Pour éviter que les robots utilisent une trop grande partie du processeur, leur utilisation du CPU est limitée en mode competition. Les options correspondantes donnent plus de détails.

La réalité du temps peut tout de même être 'violée' dans certaines circonstances. Vous pouvez accélerer ou ralentir la vitesse du jeu en changeant l'option de l'échelle du temps et il y a une méthode pour prevenir sacadement du système lorsqu'il est surchargé. Si le temps entre deux mises à jour est plus long que le temps maximum (MaxTimestep), le jeu sera ralenti.

## 3.8 Une partie

Au début d'un combat, le jeu donne au robots une position aléatoire sur le terrain, avec une orientation aléatoire. Le radar et le cannon pointent tous les deux vers l'avant du robot et l'energie potentielle de tire est mise à zero. Le but du robot est maintenant de survivre aussi longtemps que possible et en même temps de détruire les autres robots. Un robot gagnera un point pour chaque ennemi qu'il tuera. Un point de bonus est donné à chaque robot participant. Des robots murant en même temps se verront partager les points de façon équitable (en d'autres mots, ils gagneront un demi point pour chaque robot mourant en même temps qu'eux).

Le jeu se termine lorsqu'il reste moins que deux robots ou que le temps est dépacé.

## 3.9 Une séquence

Une séquence est une serie de jeux, où les robots se battent. Au début d'une sequence les processus des robots seront démarés. Le nombre de robots dans une séquence est limité à 120 (Linux limitant à 256 le nombre de déscripteurs de fichiers). Pour chaque robot, deux 'pipes' sont ouverts enfin de communiquer avec le programme.

Puis le nombre de jeux est joué et enfin, le processus du robot est tué.

## 3.10 Un tournoi

Un tournoi est une collection de séquences.

Le nombre de robots dans un tournoi est (théoriquement) illimité.

Un grand nombre de sequence est autorisée, mais pour que le tournoi soit plus juste, il faut choisir un nombre de sequences, de telle sorte que tous les robots jouent le même nombre de jeux (i.e. #sequence = #robots_par_jeu / PGDC( #robots_par_jeu, #robots_dans_le_tournoi)).