Ergänzungen

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?

In welcher Klasse wird ein neuer Ball erzeugt, welche Methode muss man benutzen?

Erstelle in der Klasse Spielfeld eine neue Methode act().

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.