Münzen sammeln
Das Ziel
Es gibt etwas zu holen: Münzen, einen Punktestand und einen Ton beim Einsammeln.
So sieht das aus
Wie es gemacht ist
Berührungen
Muenze m = this.getTouchingSprite(Muenze.class);
if (m != null) {
m.einsammeln();
this.playSound("muenze");
spiel.punkten();
}
getTouchingSprite liefert das berührte Objekt zurück – oder null, wenn gerade
keines berührt wird. Deshalb die Abfrage: Ohne sie stürzt das Programm bei der ersten
Bewegung ab, weil man einsammeln auf einem Nichts aufrufen würde.
null heißt: hier ist kein Objekt. Jede Methode, die ein Objekt zurückgeben kann,
kann auch null liefern – und jedes Mal muss man damit rechnen. Der Fehler, das zu
vergessen, hat einen eigenen Namen: NullPointerException.
Wer macht was
Die Münze weiß, wie sie verschwindet (einsammeln). Das Spiel weiß, wie gezählt wird
(punkten). Bugs stellt nur fest, dass er etwas berührt, und sagt beiden Bescheid.
Jede Klasse kümmert sich um ihre eigenen Daten – das ist der Kern der
objektorientierten Programmierung.
Die eingesammelte Münze wird nur versteckt. Wandert sie links aus dem Bild, taucht sie
rechts auf zufälliger Höhe wieder auf und wird mit show() wieder sichtbar.
Deine Aufgabe
a) Sammle ein paar Münzen ein. Steigt der Punktestand? Wird das Spiel schneller?
b) Bau eine zweite Münzsorte ein, die mehr zählt – zum Beispiel coin_silver mit
drei Punkten. Tipp: punkten darf einen Parameter bekommen.
c) Lass die Münzen sich drehen: Sie sollen zwischen zwei Kostümen wechseln.
d) Zeig zusätzlich an, wie viele Münzen es insgesamt schon gab.
Tipp: Punkte mit Parameter
public void punkten(int wert) {
punkte = punkte + wert;
}
Der Aufruf heißt dann spiel.punkten(3);. Damit die Münze weiß, wie viel sie wert
ist, bekommt sie ein Attribut wert, das im Konstruktor gesetzt wird.