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);
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) { . . . } } } }