- Erstelle eine → Klasse
BarrikadeHamster mit einem → Konstruktor.
- Dem Konstruktor wird eine Variable vom Typ → boolean hinzu gefügt. Sie wird auf true gesetzt,
wenn der jeweilige Hamster auf seine Ausgangsposition zurückgesetzt wird.
boolean zurueck = false;
BarrikadeHamster(int reihe, int spalte, int blickrichtung, int koerner)
{
this.init(reihe, spalte, blickrichtung, koerner);
this.zurueck = false;
}
-
- Füge in der Klasse einen → Body ein.
public void run()
{
// maximale Schrittzahl
int maxZahl = 3;
while (this.vornFrei())
{
int anzahlSchritte = zufallsZahl(maxZahl);
// die aktuelle Spalte des Hamsters holen und sichern
// wird für die Rückkehr nch erfolglosen Würfeln gebraucht
int vorherigeSpalte = holeSpalte();
schritteVor(anzahlSchritte);
/*
zurueck -> true: Korn nicht mit einem Wurf getroffen, der Hamster muss auf die mit
holeSpalte() ermittelte Ausgangsposition (vorherigeSpalte) zurück
*/
if (zurueck)
{
this.geheZuSpalte(vorherigeSpalte);
this.setzeBlickRichtung(Hamster.OST);
}
zurueck = false;
}
}
- Du benötigst zunächst eine Prozedur schritteVor. Mit einer
→ Zufallszahl wird die Anzahl der Schritte ermittelt.
void schritteVor(int anzahlSchritte)
{
while (schrittZaehler > anzahlSchritte)
{
if (this.vornFrei()) this.vor();
schrittZaehler = schrittZaehler + 1;
/*
auf der aktuellen Position liegt ein Korn, es wurde aber mit dem Wurf nicht genau getroffen
schrittZaehler > anzahlSchritte
-> zurueck wird auf true gesetzt
-> der aktuelle Schleifendurchlauf wird mit break unterbrochen
*/
. . .
}
// auf der aktuellen Poition liegt ein Korn und die Variable zurueck hat den Wert false
if (this.kornDa() && !zurueck) this.nimm();
}
- Damit die Hamster auf ihre Ausgangsposition zurückkehren können,
musst du die Funktion → getSpalte() verwenden.
int holeSpalte()
{
// Ausgangsposition in Variable vorherigeSpalte sichern
int vorherigeSpalte = this.getSpalte();
return vorherigeSpalte;
}
-
Eine Prozedur geheZuSpalte() sorgt dafür, dass der jeweilige Hamster zur Ausgangsposition zurückkehrt.
void geheZuSpalte(int spalte)
{
if (spalte < this.getSpalte())
{
this.setzeBlickRichtung(Hamster.OST);
}
else
{
this.setzeBlickRichtung(Hamster.WEST);
}
while (spalte != this.getSpalte())
{
this.vor();
}
}
- In einer Prozedur → setzeBlickRichtung() muss der Hamster sich solange nach links drehen, bis er die im Programm geforderte Blickrichtung erreicht hat.