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


Informatik9-4

Was hier steht, muss nicht systematisch in eure Programme eingebaut werden. Es handelt sich viel mehr um ein paar Ideen, was man noch machen könnte.


PaintOrder

Manchmal befinden sich mehrere Objekte auf dem selben Feld. Wenn ich mir vorstelle, dass der Käfer über den Stein krabbelt, sieht es aber seltsam aus, wenn statt dessen der Stein über dem Käfer gezeichnet wird. Das kann ich in der meiner Welt (z.B. Level1 oder Level2) einstellen:

 super(10, 8, 60); 
 setPaintOrder(Kaefer.class, Fisch.class, Fels.class);
 Greenfoot.setSpeed(30);       

So wird die Reihenfolge beim Zeichnen festgelegt. Der Fels ist ganz unten, darüber der Fisch und ganz oben der Käfer.


Unterschiedliche Geschwindigkeiten

Die Einstellungen für die Geschwindigkeit können in jedem Level unterschiedlich sein. So kann man durch Steigerung der Geschwindigkeit die Schwierigkeit erhöhen. Z.B.
in Level1

 super(10, 8, 60); 
 Greenfoot.setSpeed(30);       

in Level2

 super(10, 8, 60); 
 Greenfoot.setSpeed(25);       

Portal in eine neue Welt

Vielleicht soll der Käfer nicht sofort in eine neues Level springen, wenn er alle Fische gefressen hat, sondern erst noch zur Sonnenblume laufen müssen.

 Actor fisch;
 fisch = getOneObjectAtOffset(0, 0, Fisch.class);
 if(fisch != null) {
     welt.removeObject(fisch);
 }
 Actor blume;
 blume = getOneObjectAtOffset(0, 0, Blume.class);
 if(blume != null) {
     if(welt.getObjects(Fisch.class).size() == 0) {
         if(welt instanceof Level1) {
             Greenfoot.setWorld(new Level2());
         } else if(welt instanceof Level2) {
             Greenfoot.setWorld(new Ende());
         } 
     }
 }

Der erste Teil ist unabhängig vom zweiten Teil.

Wenn der Käfer einen Fisch trifft, frisst er ihn.

Wenn der Käfer auf die Blume trifft, überprüft er, ob noch Fische übrig sind. Nur wenn die Zahl der Fische in der Welt gleich 0 ist, springt er ins nächste Level.


Komplexe Aufgaben

Der Käfer soll zuerst die Blume einsammeln, dann die Erbse, dann den Hut. Erste wenn er alles in dieser Reihenfolge abgearbeitet hat, springt er ins nächste Level.

 Actor blume;
 blume = getOneObjectAtOffset(0, 0, Blume.class);
 if(blume != null) {
     welt.removeObject(blume);
 }
 Actor erbse;
 erbse = getOneObjectAtOffset(0, 0, Erbse.class);
 if(erbse != null) {
     if(welt.getObjects(Blume.class).size() == 0) {
         welt.removeObject(erbse);
     }
 }
 Actor hut;
 hut = getOneObjectAtOffset(0, 0, Hut.class);
 if(hut != null) {
     if(welt.getObjects(Erbse.class).size() == 0) {
         if(welt instanceof Level1) {
             Greenfoot.setWorld(new Level2());
         } else if(welt instanceof Level2) {
             Greenfoot.setWorld(new Ende());
         } 
     }
 }

Die Blume verschwindet immer, wenn der Käfer sie erreicht hat. Die Erbse verschwindet nur, wenn es keine Blume mehr gibt. Also muss der Käfer sie zuvor eingesammelt haben. Wenn er den Hut erreicht hat, springt er nur dann ins neue Level, wenn es keine Erbse mehr gibt. Woher der Käfer wohl weiß, dass er alles in dieser Reihenfolge machen soll?


Feinde

Der Käfer hat auch Feinde. Wenn er von der Kuh gefressen wird, muss er wieder im Level1 anfangen.

 Actor kuh;
 kuh = getOneObjectAtOffset(0, 0, Kuh.class);
 if(kuh != null) {
     javax.swing.JOptionPane.showMessageDialog(null, "Fange nochmal von vorne an.");
     Greenfoot.setWorld(new Level1());
 }

Mit der rot markierten Zeile geht ein kleines Fenster mir der Meldung auf. Dann springt der Käfer in Level1.