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
quelle
Antworten:
Verteidiger
Der Verteidiger verwendet eine neue Art der Verteidigung: Die Raketen patrouillieren vor den Slots. Dies bietet einen großen Vorteil, da Raketen 100 statt 5 Runden (wie Explosionen) leben.
quelle
Zickzack
Die äußeren Schlitze sind (leicht) breit, gehen dann nach vorne und kehren in Richtung der feindlichen Schlitze zurück. Der mittlere Schlitz schießt ein Zickzackmuster in die Mitte.
In jeder zweiten Runde (3 Runden) geht es in den Verteidigungsmodus und explodiert nur einige Raketen in der Nähe meiner eigenen Slots. Raketen im Angriffsmodus umgehen sie dann. Nichts Besonderes, nur etwas, um den Wettbewerb zum Laufen zu bringen.
quelle
Terminator
Ich bin stolz Terminator zu präsentieren !!!
Jede Rakete bewegt sich weit links / rechts von der Mitte und kehrt auf einen feindlichen Platz zurück. Alle zwei Runden wird eine Verteidigungsrakete gerade abgefeuert und explodiert in der Nähe des Schlitzes, um sie zu schützen.
quelle
HatTrickBot
Ich hatte DoubleTapBot für CodeBot 3, der zweimal in einer Runde traf. Hier kommt HatTrickBot: Alle 3 Punkte gleichzeitig treffen!
Es ist immer möglich zu verhindern, dass eine Rakete trifft, wenn Sie wissen, wo sie fallen wird. Aber ich glaube nicht, dass es viele Bot gibt, die ihre Slots vor einem 3-Raketen-Angriff schützen können.
Übrigens, ja, es ist schrecklich, so etwas anderes mit wiederholtem Wechsel zu sehen. Ich hätte eine Variable zum Einschalten mit eindeutigen Werten für jede Kombination aus dem Status der Slots und dem TurnConter erstellen können. Aber es wäre schwieriger zu lesen (ich müsste die Bedeutung der Werte in einem Kommentar behalten ... langweilig!) :)
quelle
Schildkröte
Wenn ich alle meine Basen schütze, habe ich 3 Punkte. Basen können nur von 5 Orten aus angegriffen werden, wenn ich das Gitter gut bekomme. Rakete dauert 5 Runde auf dem Feld ...
Dieser Bot nutzt all dies, um sein Ziel zu erreichen: Überleben mit mindestens 50% der Punkte in der Tasche. Es schießt 3 Raketen und deckt sich dann ab
quelle
SideShooter
Erste Schüsse über den ersten (ganz rechts) Turm auf zwei verschiedene Arten. Dann schießt es auf zwei verschiedene Arten über den letzten (ganz linken) Turm. Dann bildet es eine "Wand" mit dem zweiten (mittleren) Turm, indem Raketen vor jedem Turm explodieren. Dieser Vorgang wird wiederholt.
Wenn das Spiel länger als 30 Runden dauert, wird SideShooter langweilig und ändert sich geringfügig. Anstatt mit dem zweiten (mittleren) Turm eine "Wand" zu bilden, schießt er gerade. Der Rest der Türme verhält sich genauso.
quelle
do...while
Aussage machen eine Endlosschleife ...Scharfschütze
Sniper blockiert zuerst seine beiden Seiten und beginnt dann gerade zu schießen.
quelle
Drei Schüsse
Wir haben ein paar seltsame Schüsse bekommen. Keine echte Verteidigung, aber das Muster ist so, dass es schwierig sein wird, an diesem bizarren Raketenhagel vorbei zu schießen. (oder das ist die Idee. Es wird höchstwahrscheinlich nicht funktionieren.)
Hinweis
quelle
MoreDakka
MoreDakka schießt ohne Unterbrechung in fünf Richtungen (bis die Türme von anderen Raketen zerstört werden).
quelle
StraightShot
Feuern Sie einfach direkt auf sie.
quelle
Hier ist mein eigener Eintrag
Wall-E
Schießt einige versetzte Raketen ab und baut Wände an seinen Kanten und in der Mitte. Beginnt nach 100 Runden, auf den mittleren Schlitz zu zielen.
quelle