public abstract class JRobot2014_2 extends Pilot
doScanning()
,
doShooting()
,
doDriving()
,
Serialized FormPilot.DropperCommand, Pilot.LauncherAmmunition
memoryConsumption
Constructor and Description |
---|
JRobot2014_2() |
Modifier and Type | Method and Description |
---|---|
protected void |
addDebugArrow(Vector start,
Vector end)
Mit Hilfe dieser Funktion kann ein Bot einen Pfeil auf's Spielfeld
zeichnen.
|
protected void |
addDebugCrosshair(Vector position)
Mit Hilfe dieser Funktion kann ein Bot ein Kreuz auf's Spielfeld
zeichnen.
|
protected void |
addDebugLine(Vector p1,
Vector p2)
Mit Hilfe dieser Funktion kann ein Bot eine Linie auf's Spielfeld
zeichnen.
|
protected void |
doDriving()
In der Standardimplementierung wird in einem grossen Kreis um den Gegner herum gefahren.
|
protected void |
doScanning()
Die Standardimplementierung ist ein kreisendes Radar.
|
protected abstract void |
doShooting()
In jedem Simulationszyklus plant jeder JRobot seine nächsten Aktionen.
|
BodyFactory |
getBodyFactory()
determines the favorite supplier this
Pilot is designed for. |
protected static double |
getCannonballSpeed()
Liefert die Geschwindigkeit (in Meter pro Sekunde), mit der eine Granate fliegt.
|
protected static double |
getCannonDamageFront()
Liefert den Schaden, den eine Granate anrichtet, die an der Frontpanzerung aufschlägt.
|
protected static double |
getCannonDamageRear()
Liefert den Schaden, den eine Granate anrichtet, die an der Rückseite aufschlägt.
|
protected static double |
getCannonDamageSide()
Liefert den Schaden, den eine Granate anrichtet, die an der Seite aufschlägt.
|
protected static double |
getEnergyConsumptionCannon() |
protected static double |
getEnergyConsumptionDualMiniMissile() |
protected static double |
getEnergyConsumptionEngine() |
protected static double |
getEnergyConsumptionScanner()
Jeder einzelne Scannerblitz verbraucht Energie.
|
protected static double |
getEnergyConsumptionTankTrap() |
protected static double |
getEnergyProductionPerFrame()
In jedem Simulationszyklus erhält der JRobot eine kleine Menge Energie dazu.
|
protected static int |
getFramesPerSecond()
Die physikalische Zeit, die in jeder "Zeitscheibe" vergeht, ist konstant.
|
protected static double |
getJRobotLength()
Anhand dieser Länge können Größen in der Arena abgeschätzt werden.
|
protected Scan |
getLastScan()
Liefert das Ergebnis des letzten "Scanblitzes".
|
protected static double |
getMaxArenaDiameter()
Zwei Panzer können sich nicht weiter als den zurückgegebenen
Wert voneinander entfernen.
|
protected static double |
getMaxBackwardVelocity() |
protected static double |
getMaxForwardVelocity() |
protected Angle |
getOrientation()
Liefert die aktuelle Ausrichtung des Rumpfes.
Dieser Wert stimmt nicht immer genau mit dem Winkel des Geschwindigkeitsvektors überein, da der Bot auch seitlich rutschen kann (z.B. |
protected Vector |
getPosition()
Liefert die aktuelle absolute Position des JRobot in der Arena.
|
protected Angle |
getScannerApertureAngle()
Liefert den Öffnungswinkel des Scanners.
|
protected Vector |
getVelocity()
Liefert den aktuellen Geschwindigkeitsvektor des Bots.
|
protected void |
init()
This method is called once if the bot is set into the arena and whenever the pilot needs to be reset.
|
protected void |
setAutopilot(Angle direction,
double speed)
Diese Funktion aktiviert den Autopilot, welcher selbständig die
Geschwindigkeiten der beiden Panzerketten regelt.
Der Autopilot fährt so lange mit der angegebenen Geschwindigkeit in die angegebene Richtung, bis diese Funktion mit neuen Daten nochmals aufgerufen wird. |
protected void |
setBodyColor(java.awt.Color newColor)
Hiermit kann eine Farbe eingestellt werden, mit der das Bild des
Rumpfes gefiltert wird.
|
protected void |
setDropTankTrapsCommand()
Legt bis zu zwei Panzersperren ab.
|
protected void |
setLaunchCannonsCommand(Angle command)
Feuert die doppelläfige Kanone ab.
|
protected void |
setLaunchMissilesCommand(Vector target)
Feuert seitlich montierte, gelenkte Raketen ab.
|
protected void |
setNameColor(java.awt.Color newNameColor)
Hiermit kann die Farbe des Schriftzuges verändert werden, der in der
Arena über dem Bot angezeigt wird.
|
protected void |
setScanDirection(Angle scanDirection)
Setzt die Richtung, in die der nächste "Scanblitz" gehen soll.
|
protected void |
setTurretColor(java.awt.Color newColor)
Hiermit kann eine Farbe eingestellt werden, mit der das Bild des
Panzerturms gefiltert wird.
|
getBodyColor, getCurrentTerrain, getEnergy, getHealth, getIsMovingInWrongDirection, getName, getNameColor, getPosOfBestBot, getTime, getTurretColor
clone
protected final void addDebugArrow(Vector start, Vector end)
Alle Debug-Linien sind jeweils nur in dem Frame sichtbar, in dem sie hinzugefügt wurden. Für eine längere Anzeige müssen die Linien also in jedem Frame neu gesetzt werden.
protected final void addDebugCrosshair(Vector position)
Alle Debug-Linien sind jeweils nur in dem Frame sichtbar, in dem sie hinzugefügt wurden. Für eine längere Anzeige müssen die Linien also in jedem Frame neu gesetzt werden.
position
- die Position des Kreuzesprotected final void addDebugLine(Vector p1, Vector p2)
Alle Debug-Linien sind jeweils nur in dem Frame sichtbar, in dem sie hinzugefügt wurden. Für eine längere Anzeige müssen die Linien also in jedem Frame neu gesetzt werden.
p1
- Startpunkt der Liniep2
- Endpunkt der Linieprotected void doDriving()
Durch überschreiben der Methode (ohne Aufruf von super()) kann das Verhalten geändert werden.
Die Reihenfolge der Aufrufe in jedem Simulationsschritt ist wie folgt:
setAutopilot(Angle, double)
,
doScanning()
,
doShooting()
protected void doScanning()
Durch überschreiben der Methode (ohne Aufruf von super()) kann das Verhalten ge?ndert werden.
Die Reihenfolge der Aufrufe in jedem Simulationsschritt ist wie folgt:
Hinweis: Wird die Methode überschrieben, so wird die Methode getLastestRoundaboutScanHit() nicht mehr mit Werten befüllt.
protected abstract void doShooting()
Das Wissen eines JRobot über den momentanen Zustand der Simulation ist begrenzt durch die Dinge, die er aus seinen Sensoren auslesen kann. Sensoren sind generell alle solchen Methoden, die mit get... beginnen:
Pilot.getTime()
, Pilot.getEnergy()
,
getEnergyProductionPerFrame()
getPosition()
, getOrientation()
,
getVelocity()
, getEnergyConsumptionEngine()
getLastScan()
, getScannerApertureAngle()
,
getCannonballSpeed()
,
getEnergyConsumptionCannon()
, getEnergyConsumptionDualMiniMissile()
,
getEnergyConsumptionTankTrap()
Ein JRobot kann Aktionen planen, die dann im nächsten Simulationszyklus eine Auswirkung haben. Aktionen sind generell alle solchen Methoden, die mit set... beginnen:
setScanDirection(Angle)
#setLaunchProjectileCommand(Angle)
setAutopilot(Angle, double)
addDebugArrow(Vector, Vector)
,
addDebugCrosshair(Vector)
, addDebugLine(Vector, Vector)
setBodyColor(Color)
, setTurretColor(Color)
,
setNameColor(Color)
Im Package jrobots.utils stehen einige Hilfsklassen zur Verfügung, die frei verwendet werden können.
Es ist möglich, static Felder zu verwenden, allerdings führt das dazu, dass der Zeitschieber zum Debuggen nicht mehr benutzt werden kann. Also besser keine statischen Felder verwenden.
Laufzeit- und Speicherverbrauch werden vom Framework beobachtet.
Wird ein sinnvoller Betrieb des Frameworks dadurch
übermäßig eingeschränkt,
kann der verursachende Bot vom Wettbewerb ausgeschlossen werden.
Laufzeitfehler werden vom Framework abgefangen und der Bot neu gestartet.
doScanning()
,
doDriving()
public final BodyFactory getBodyFactory()
Pilot
Pilot
is designed for.
Implementor is obligated to add the final modifier.
getBodyFactory
in class Pilot
BodyFactory
protected static final double getCannonballSpeed()
Die Granate fliegt mit konstanter Geschwindigkeit, bis sie ihr Ziel erreicht hat.
Die Geschwindigkeits des Bots, von dem sie abgefeuert wurde, beeinflusst die Granate nicht.
protected static final double getCannonDamageFront()
protected static final double getCannonDamageRear()
protected static final double getCannonDamageSide()
protected static final double getEnergyConsumptionCannon()
protected static final double getEnergyConsumptionDualMiniMissile()
protected static final double getEnergyConsumptionEngine()
protected static final double getEnergyConsumptionScanner()
protected static final double getEnergyConsumptionTankTrap()
protected static final double getEnergyProductionPerFrame()
protected static final int getFramesPerSecond()
In jeder Zeitscheibe wird ein Mal die actions()-Methode aufgerufen.
Dieser Wert ist hilfreich, wenn man den zeitlichen Abstand zwischen zwei Aufrufen der actions()-Methode wissen muss.
protected static final double getJRobotLength()
protected final Scan getLastScan()
Hinweis: Der "letzte Scan" kann mehr als einen Simulationsschritt zurück liegen,
falls nicht in jedem Simulationsschritt ein Scanbefehl abgesetzt wird.
Überprüfen lässt sich dies mit Scan.timeOfScan
== Pilot.getTime()
.
Pilot.getLastScan()
protected static final double getMaxArenaDiameter()
protected static final double getMaxBackwardVelocity()
protected static final double getMaxForwardVelocity()
protected final Angle getOrientation()
protected final Vector getPosition()
protected final Angle getScannerApertureAngle()
Der Radarstrahl wird in die Richtung der eingestellten Scanrichtung ausgesendet und erfasst den Gegner, wenn sich dieser maximal Öffnungswinkel/2 links oder Öffnungswinkel/2 rechts von dieser Richtung befindet.
protected final Vector getVelocity()
protected void init()
Pilot
Please remember: If you overwrite this routine, call super.init().
protected final void setAutopilot(Angle direction, double speed)
Hinweis: Der Bot kann vorwärts schneller als rückwärts fahren.
direction
- gewünschte Fahrtrichtung - in diese Richtung soll die Front zeigen.speed
- gewünschte Geschwindigkeit im Intervall [-1...+1].
Werte kleiner als Null fahren rückwärtsprotected final void setBodyColor(java.awt.Color newColor)
protected final void setDropTankTrapsCommand()
Die Sperren bleiben eine Zeit lang liegen, bis sie zerfallen. Fährt in der Zwischenzeit ein Bot auf die Sperre, so wird er einige Sekunden lang aufgehalten.
protected final void setLaunchCannonsCommand(Angle command)
#setLaunchProjectileCommand(Angle)
protected final void setLaunchMissilesCommand(Vector target)
#setLaunchProjectileCommand(Angle)
protected final void setNameColor(java.awt.Color newNameColor)
protected final void setScanDirection(Angle scanDirection)
Hinweis: Dieser Befehl setzt nur einen Scanblitz ab. Sobald dieser erfolgt ist muss der Auslöser erneut betätigt werden, um weiter zu scannen. So ist also ein Scanblitz pro Simulationszyklus möglich. Bei mehrmaligem Aufruf dieser Methode innerhalb eines Simulationszyklus gilt der letzte Aufruf.
Z.B. Scannen zum linken Bildschirmrand hin:
setScanDirection(new Angle(Math.PI, "radians"));
oder: setScanDirection(LEFT);
Der Radarstrahl wird in die Richtung der eingestellten Scanrichtung ausgesendet und erfasst den Gegner, wenn sich dieser maximal Öffnungswinkel/2 links oder Öffnungswinkel/2 rechts von dieser Richtung befindet.
scanDirection
- gewünschte Scanrichtungprotected final void setTurretColor(java.awt.Color newColor)