public abstract class JRobot2009 extends Pilot
It originates from JRobot2008
and adds these functional
enhancements:
Launchable
sProjectile
Missile
Droppable
sMine
TankTrap
Pilot.DropperCommand, Pilot.LauncherAmmunition
memoryConsumption
Constructor and Description |
---|
JRobot2009() |
Modifier and Type | Method and Description |
---|---|
protected abstract void |
actions()
Everytime the simulation has progressed, each
Pilot may plan
the next actions. |
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(float x1,
float y1,
float x2,
float y2) |
protected void |
addDebugLine(Vector p1,
Vector p2)
Mit Hilfe dieser Funktion kann ein Bot eine Linie auf's Spielfeld
zeichnen.
|
BodyFactory |
getBodyFactory()
determines the favorite supplier this
Pilot is designed for. |
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()
Retrieves the maximum backward velocity of the
Panzer . |
protected static double |
getMaxForwardVelocity()
Retrieves the maximum forward velocity of the
Panzer . |
protected static Angle |
getMaxScanAperture()
Liefert den größtmöglichen öffnungswinkel des Scanners.
|
protected static double |
getMineReloadTime()
Liefert die Zeit in Sekunden, die nach dem Legen einer Mine vergehen muss,
bis die Minenlegevorrichtung wieder bereit ist.
|
protected static double |
getMissileReloadTime()
Liefert die Zeit in Sekunden, die nach dem Abfeuern eines normalen
Geschosses vergehen muss, bis der Werfer wieder bereit ist.
|
protected static double |
getMissileSpeedMax()
Liefert die maximale Geschwindigkeit (in Meter pro Sekunde), mit der die
Lenkrakete, die der Panzer verschiessen kann, fliegt.
|
protected Angle |
getOrientation()
Liefert die aktuelle Ausrichtung des Panzerkörpers.
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 Position des Panzers im Spielfeld relativ zur
oberen linken Ecke.
|
protected static double |
getProjectileReloadTime()
Liefert die Zeit in Sekunden, die nach dem Abfeuern eines normalen
Geschosses vergehen muss, bis der Werfer wieder bereit ist.
|
protected static double |
getProjectileSpeed()
Liefert die Geschwindigkeit (in Meter pro Sekunde), mit der das
Projektil, das der Panzer verschiessen kann, fliegt.
|
protected static double |
getScanInterval()
Liefert die Zeit in Sekunden, die der Scanner zum "Nachladen" benötigt.
|
protected static double |
getTankTrapReloadTime()
Liefert die Zeit in Sekunden, die nach dem Legen einer Mine vergehen muss,
bis die Minenlegevorrichtung wieder bereit ist.
|
protected double |
getTimeOfDropperReloaded()
Liefert den Zeitpunkt, zu dem die Legevorrichtung wieder nachgeladen ist.
|
protected double |
getTimeOfLauncherReloaded()
Liefert den Zeitpunkt, zu dem die Abschussvorrichtung wieder
nachgeladen ist.
|
protected Vector |
getVelocity()
Liefert den aktuellen Geschwindigkeitsvektor des Panzers.
|
protected boolean |
isScanFromNow()
Liefert true, wenn der aktuelle Scanwert im Scanner von diesem Frame
stammt, also wenn gilt: getTime() == getLastScan().timeOfScan
Der Scanner hat also in diesem Frame einen Scan durchgeführt. |
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
Panzerkörpers gefiltert wird.
|
protected void |
setDebugLines(Vector[] points)
Mit Hilfe dieser Funktion kann ein Bot mehrere Linien auf's Spielfeld
zeichnen.
|
protected void |
setDebugText(java.lang.String text)
übergibt dem Framework einen Text, den es direk unterhalb des
umherfahrenden Bots anzeigt.
|
protected void |
setDropMineCommand(boolean isToBeLayed)
Setzt einen Befehl an die Abwurfvorrichtung ab.
|
protected void |
setDropTankTrapCommand(boolean isToBeLayed)
Setzt einen Befehl an die Abwurfvorrichtung ab.
|
protected void |
setLaunchMissileCommand(Angle command)
Setzt einen Feuerbefehl an die Abschussvorrichtung ab.
|
protected void |
setLaunchProjectileCommand(Angle command)
Setzt einen Feuerbefehl an die Abschussvorrichtung ab.
|
protected void |
setMissileTarget(Vector targetPosition) |
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 |
setScanAperture(Angle aperture)
Hiermit sagt man dem Scanner, mit welchem öffnungswinkel der nächste
"Scanblitz" erfolgen soll.
|
protected void |
setScanDirection(Angle scanDirection)
Setzt die Richtung, in die der nächste "Scanblitz" gehen soll.
Z.B. |
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, init
clone
protected abstract void actions()
Pilot
may plan
the next actions. This is done through execution of this method.
Knowledge a Pilot
has of the momentary simulation state is
limited to what its Panzer
's sensors may display. Access to
the Panzer's sensor states is best done via the following methods:
getPosition
, getOrientation
,
getVelocity
, getTime
getLastScanResult
, isScanFromNow
,
isScannerUpdated
, getTimeOfLastScan
,
getScanInterval
getTimeOfLastShot
,
getProjectileSpeed
A Pilot
is able to steer its Panzer
. The Panzer
will follow those decisions until the Pilot canges its commands.
Decisions are made by calling the following routines:
setAutopilot
, setTrackspeedLeft
,
setTrackspeedRight
setScanDirection
, setScanAperture
setCannonCommand
setDebugText
, setDebugLines
You may add fields as you like to keep some state through the coarse of
the simulation run. But remember not to waste memory, as the framework
checks the size of your Pilot
's state and may refuse to
permit it to the arena.
You can always use static fields, but that makes the timeline
slider obsolete for debugging.
Also keep track of the computing time you spend, because if you exeed a
certain treshold, the framework may exert punishment upon your Pilot. If
you try to not waste time, there shouldn't be a problem, however.
If your Pilot causes an exception, there will also be some detriment, but
a new instance of your Pilot will be established, so you may be able to
carry on.
Package visibility. Pilots with a partial programming interface may want to have an invisible partial implementation of actions().
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 deklariert werden.
start
- Startpunkt des Pfeilsend
- Endpunkt des Pfeils (hier ist der Pfeilkopf)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 deklariert werden.
position
- die Position des Kreuzesprotected final void addDebugLine(float x1, float y1, float x2, float y2)
protected 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 deklariert werden.
p1
- Startpunkt der Liniep2
- Endpunkt der Liniepublic final BodyFactory getBodyFactory()
Pilot
Pilot
is designed for.
Implementor is obligated to add the final modifier.
getBodyFactory
in class Pilot
BodyFactory
protected final Scan getLastScan()
Note: The returned might be an unsuccessful scan. Check with
isTargetLocated
.
Pilot.getLastScan()
protected static final double getMaxArenaDiameter()
protected static final double getMaxBackwardVelocity()
Panzer
.
protected static final double getMaxForwardVelocity()
Panzer
.
protected static final Angle getMaxScanAperture()
protected static final double getMineReloadTime()
protected static final double getMissileReloadTime()
protected static final double getMissileSpeedMax()
protected final Angle getOrientation()
protected final Vector getPosition()
protected static final double getProjectileReloadTime()
protected static final double getProjectileSpeed()
protected static final double getScanInterval()
protected static final double getTankTrapReloadTime()
protected final double getTimeOfDropperReloaded()
Ist der Zeitpunkt kleiner oder gleich der momentanen Zeit, kann sofort eine beliebiger Gegenstand gelegt werden.
protected final double getTimeOfLauncherReloaded()
Ist der Zeitpunkt kleiner oder gleich der momentanen Zeit, kann sofort eine beliebige Waffe abgeschossen werden.
protected final Vector getVelocity()
protected final boolean isScanFromNow()
protected final void setAutopilot(Angle direction, double speed)
direction
- gewünschte Fahrtrichtungspeed
- gewünschte Geschwindigkeit im Intervall [-1...+1]protected final void setBodyColor(java.awt.Color newColor)
newColor
- protected final void setDebugLines(Vector[] points)
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 deklariert werden.
points
- Start- und Endpunkte der Linienprotected final void setDebugText(java.lang.String text)
text
- anzuzeigender Textprotected final void setDropMineCommand(boolean isToBeLayed)
Ist schon ein -noch nicht ausgeführter- Abwurfbefehl vorhanden,
dann wird dieser überschrieben.
Dies hat keinen Einfluss auf den Nachladevorgang der Abwurfvorrichtung.
Sobald sie nachgeladen ist, wird der zuletzt eingestellte
Befehl ausgefürt.
Folgende Befehle gibt es für die Abwurfvorrichtung:
setDropMineCommand
- Mine legen setDropTankTrapCommand
- Panzersperre legen isToBeLayed
- protected final void setDropTankTrapCommand(boolean isToBeLayed)
Ist schon ein -noch nicht ausgeführter- Abwurfbefehl vorhanden,
dann wird dieser überschrieben.
Dies hat keinen Einfluss auf den Nachladevorgang der Abwurfvorrichtung.
Sobald sie nachgeladen ist, wird der zuletzt eingestellte
Befehl ausgefürt.
Folgende Befehle gibt es für die Abwurfvorrichtung:
setDropMineCommand
- Mine legen setDropTankTrapCommand
- Panzersperre legen isToBeLayed
- protected final void setLaunchMissileCommand(Angle command)
Ist schon ein -noch nicht ausgeführter- Feuerbefehl vorhanden,
dann wird dieser überschrieben.
Dies hat keinen Einfluss auf den Nachladevorgang der Kanone. Sobald sie
nachgeladen ist, wird der zuletzt eingestellte Befehl ausgefürt.
Folgende Befehle gibt es für die Abschussvorrichtung:
setLaunchCannonCommand
setLaunchMissileCommand
setMissileTarget
setzen)
command
- - Richtung, in die geschossen werden soll (absolut)protected final void setLaunchProjectileCommand(Angle command)
Ist schon ein -noch nicht ausgeführter- Feuerbefehl vorhanden,
dann wird dieser überschrieben.
Dies hat keinen Einfluss auf den Nachladevorgang der Kanone. Sobald sie
nachgeladen ist, wird der zuletzt eingestellte Befehl ausgefürt.
Folgende Befehle gibt es für die Abschussvorrichtung:
setLaunchCannonCommand
setLaunchMissileCommand
setMissileTarget
setzen)
command
- - Richtung, in die geschossen werden soll (absolut)protected final void setMissileTarget(Vector targetPosition)
protected final void setNameColor(java.awt.Color newNameColor)
newNameColor
- protected final void setScanAperture(Angle aperture)
aperture
- öffnungswinkelprotected final void setScanDirection(Angle scanDirection)
setScanDirection(new RadAngle(Math.PI));
scanDirection
- gewünschte Scanrichtungjava.lang.NullPointerException
- wenn der Parameter null
istprotected final void setTurretColor(java.awt.Color newColor)
newColor
-