Raketen-Bots
Wir schreiben das Jahr 3024. Die Menschen sind zu knapp geworden, um im Krieg ein Risiko einzugehen, und der Kampf hat sich auf die Roboter verlagert. Ihre Aufgabe ist es, einen Bot wie keinen anderen zu konstruieren, dessen Raketen die Zerstörung auf Ihre Feinde regnen und alle eingehenden Bedrohungen abschießen.
Spielweise
Bots
Das Gameplay findet in einem 10x15-Raster statt. Ihr Bot befindet sich am unteren Rand und hat drei Steckplätze an den Stellen 6, 7 und 8 des Gitters. Ihr Gegner befindet sich oben im Raster, mit drei Slots direkt gegenüber Ihrem.
Raketen
Von jedem dieser Slots aus können Sie eine Rakete abfeuern, vorausgesetzt, der Slot wurde nicht zerstört. Eine Rakete besteht aus einer Liste von Richtungen, die ihr beim Erstellen gegeben werden. Sobald sie abgefeuert wurde, können diese Richtungen nicht mehr geändert werden. In jeder Runde verbraucht die Rakete den Anfang der Liste und bewegt sich in diese Richtung. Raketen bewegen sich gleichzeitig. Wenn zwei Raketen auf demselben Plättchen enden, explodieren beide. Wenn einer Rakete die Befehle ausgehen, explodiert sie. Wenn einer Rakete nach 100 Bewegungen der Treibstoff ausgeht, explodiert sie. Wenn eine Rakete explodiert, bleibt sie 5 Runden lang auf diesem Plättchen, wodurch auch alle anderen Raketen, die sich dorthin bewegen, explodieren.
Hinweis: Aufgrund der gleichzeitigen Bewegung können zwei Raketen ohne Explosion aneinander vorbeifahren, sofern nicht beide eine Runde auf demselben Plättchen beenden.
Tor
Das Ziel jedes Spiels ist es, die Slots deines Gegners zu zerstören und deine am Leben zu erhalten. Eine Rakete kann von jedem Live-Slot aus abgefeuert werden und erhält vor dem Abfeuern einen von Ihnen festgelegten Pfad. Sie feuern jede zweite Runde eine Rakete ab, was bedeutet, dass sich die Raketen zweimal bewegen, bevor Sie eine weitere abfeuern können. Ein Duell dauert 200 Runden oder bis alle Slots eines Bots zerstört sind.
Wertung
Am Ende des Spiels erhalten Sie einen Punkt für jeden Live-Slot und einen Punkt für jeden gegnerischen Slot, den Sie zerstört haben. Dies bedeutet, dass es sich um ein Nullsummenspiel handelt und jedes Spiel 6 Punkte erhält.
Ein Round Robin wird ausgeführt, so dass sich jeder Bot einmal gegenübersteht. Wenn Bots RNGs verwenden, besteht jedes Matchup stattdessen aus 1000 Duellen.
Implementierung
Den Code für den Wettbewerb finden Sie hier: https://github.com/Cain93/RocketBots
Jede Einreichung sollte die Bot
Klasse erweitern. Sie müssen die fireRocket
Methode überschreiben . Diese Methode empfängt ein Gitterarray von Raketen Rocket[][]
, das das Spielbrett darstellt. Sie werden immer an der Unterseite des Gitters befindet, mit Schlitzen an Stellen [-1][6]
, [-1][7]
, [-1][8]
. In der Tabelle werden nicht belegte Stellen mit dargestellt null
. Wenn eine Rakete in einem Plättchen vorhanden ist, können Sie identifizieren, wem sie gehört, indem Sie auf das dis
Feld zugreifen . "^" ist deine Rakete und "v" ist deine Gegner.
Sie müssen eine LinkedList of Integers zurückgeben, die die Anweisungen für Ihre Rakete enthält. Um nach oben zu gelangen, verwenden Sie 0. Um nach oben und rechts zu gelangen, verwenden Sie 1, genau rechts, verwenden Sie 2 usw. bis 7 für oben und links. Die Rakete bewegt sich in der Reihenfolge, in der Sie Ganzzahlen drücken. Mit dem folgenden Code bewegt sich die Rakete beispielsweise einige Umdrehungen nach oben, einige Umdrehungen im Zick-Zack und detoniert dann.
LinkedList<Integer> moves = new LinkedList<Integer>();
moves.push(0);
moves.push(0);
moves.push(0);
moves.push(1);
moves.push(7);
moves.push(1);
moves.push(7);
Ändern Sie das curSlot
Feld , um zu ändern, aus welchem Steckplatz die Rakete abgefeuert werden soll. 0 ist Ihr Slot ganz links und 2 ist Ihr Slot ganz rechts. Verwenden Sie, um zu überprüfen, ob ein Steckplatz zerstört wurde getSlot(int slotNumber)
.
Wenn eine Rakete eine Runde in einem Slot beendet, wird dieser Slot zerstört. Sie müssen die Rakete nicht manuell zur Detonation bringen.
Hinweis: Raketen erscheinen an der Stelle, an der der Slot abgefeuert wurde, bewegen sich jedoch einmal, bevor Kollisionen ausgewertet werden. Wenn Sie also eine Rakete aus Steckplatz 0 abfeuern und der erste Zug richtig ist (2), zerstören Sie Ihren eigenen mittleren Steckplatz. Nach oben und rechts (1) ist jedoch ein sicherer Zug.
Wenn Sie Ihren Bot benennen möchten, überschreiben Sie die name()
Methode.
Die Bots werden für jedes Duell neu erstellt, sodass alle statischen Variablen zurückgesetzt werden.
Viel Glück!
Mögen Ihre Raketen wahr fliegen und Ihre Gegner nichts als schwelende Metallreste sein.
Hinweis:
Die gezielte Detonation von Raketen zur Erzeugung von Explosionen ist eine einfachere Möglichkeit zur Verteidigung als der Versuch, gegnerische Raketen abzuschießen.
Beispiel Bot
package bots;
import java.util.LinkedList;
import mechanics.*;
public class SimpleBot extends Bot {
public String name(){
return "Simple";
}
public LinkedList<Integer> fireRocket(Rocket[][] g){
LinkedList<Integer> l = new LinkedList<Integer>();
for(int i = 0; i < 12; i++){
l.push(0);
}
return l;
}
}
Scores
Ergebnisse von 6-24
Simple: 900
Zigzagoon: 3654
Wall-E: 3606
Tortoise: 2248
3 Shot: 2334
HatTrickBot: 4287
Sniper: 2973
SideShooter: 2491
Terminator: 4835
StraightShot: 3378
Defender: 4570
MoreDakka: 4324