java.lang.Object | +--algds.contest.Hamster
Basisklasse fuer alle Hamster, die sich im
Labyrinth bewegen sollen. Jede Implementierung muss von dieser
Klasse abgeleitet werden und die Methode run
ueberschreiben. Eine Instanz der abgeleiteten Klasse
wird in die Labyrinth-Welt geladen und dort gestartet.
Alle Konstanten-Werte und Methoden koennen ohne Ankuendigung
bis zum 12.03.2001 geaendert werden, der grundlegende Aufbau wird
sich aber nicht mehr aendern.
Aenderungen:
31.01.2001: Erste oeffentliche Version.
08.02.2001: Die Konstanten befinden sich nun im Interface
algds.contest.Constants, welches von Hamster implementiert wird.
Diese Konstanten koennen direkt als CORN
angesprochen
werden, man muss nicht Constants.CORN
schreiben!
getCorn
heisst jetzt getAvailableCorn
.
05.03.2001: Der Hamster hat stets eine Zeitspanne von
Constants.INFINITE_LOOP
Millisekunden, um einen der Befehle
forward()
, beamMeUp()
oder turn(int)
aufzurufen. Nach einem solchen Aufruf hat er wieder soviel Zeit usw.
Damit soll verhindert werden, dass ein Hamster ewig in einer
Endlosschleife haengt, denn beim Aufruf einer der drei Methoden verliert
er Energie, so dass er "nach endlicher Zeit" (das kann eine
Weile dauern...) verhungert ist.
08.03.2001: Neue Hamster-Methoden verbose(), debuglog(String),
debuglogln(String). Beim Aufruf von beamMeUp() wird dem Hamster stets
Energie abgezogen, auch wenn nicht gebeamt werden kann.
30.04.2001: Nach einer bestimmten Gesamtlaufzeit
(Constants.TOTAL_RUNTIME
) wird der Lauf des Hamster abgebrochen.
Auf diese Weise kann ein Hamster sich nicht 2 Wochen Zeit lassen :-)
04.05.2001: Korrektur der Gesamtzeitkontrolle.
Wer Fragen hat, stelle die bitte an Christian.
Version vom 04.05.2001
Constants
Constructor Summary | |
Hamster()
Konstruktor zum Erzeugen eines Hamster-Objektes. |
Method Summary | |
boolean |
atHome()
Gibt true zurueck, wenn der Hamster sich auf dem Heimatfeld befindet, false sonst. |
boolean |
beamMeUp()
Beamt den Hamster auf ein anderes Feld. |
void |
debuglog(java.lang.String msg)
Gibt die Statusmeldung nur dann aus, wenn der Hamster ausfuehrliche Meldungen geben soll. |
void |
debuglogln(java.lang.String msg)
Gibt die Statusmeldung nur dann aus, wenn der Hamster ausfuehrliche Meldungen geben soll. |
int |
drop(int groesse,
int anzahl)
Legt die angegebene Anzahl von Koernern im aktuellen Feld ab. |
int |
eat(int groesse,
int anzahl)
Frisst die angegebene Anzahl von Koernern. |
boolean |
forward()
Bewegt den Hamster um einen Schritt in der aktuellen Richtung vorwaerts. |
int[] |
getAvailableCorn()
Liefert die Anzahl der verfuegbaren Koerner auf dem aktuellen Feld. |
int |
getAvailableCorn(int groesse)
Liefert die Anzahl der verfuegbaren Koerner der gegebenen Groesse auf dem aktuellen Feld. |
int[] |
getCarriedCorn()
Liefert die Anzahl der Koerner die der Hamster im Maul traegt. |
int |
getCarriedCorn(int groesse)
Liefert die Anzahl der Koerner gegebener Groesse, die der Hamster im Maul traegt. |
int[] |
getCollectedCorn()
Liefert die Anzahl der gesammelten Koerner auf dem Heimatfeld. |
int |
getCollectedCorn(int groesse)
Liefert die Anzahl der gesammelten Koerner der gegebenen Groesse auf dem Heimatfeld. |
int |
getCollisions()
Liefert die Anzahl der bisher gemachten Kollisionen. |
int |
getDirection()
Liefert die aktuelle Laufrichtung des Hamsters als Himmelsrichtung. |
int |
getEnergy()
Liefert die aktuelle Energie des Hamsters. |
int |
getHomeLevel()
Liefert die Levelnummer des Heimatfeldes. |
int |
getHomeX()
Liefert die X-Koordinate des Heimatfeldes. |
int |
getHomeY()
Liefert die Y-Koordinate des Heimatfeldes. |
int |
getLevel()
Liefert die Levelnummer der aktuellen Ebene des Labyrinthes. |
java.lang.String |
getName()
Liefert den Namen des Hamsters. |
int |
getPoints()
Liefert die aktuelle Punktzahl des Hamsters. |
int |
getSteps()
Liefert die Anzahl der bisher ausgefuehrten Schritte. |
int |
getTurns()
Liefert die Anzahl der bisher ausgefuehrten Drehungen. |
int |
getX()
Liefert die aktuelle x-Position im Labyrinth. |
int |
getY()
Liefert die aktuelle y-Position im Labyrinth. |
boolean |
isEngineAlive()
Prueft, ob die Engine noch existiert |
void |
log(java.lang.String msg)
Gibt eine Meldung in Form eines Strings im Log-Fenster aus. |
void |
logln(java.lang.String msg)
Gibt eine Meldung in Form eines Strings im Log-Fenster aus. |
int |
look()
Liefert Informationen ueber das in Blickrichtung angrenzende Feld. |
int |
lookCurrent()
Liefert Informationen ueber das Feld, auf dem der Hamster gerade steht. |
void |
run()
Die Hauptmethode des Hamsters. |
void |
setEngine(algds.contest.MazeEngine me)
Interne Methode fuer die Ablaufumgebung. |
int |
take(int groesse,
int anzahl)
Nimmt die angegebene Anzahl von Koernern aus dem aktuellen Feld auf. |
void |
turn(int direction)
Aendert die Laufrichtung, wobei das aktuelle Feld nicht verlassen wird. |
boolean |
verbose()
Gibt an, ob der Hamster ausfuehrliche Statusmeldungen geben soll. |
Methods inherited from class java.lang.Object |
clone,
equals,
finalize,
getClass,
hashCode,
notify,
notifyAll,
toString,
wait,
wait,
wait |
Constructor Detail |
public Hamster()
run()
geschehen, denn
die Hamsterbefehle funktionieren nicht, bevor run()
aufgerufen wird.Method Detail |
public boolean isEngineAlive()
public void setEngine(algds.contest.MazeEngine me)
Setzt oder entfernt die Engine des Hamster.
Sie ist public, um Interessierten die Moeglichkeit zu geben,
eigene MazeEngines zu schreiben und zu verwenden, so wie das
letztes Jahr mit dem MazeRunnerX von Johannes Zander geschah, der
nicht zum Originalpaket gehoerte. (Der sich aber als so gut
erwiesen hat, dass dieses Jahr die ganze Umgebung auf seiner
Engine aufbaut.)
Diese Methode wird waehrend des Wettbewerb nicht mehr
public sein.
me
- die Engine, oder null
wenn sie entfernt
werden soll.public int take(int groesse, int anzahl)
groesse
- die Groesse der aufzunehmenden Koerneranzahl
- die Anzahl der aufzunehmenden KoernerConstants.CORNCARRY_MAX
,
Constants.CORNSIZE_MAX
public int drop(int groesse, int anzahl)
CORNFIELD_MAX
Groesseneinheiten).groesse
- die Groesse der abzulegenden Koerneranzahl
- die Anzahl der abzulegenden KoernerConstants.CORNFIELD_MAX
,
Constants.CORNSIZE_MAX
public int eat(int groesse, int anzahl)
n*groesse*ENERGY_CORN
aufgeladen (wobei n
das Minimum aus
anzahl
und der Kornzahl [der gegebenen Groesse] ist,
die der Hamster tatsaechlich im Maul traegt),
hoechstens jedoch auf den Wert ENERGY_MAX
.groesse
- die Groesse der zu fressenden Koerneranzahl
- die Anzahl der zu fressenden KoernerConstants.ENERGY_CORN
,
Constants.ENERGY_MAX
,
Constants.CORNSIZE_MAX
public boolean beamMeUp() throws HamsterDiedException
false
geliefert.
ENERGY_STEP
, egal ob dann gebeamt wird oder nicht.
look()
und lookCurrent()
liefern
dann CORN | BEAMER
zurueck).
true
, wenn gebeamt werden konnte,
sonst false
(kein Beamer da).Constants.ENERGY_STEP
public boolean forward() throws HamsterDiedException
ENERGY_STEP
Energiepunkte.
Bei einer Kollision wird der Hamster einmal nach links
gedreht. Seine Energie aendert sich nach der Kollision um
ENERGY_TURN+ENERGY_COLLISION
Energiepunkte.true
, wenn Schritt ausgefuehrt werden konnte,
sonst false
(Kollision).Constants.ENERGY_STEP
,
Constants.ENERGY_COLLISION
,
Constants.ENERGY_TURN
public void turn(int direction) throws HamsterDiedException
ENERGY_TURN
.direction
- Drehrichtung
(TURN_LEFT
oder TURN_RIGHT
)Constants.TURN_LEFT
,
Constants.TURN_RIGHT
,
Constants.ENERGY_TURN
public int look()
Constants.EMPTY
,
Constants.CORN
,
Constants.WALL
,
Constants.BEAMER
public int lookCurrent()
Constants.EMPTY
,
Constants.CORN
,
Constants.BEAMER
public int getDirection()
DIR_WEST, DIR_NORTH, DIR_EAST, DIR_SOUTH
)Constants.DIR_WEST
,
Constants.DIR_NORTH
,
Constants.DIR_EAST
,
Constants.DIR_SOUTH
public int getSteps()
public int getCollisions()
public int getEnergy()
public boolean atHome()
getLevel()
,
getX()
,
getY()
,
getHomeLevel()
,
getHomeX()
,
getHomeY()
public int getHomeLevel()
public int getHomeX()
public int getHomeY()
public int getLevel()
public int getX()
public int getY()
public int[] getCarriedCorn()
Constants.CORNSIZE_MAX
public int getCarriedCorn(int groesse)
groesse
- Groesse der Koerner, deren Anzahl geliefert
werden soll.Constants.CORNSIZE_MAX
public int[] getCollectedCorn()
Constants.CORNSIZE_MAX
public int getCollectedCorn(int groesse)
groesse
- Groesse der Koerner, deren Anzahl geliefert
werden soll.Constants.CORNSIZE_MAX
public int[] getAvailableCorn()
Constants.CORNSIZE_MAX
public int getAvailableCorn(int groesse)
groesse
- Groesse der Koerner, deren Anzahl geliefert
werden soll.Constants.CORNSIZE_MAX
public int getPoints()
public void log(java.lang.String msg)
msg
- die auszugegebende Nachrichtpublic void logln(java.lang.String msg)
log(msg+"\n");
msg
- die auszugegebende Nachrichtlog(java.lang.String)
public boolean verbose()
debuglog(java.lang.String)
public void debuglog(java.lang.String msg)
if (verbose()) log(msg);
msg
- die auszugebende Meldungverbose()
,
log(java.lang.String)
public void debuglogln(java.lang.String msg)
debuglog(msg+"\n");
msg
- die auszugebende Meldungdebuglog(java.lang.String)
public java.lang.String getName()
public void run()
forward()
,
beamMeUp()
oder turn(int)
eine
HamsterDiedException
geworfen.
HamsterStopException
geworfen,
die den Hamster beim naechsten Aufruf einer der
Hamster-Methoden beendet.public int getTurns()