algds.c2002
Class Hamster2

java.lang.Object
  |
  +--algds.c2002.Hamster
        |
        +--algds.c2002.Hamster2
All Implemented Interfaces:
Constants

public abstract class Hamster2
extends Hamster

Basisklasse fuer alle Hamster, die sich im erweiterten Labyrinth (mit Hoehenstufen) bewegen sollen.

Aenderungen:
07.07.2001: Erste Anpassung an die Umgebung 2002.
12.12.2001: Trennung Hamster und Hamster2.
03.02.2002: Parameter von getHeightDifference() entfernt.
16.02.2002: Das Verhalten von lookForward() stimmte nicht mit dem gewuenschten, dokumentierten Verhalten ueberein.

Wer Fragen hat, stelle die bitte an Christian.

Zurueck zur Wettbewerbsseite.

Version vom 10.01.2002

See Also:
Constants

Fields inherited from class algds.c2002.Hamster
engine, hse
 
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
Hamster2()
          Konstruktor zum Erzeugen eines Hamster2-Objektes.
 
Method Summary
 int dropForward(int anzahl)
          Wenn in Blickrichtung eine absteigende Klippe ist (ohne Wand), dann legt er die angegebene Anzahl von Koernern auf dem Nachbarfeld ab, ansonsten legt er nichts ab.
 boolean forward()
          Bewegt den Hamster um einen Schritt in der aktuellen Richtung vorwaerts.
 int getHeightDifference()
          Liefert die Hoehendifferenz zum Nachbarfeld.
 int lookForward()
          Liefert Informationen ueber das in Blickrichtung angrenzende Feld.
 
Methods inherited from class algds.c2002.Hamster
atHome, dropHere, getAvailableCorn, getCarriedCorn, getCollisions, getHamsterAuthor, getHamsterDate, getHamsterVersion, getPoints, getSteps, isEngineAlive, log, logln, lookHere, run, setEngine, take, turn, verbose
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Hamster2

public Hamster2()
Konstruktor zum Erzeugen eines Hamster2-Objektes. Sollte nichts tun. Alle Initialisierungen und Handlungen des Hamsters muessen in der Methode Hamster.run() geschehen, denn die Hamsterbefehle funktionieren nicht, bevor run() aufgerufen wird.
Method Detail

dropForward

public int dropForward(int anzahl)
Wenn in Blickrichtung eine absteigende Klippe ist (ohne Wand), dann legt er die angegebene Anzahl von Koernern auf dem Nachbarfeld ab, ansonsten legt er nichts ab. Um auf dem Nachbarfeld ablegen zu koennen, muss also ((lookForward() & WALLMASK) == CLIFFDOWN) den Wert true haben.
Der Hamster bleibt dabei auf seinem Feld. Den abgelegten Mais kann er nur wieder aufnehmen, indem er zu dem Nachbarfeld hinuntergeht.
Wenn er weniger hat als er ablegen will, legt er nur ab, was er hat. Wenn nicht alles aufs Feld passt, wird nur abgelegt, was draufpasst: Alle Felder ausser dem Heimatfeld haben nur Platz fuer ein Volumen von CORNFIELD_MAX Koernern.
Parameters:
anzahl - die Anzahl der abzulegenden Koerner
Returns:
die Anzahl der tatsaechlich abgelegten Koerner
See Also:
Constants.CORNFIELD_MAX, Constants.CLIFFDOWN, lookForward()

forward

public boolean forward()
Bewegt den Hamster um einen Schritt in der aktuellen Richtung vorwaerts.

Bei einer Kollision mit einer Wand (Constants.WALL) oder einer aufsteigenden Klippe (Constants.CLIFFUP) wird der Hamster einmal nach links gedreht und bleibt auf dem Feld.

Der Abschnitt ueber die Zeitbegrenzung aus der Beschreibung von Hamster.forward() gilt auch hier.

Overrides:
forward in class Hamster
Returns:
true, wenn Schritt ausgefuehrt werden konnte, sonst false (Kollision).

getHeightDifference

public int getHeightDifference()
Liefert die Hoehendifferenz zum Nachbarfeld. Ist eine Wand in Blickrichtung, so wird 0 geliefert. Liegt das Nachbarfeld z.B. 2 Sufen hoeher als das aktuelle Feld, so wird +2 geliefert, liegt das Nachbarfeld eine Stufe tiefer, wird -1 geliefert. Es gibt insgesamt 4 Hoehenstufen. Es ist dem Hamster nicht bekannt, auf welcher Stufe sich das Heimatfeld befindet.

03.02.2002: Dass der Hamster die Richtung angeben konnte, in die er blicken soll, war nicht beabsichtigt und der Parameter wurde entfernt. (Der Hamster weiss sowieso nicht, welche Richtungswerte er angeben sollte.)


lookForward

public int lookForward()
Liefert Informationen ueber das in Blickrichtung angrenzende Feld. Gibt an, ob auf dem Nachbarfeld Getreide ist, und ob in Blickrichtung eine Wand ist oder eine hoch- oder runtergehende Klippe oder Schraege. Wenn in Blickrichtung eine hochgehende Klippe oder hochgehende Schraege oder eine Wand ist, kann der Hamster nicht sehen, ob Getreide auf dem Nachbarfeld ist. Wenn in Blickrichtung ein ebener Weg, eine runtergehende Klippe oder eine runtergehende Schraege ist, kann er sehen, ob auf dem Nachbarfeld Getreide ist, aber nicht wieviel. (Hier war bis zum 16.02. ein Fehler drin, der verhinderte, dass der Hamster bei irgendwelchen Hoehenunterschieden aufs Nachbarfeld schauen konnte!)

Es kann sein, dass in zukuenftigen Versionen noch weitere Informationen zurueckgegeben werden, daher sollte man keinesfalls die Werte direkt vergleichen, sondern stets bitweise.

Overrides:
lookForward in class Hamster
Returns:
Eine bitweise oder-Kombination von Konstanten
See Also:
Constants.CORN, Constants.WALL, Constants.CLIFFDOWN, Constants.CLIFFUP, Constants.SLOPEDOWN, Constants.SLOPEUP