Inhaltsverzeichnis

Ergänzungen & Erweiterungen

Bälle erzeugen

Du hast dich sicherlich geärgert, dass jedes Mal, wenn dein Ball verschwindet, du umständlich einen neuen Ball erzeugen musst. Wie wäre es, wenn bei Betätigen z.B. der Leertaste ein neuer Ball erzeugt würde?

Der Quellcode lautet:

public void act() {
    if (Greenfoot.isKeyDown("space")) {
        Ball ball = new Ball();
        addObject(ball, 320, 240);
    }
}

Kannst du erklären, was hier passiert? Benutze die Klassendokumentation von Greenfoot.

Leider entstehen jetzt immer viele Bälle, besonders wenn du die Leertaste lange gedrückt hältst - es sollte nur dann ein Ball erzeugt werden, wenn es auf dem Spielfeld keinen weiteren gibt.

Die World-Methode getObjects(java.lang.Class cls) liefert eine Liste aller vorhan­denen Objekte einer bestimmten Klasse. Du musst nur prüfen, ob diese Liste noch kei­ne Einträge hat. Die Anzahl der Listenelemente liefert die Methode size(). Ergänze dazu die Bedingung in act():

if (Greenfoot.isKeyDown("space") && 
       getObjects(Ball.class).size() == 0) {
    ...
}

Übersetze das Programm und überprüfe deine Änderungen.

Spielfeld füllen

Auch das Füllen des Spielfeldes ist mühsam. Diese Aufgabe könnte doch die Klasse Spielfeld selbst erledigen?

Erstelle in der Klasse Spielfeld eine Methode fuellen(). Bei Aufruf von fuellen() sollen am oberen Spielfeldrand mehrere Reihen (z.B. drei Rei­hen) von nebeneinander liegenden Blöcken erzeugt werden.

Hinweis: Das Spielfeld ist 640 x 480 Pixel groß. Ein Block hat die Abmessungen 30 x 15 Pixel. Lässt man jeweils zwischen zwei Blöcken 5 Pixel Platz, passen genau 16 Blöcke in eine Reihe. Bei diesen Werten macht es sich gut, wenn du den ersten Block an die Position (20, 10) platziert. Verwende zwei ineinander geschachtelte for-Schleifen zum Erzeugen von 3 Reihen mit jeweils 16 Blöcken (vgl. Roboter AB-10):

Wiederhole für y von 0 bis 2
    Wiederhole für x von 0 bis 15
        Erzeuge ein neues Block-Objekt
        Füge das Block-Objekt an der Stelle (20+x*35|15+y*15) ein

Außerdem soll automatisch ein Paddel erzeugt werden. Was hältst du von der Position (320, 460)?

Rufe die Methode fuellen() im Konstruktor von Spielfeld statt der Methode prepare() auf.

Erweiterungsideen

Jetzt macht es Sinn, am Ende des Spiels eine Meldung auszugeben, ob das Spiel gewon­nen wurde (alle Blöcke sind abgeräumt und ein Ball ist noch im Spiel) oder verloren (es gibt noch Blöcke und alle drei Bälle sind verloren).