Aufgabe:
class RennHamster extends LaufHamster
{
RennHamster(int reihe, int spalte, int blickrichtung, int koerner)
{
super(reihe, spalte, Hamster.OST, 0);
}
. . . .
}
RennHamster paul = new RennHamster(0, 0, Hamster.OST, 0);
DummerHamster willi = new DummerHamster(1, 0, Hamster.OST, 0);
GedopterHamster karl = new GedopterHamster(2, 0, Hamster.OST, 0);
Aufgabe:
abstract class VierGewinntHamster extends AllesKoennerHamster
{
VierGewinntHamster(int reihe, int spalte, int blickrichtung, int koerner)
{
super(reihe, spalte, blickrichtung, koerner);
}
Mit den Methoden:
abstract void lege();
abstract int anzahlKoernerReihe(int anzahlKoerner);
}
Diesen Methoden werden nach den Pronzipien der → Polymorphie und
des → Dynamischen Bindens in den Klasse ZufallsHamster und
StrategieHamster verwendet.
void lege()
{
int position = 0;
Zufall zahl = new Zufall();
this.geheZuKachel(Territorium.getAnzahlReihen() - 1, . . .);
// der Hamster dreht sich in Richtung NORD
this.setzeBlickRichtung(Hamster.NORD);
// der Hamster geht solange vorwärts bis er auf eine leere Kachel trifft
int reihe = anzahlKoernerReihe(position);
this.gib();
// der Hamster hat die Reihe 0 erreicht und gewonnen
if (this.getReihe() == 0)
{
. . .
}
}
int anzahlKoernerReihe(int position)
{
. . .
}
void lege()
{
int reihe [] = new int [5];
// kornGegeben true -> Spalten müssen nicht erneut abgelaufen werden
boolean kornGegeben = false;
/*
alle Spalten abgehen und die Anzahl der Körner feststellen und
mit Hilfe der Funktion anzahlKoernerReihe in das Array reihe schreiben
*/
for (int zaehler = 0; zaehler < Territorium.getAnzahlSpalten(); zaehler ++)
{
this.geheZuKachel(. . .);
. . .
// 3 Körner in der Spalte -> gewonnen -> Methode lege sofort mit return verlassen
if (reihe[zaehler] == 3)
{
. . .
}
/*
keine Körner in der Spalte -> sofort legen
kornGegeben auf true setzen -> die Spalten müssen nicht erneut abgelaufen werden
*/
if (reihe[zaehler] == 0)
{
. . .
}
}
/*
kornGegeben false -> erneutes Ablaufen der Spalten -> gibt es eine Spalte mit 1 Korn?
kornGegeben auf true setzen-> die Spalten müssen nicht erneut abgelaufen werden
*/
if (!kornGegeben)
{
for (int zaehler = 0; zaehler < Territorium.getAnzahlSpalten(); zaehler ++)
{
this.geheZuKachel(. . .);
this.setzeBlickRichtung(Hamster.NORD);
if (reihe[zaehler] == 1)
{
. . .
}
}
}
/*
kornGegeben false -> erneutes Ablaufen der Spalten -> liegen überall 2 Körner?
kornGegeben auf true setzen-> die Spalten müssen nicht erneut abgelaufen werden
*/
if (!kornGegeben)
{
for (int zaehler = 0; zaehler < Territorium.getAnzahlSpalten(); zaehler ++)
{
this.geheZuKachel(. . .);
if (reihe[zaehler] == 2)
{
. . .
}
}
}
}