java.lang.Object | +--algds.c2002.Hamster
Basisklasse fuer alle Hamster, die sich im einfachen 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 offiziellen Start geaendert werden.
Die Konstanten befinden sich im Interface algds.c2002.Constants,
welches von Hamster implementiert wird.
Diese Konstanten koennen direkt als CORN
angesprochen
werden, man muss nicht Constants.CORN
schreiben!
Wenn ihr noch zusaetzliche Klassen braucht, die die Konstanten verwenden,
empfiehlt es sich, einfach das Interface Constants
zu implementieren.
Aenderungen:
07.07.2001: Erste Anpassung an die Umgebung 2002.
12.12.2001: Trennung Hamster und Hamster2.
10.01.2002: getCollectedCorn() entfernt. Der Hamster wird sich
wohl merken koennen, wieviel er auf dem Heimatfeld abgelegt hat.
Wer Fragen hat, stelle die bitte an Christian.
Zurueck zur Wettbewerbsseite.
Version vom 10.01.2002
Constants
,
Hamster2
Field Summary | |
(package private) algds.c2002.MazeEngine |
engine
Speichert die verwendete MazeEngine, also die Umgebung, die den Hamster durchs Labyrinth bewegt. |
(package private) algds.c2002.HamsterStopException |
hse
Wird geworfen, wenn die Engine null ist, weil der Hamster gestoppt werden soll. |
Fields inherited from interface algds.c2002.Constants |
CLIFFDOWN, CLIFFUP, CORN, CORNCARRY_MAX, CORNFIELD_MAX, CORNMASK, INFINITE_LOOP, MAZELENGTH_MAX, POINTS_COLLISION, POINTS_CORN, POINTS_CRASH, POINTS_LOWERBOUND, POINTS_NOTHOME, POINTS_STEP, SLOPEDOWN, SLOPEUP, TOTAL_RUNTIME, TURN_LEFT, TURN_RIGHT, WALL, WALLMASK |
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. |
int |
dropHere(int anzahl)
Legt die angegebene Anzahl von Koernern auf dem aktuellen Feld ab. |
boolean |
forward()
Bewegt den Hamster um einen Schritt in der aktuellen Richtung vorwaerts. |
int |
getAvailableCorn()
Liefert die Anzahl der Koerner auf dem aktuellen Feld. |
int |
getCarriedCorn()
Liefert die Anzahl der Koerner, die der Hamster im Maul traegt. |
int |
getCollisions()
Liefert die Anzahl der bisher gemachten Kollisionen. |
java.lang.String |
getHamsterAuthor()
Autor(en) des Hamsters. |
java.lang.String |
getHamsterDate()
Datum der Hamsterversion. |
java.lang.String |
getHamsterVersion()
Hamsterversion. |
int |
getPoints()
Liefert die aktuelle Punktzahl des Hamsters. |
int |
getSteps()
Liefert die Anzahl der bisher ausgefuehrten Schritte. |
(package private) boolean |
isEngineAlive()
Prueft, ob die Engine noch existiert. |
void |
log(java.lang.String msg)
Gibt eine Meldung in Form eines Strings im Meldungsfeld aus. |
void |
logln(java.lang.String msg)
Gibt eine Meldung in Form eines Strings mit Zeilenwechsel im Meldungsfeld aus. |
int |
lookForward()
Liefert Informationen ueber das in Blickrichtung angrenzende Feld. |
int |
lookHere()
Liefert Informationen ueber das Feld, auf dem der Hamster gerade steht. |
abstract void |
run()
Die Hauptmethode des Hamsters. |
(package private) void |
setEngine(algds.c2002.MazeEngine me)
Interne Methode fuer die Ablaufumgebung. |
int |
take(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 Meldungen geben soll. |
Methods inherited from class java.lang.Object |
|
Field Detail |
algds.c2002.MazeEngine engine
algds.c2002.HamsterStopException hse
Constructor Detail |
public Hamster()
run()
geschehen,
denn die Hamsterbefehle funktionieren nicht,
bevor run() aufgerufen wird.Method Detail |
public boolean atHome()
public int dropHere(int anzahl)
CORNFIELD_MAX
Koerner.anzahl
- die Anzahl der abzulegenden KoernerConstants.CORNFIELD_MAX
public boolean forward()
Bei einer Kollision mit einer Wand (Constants.WALL
)
wird der Hamster einmal nach links gedreht und bleibt auf
dem Feld stehen.
Der Hamster hat stets eine Zeitspanne von
Constants.INFINITE_LOOP
Millisekunden, um den Befehl
forward() aufzurufen.
Nach einem solchen Aufruf hat er wieder soviel Zeit usw.
Damit soll verhindert werden, dass ein Hamster ewig in einer
Endlosschleife haengt.
Nach einer bestimmten Gesamtlaufzeit
(Constants.TOTAL_RUNTIME
) wird der Lauf
des Hamster abgebrochen.
true
, wenn Schritt ausgefuehrt werden konnte,
sonst false
(Kollision).Hamster2.forward()
public int getAvailableCorn()
public int getCarriedCorn()
public int getCollisions()
public java.lang.String getHamsterAuthor()
public java.lang.String getHamsterDate()
public java.lang.String getHamsterVersion()
public int getPoints()
Constants.POINTS_CORN
,
Constants.POINTS_STEP
,
Constants.POINTS_COLLISION
,
Constants.POINTS_CRASH
,
Constants.POINTS_NOTHOME
,
Constants.POINTS_LOWERBOUND
public int getSteps()
final boolean isEngineAlive()
public void log(java.lang.String msg)
msg
- die auszugegebende Nachrichtlogln(java.lang.String)
public void logln(java.lang.String msg)
log(msg+"\n");
msg
- die auszugegebende Nachrichtlog(java.lang.String)
public int lookForward()
Es kann sein, dass in zukuenftigen Versionen noch weitere Informationen zurueckgegeben werden, daher sollte man keinesfalls die Werte direkt vergleichen, sondern stets bitweise.
Constants.CORN
,
Constants.WALL
,
Hamster2.lookForward()
public int lookHere()
Es kann sein, dass in zukuenftigen Versionen noch weitere Informationen zurueckgegeben werden, daher sollte man keinesfalls die Werte direkt vergleichen, sondern stets bitweise.
Constants.CORN
public abstract void run()
Soll der Hamster vom Benutzer gestoppt werden, dann wird eine algds.c2002.HamsterStopException geworfen, die den Hamster beim naechsten Aufruf einer der Hamster-Methoden beendet. Der Hamster darf diese Exception nicht abfangen.
final void setEngine(algds.c2002.MazeEngine me)
me
- die Engine, oder null
wenn sie entfernt
werden soll.public int take(int anzahl)
CORNCARRY_MAX
Koerner.anzahl
- die Anzahl der aufzunehmenden KoernerConstants.CORNCARRY_MAX
public void turn(int direction)
direction
- DrehrichtungTURN_LEFT
, TURN_RIGHT
Constants.TURN_LEFT
,
Constants.TURN_RIGHT
public boolean verbose()
if (verbose()) log(msg);
if (verbose()) logln(msg);
Ihr solltet vermeiden, eine Methode zu schreiben und zu verwenden,
die so aussieht:
void debuglog(String msg){ if (verbose()) log(msg);}
Denn dabei wuerde der String msg
in jedem Fall
erzeugt werden, was bei Debug-Ausgaben ziemlich komplex werden
kann und also zusaetzlich Zeit verbraucht.
Bei Verwendung wie oben tritt das Problem nicht auf.
Natuerlich hindert euch nichts daran, eine eigene debug-Variable zu verwenden.