## 6. Arena-Konstruktion

In ReatTimeBattle ist es sehr einfach, eine eigene Arena zu erstellen. Die Sprache, die dafür verwendet wird besteht aus lediglich elf Kommandos, und es gibt nur vier grundlegende Bauelemente: Linie, Kreis, 'Innenkreis' und Bogen. Dies ist hauptsächlich aus Gründen der Programm-Geschwindigkeit so, da man bei Kreisen und Linien sehr einfach prüfen kann, ob es eine Kollision gab. Kreise und 'Innenkreise' hindern die Roboter daran, in einen Kreis hinein- oder aus einem Kreis herauszugelangen. Die Linie und der Bogen hindern Roboter daran an der Längsseite (bzw.an der gekrümmten Seite beim Bogen) hineinzugelangen, allerdings wird das an den zwei Enden der Linie nicht geprüft. Daher muss man an jedes Ende einer Linie einen Kreis anhängen, um es zu einem soliden Objekt zu machen. Die Kommandos `polygon`, `closed_polygon` und `poly_curve` sollen diese Prozedur vereinfachen, und ergeben immer ein richtiges Objekt.

Alle Winkel sind in der Voreinstellung im Bogenmaß. Das kann jedoch durch den Befehl `angle_unit degrees` geändert werden.

Man sollte beachten, dass RTB nicht überprüft ob eine Arena-Datei eine korrekte Arena ergibt, das ist einzig und allein deine Sache. Allerdings wird RTB sich beschweren, wenn du die Regeln der Arena-Konstruktionssprache nicht beachtest.

Arena-Dateien sollten mit `.arena` enden und im Arena-Verzeichnis untergebracht werden, so dass RealTimeBattle sie finden kann.

Die `bounce coefficient`- und `hardness`-Parameter, die an alle Mauer-erzeugenden Kommandos übergeben werden, legen das Material der Mauer fest. Beides sind Werte zwischen 0 und 1. Härtere Mauern beschädigen kollidierende Roboter mehr, und ein höherer Bounce-Koeffizient brigt sie dazu, besser abzuprallen.

Du solltest dir auch mal die Arenas die mit RTB mitgeliefert werden ansehen und von den Beispielen lernen.

## 6.1 Arena Kommandos

Ein Kommando besteht aus dem Kommandonamen und den Parametern, die durch Whitespaces getrennt werden. Du solltest immer sicherstellen, dass die richtige Anzahl der Parameter übergeben wird.

In der Kommando-Liste werden die Parameter in eckigen Klammern angegeben.

scale [Wert]

  Dieser Wert multipliziert mit der arena scale ergibt den Skalierungsfaktor mit dem alle Koordinaten multipliziert werden. Dieses Kommando muss, wenn es verwendet wird, das este Kommando in der Datei sein, Standardwert ist 1.0.

angle_unit [unit]

  Schaltet zu der ausgewählten Winkel-Einheit um. Mögliche Einheiten sind `degrees` (Gradmaß) or `radians` (Bogenmaß). Die Voreinstellung verwendet das Bogenmaß.

boundary [links] [oben] [rechts] [unten]

  Diese Begrenzungen umschliessen das Gebiet, in der Roboter, Kekse und Minen aufgestellt werden. Ausserdem legen sie das sichtbare Gebiet im Arena-Fenster fest. Dieses Kommando wird unbedingt benötigt und nur `scale` darf vorher verwendet werden.

inner_circle [Bounce] [Härte] [Mittelpunkt_x] [Mittelpunkt_y] [Radius]

  Roboter sind im inneren dieses Kreises gefangen.

circle [Bounce] [Härte] [Mittelpunkt_x] [Mittelpunkt_y] [Radius]

  Eine Mauer in Form eines Kreises.

line [Bounce] [Härte] [Dicke] [Start_x] [Start_y] [Ende_x] [Ende_y]

  Erzeugt eine Linie. Sie hindert den Roboter nur daran an der Längsseite durchzudringen, daher müssen Kreise an die Enden gesetzt werden.

arc [Bounce] [Härte] [Dicke] [Mittelpunkt_x] [Mittelpunkt_y] [Innenradius] [Außenradius] [Winkel1] [Winkel2]

  Ein Bogen ist ein Kreissegment zwischen zwei Winkeln. Genau wie die Linie benötigt der Bogen zwei Kreise an seinen Endpunkten.

polygon [Bounce] [Härte] [Dicke] [Anzahl der Seiten] ([Mittelpunkt_x] [Mittelpunkt_y])...

  Dieses Kommando wird eine Menge Kreise erzeugen, die durch Linien verbunden sind, und dadurch ein Polygon-ähnliches Gebilde schaffen.

closed_polygon [Bounce] [Härte] [Dicke] [Anzahl der Seiten] ([Mittelpunkt_x] [Mittelpunkt_y])...

  Ähnlich wie ein Polygon, aber die erste und letzte Seite sind auch durch eine Linie verbunden.

poly_curve [Bounce] [Härte] [Dicke] [Start_x] [Start_y] [Richtung_x] [Richtung_y] ([Befehlsargumente ...]) ...

  Die `poly_curve` ist das mächtigste der Arena-Kommandos. Sie wird genutzt im Wände aus Linien und Bögen zu bauen. Nach jeden Abschnitt hatt man eine aktuelle Position und eine aktuelle Richtung, die si

  It is used to build walls with lines and arcs. At each step you have a current position and direction, which are affected by the subcommands. The last subcommand must be `C` or `Q`.

  L [length]

    Draw a line with given length in the current direction.

  T [angle]

    Turn the current dircetion.

  A [angle] [radius]

    Draw an arc.

  C

    Finish by connecting with the starting point.

  Q

    Quit.

exclusion_point [Position_x] [Position_y]

  Wenn die Arena innerhalb der Begrenzungen aus mehreren getrennten Gebieten besteht, solltest du alle bis auf eins ausschliessen, indem du "Exclusion-Punkte" setzt. Alle Punkte von denen aus man eine gerade Linie bis zu einem "Exclusion-Punkt" ziehen kann, ohne eine Mauer zu überschreiten, gelten als ausserhalb der Arena.