Gregor Antoine
Gregor.Antoine@hpg-speyer.de
GnuPG-Schlüssel  
(0E863611)


Informatik9-2

1. Hindernisse
2_KaeferFischFels.zip

In der Klasse für das Hindernis, hier Fels, muss gar nichts programmiert werden. Der Fels bewegt sich ja gar nicht. Aber der Käfer soll nicht auf das Feld mit dem Fels laufen können.
Schreibe in der Klasse Kaefer :
...

 if(Greenfoot.isKeyDown("up")) {
     move(1);
     Actor fels;
     fels = getOneObjectAtOffset(0, 0, Fels.class);
     if(fels != null) {
         move(-1);
     }
 }

Neu ist der Teil ab Actor fels;
So wie mit "int anzahl" eine Variable vom Typ Integer erzeugt wird um Zahlen zu speichern, habe wir jetzt mit "Actor fels" eine Variable vom Typ Actor um Greenfootobjekte wie den Fels zu speichern.
Zunächst wird mit getOneObjectAtOffset(0, 0, Fels.class) ein Fels gesucht, der auf dem selben Feld wie der Käfer steht. Wenn es einen solchen Fels gibt (die Variable ist ungleich null), muss der Käfer wieder einen Schritt zurück und ist im Endeffekt gar nicht gelaufen.

2. Kollisionen
3_KaeferFrisstFisch.zip

Der Käfer kann auch überprüfen, ob er mit dem Fisch zusammengestoßen ist. Um den Fisch dann "auffressen" zu können, braucht ihr in der Klasse Kaefer einen Verweis auf die Welt.

 World welt = getWorld();
 if(Greenfoot.isKeyDown("left")) {
     turn(-90);
 } else if(Greenfoot.isKeyDown("right")) {
     turn(90);
 } else if(Greenfoot.isKeyDown("up")) {
     move(1);
 }
 Actor fisch;
 fisch = getOneObjectAtOffset(0, 0, Fisch.class);
 if(fisch != null) {
     welt.removeObject(fisch);
 }

Neu sind sie erste Zeile World welt = getWorld(); die ihr bitte einfach so einfügt. und der Teil ab Actor fisch;
Wie oben wird zunächste ein Fisch gesucht, der auf dem selben Feld steht wie der Käfer. Wenn es einen solchen Fisch gibt (die Variable ist ungleich null) sagen wir der Welt, dass sie den Fisch entfernen soll. Er ist dann weg.