Document

1
Frosch-Welt analysieren und verwenden............................................................................1
1.1
Szenario öffnen...........................................................................................................1
1.2
Frosch-Welt bevölkern................................................................................................2
1.3
Frösche und Fliegen agieren lassen............................................................................2
1.4
Untersuchungen mit dem Inspector............................................................................3
1.5
Quellcode editieren.....................................................................................................4
2
Ein Szenario verändern oder erweitern...............................................................................6
2.1
Objekte einer weiteren Klasse hinzufügen.................................................................6
2.2
Auch Frösche können lernen – neue Methoden (mit und ohne Rückgabe)Algorithmik.............................................................................................................................6
2.2.1
Sequenzen - Methoden und Konstruktoren.........................................................6
2.2.2
Wiederholungen und Entscheidungen................................................................7
2.2.3
Variablen – Langzeit- und Kurzzeitgedächtnis...................................................8
2.2.4
Zählschleifen.......................................................................................................9
2.2.5
Methoden mit Parameter.....................................................................................9
2.3
Verwendung von Methoden der Klasse Greenfoot um Benutzerinteraktionen zu
ermöglichen..........................................................................................................................10
3
Eigene Szenarien erstellen................................................................................................12
Greenfoot
1 Frosch-Welt analysieren und verwenden
1.1 Szenario öffnen
Wählen Sie das Szenario „Frosch“ aus und öffnen Sie es.
Vorsicht beim Speichern: Vorsicht beim Speichern: Bei der standalone-Version wird der
gesamte Ordnername angezeigt.
24.08.2015
1
1.2 Frosch-Welt bevölkern
Falls nach dem Öffnen im Fenster noch keine Welt
zu sehen ist, kann man Sie aus zwei verschiedenen
Arten erzeugen: Durch Klicken auf die Schaltfläche
„Compile All“ oder indem man mit der rechten
Maustaste rechts auf „FroschWelt“ klickt und
anschließend „new FroschWelt()“ auswählt.
Um die Welt mit Fröschen zu bevölkern, klickt man
mit der rechten Maustaste auf „new Frosch()“ und
positioniert den Frosch dann irgendwo in der Welt.
Entsprechend können Fliegen erzeugt und in der Welt
positioniert werden.
Aufgabe 1:
Laden Sie das Szenario „FroschVorlageAufgabe1“.
Erzeugen Sie eine Welt und bevölkern Sie sie
entsprechend der folgenden Abbildung.
1.3 Frösche und Fliegen agieren lassen
Mit einen rechten Mausklick auf einen Frosch, kann man sich die Methoden anzeigen
lassen, die er ausführen kann.
24.08.2015
2
Dies sind die Methoden von Fröschen sowie die Methoden der Oberklassen Actor und
Object. (Denn Frösche sind spezielle (Objekte der Klasse) Actor und damit auch (der
Klasse) Object. Da alle Objekte der Klasse Actor z.B. über die Methode void
setLocation(int,int) verfügen, verfügt auch ein Frosch darüber.)
Aufgabe 2:
a) Laden Sie das Szenario „FroschVorlageAufgabe2“. Fragen Sie den Frosch in
der linken unteren Ecke, ob vor ihm ein freies Feld ist, lassen Sie ihn sich
nach links drehen, einen Schritt vorwärts hüpfen, und fragen Sie ihn, wie viel
Fliegen er gefressen hat. Anschließend soll er sich so drehen, dass er Richtung
Osten blickt. (Osten entspricht hierbei der Richtung 0). Danach soll er wieder
einen Schritt vorwärts hüpfen. Rufen Sie dazu jeweils die entsprechende
Methode des Froschs auf. Klicken Sie dazu mit der rechten Maustaste auf den
Frosch.
Achtung: Probleme kann es geben, wenn sich auf einem Feld zwei Akteure
befinden. Ggf. dann nur einer der Akteure mit Hilfe der rechten Maustaste
erreicht werden (wie hier die Fliege, auf der der Frosch sitzt).
(Vorrangregelung nach der Reihenfolge, in der die Objekte auf das Feld
gekommen sind!)
b) Klicken Sie drei mal hintereinander auf die Schaltfläche „Act“, anschließend
auf die Schaltfläche „Run“ und dann auf „Pause“.
1.4 Untersuchungen mit dem Inspector
Aufgabe 3:
Untersuchen Sie nachdem Sie Aufgabe 2 ausgeführt haben die Frösche und eineFliege,
indem Sie sie mit der rechten Maustaste anklicken und „Inspect“ auswählen. Ermitteln
Sie welcher Frosch am meisten Fliegen gefressen hat.
24.08.2015
3
Alle Frösche haben die gleichen Methoden und die gleichen Attribute. Lediglich die
Namen frosch, frosch 2,…und die Attributwerte sind unterschiedlich. Die
einzelnen Frosch-Objekte frosch, frosch 2, …gehören daher alle zur Klasse
Frosch.
Frosch
-richtung : int
-vertilgteFliegen: int
+act(): void
+dreheLinks(): void
+fliegeGefunden(): boolean
+frissFliege():void
+getAnzahlVertilgterFliegen(): int
+huepf(): void
+setzeRichtung(int): void
+vorneFrei(): boolean
(Die weiteren Attribute wurden hier nicht angegeben, weil sie von der Klasse Actor
geerbt wurden. – Die Fliegen haben diese Attribute ebenfalls von der Klasse Actor
geerbt.)
Aufgabe 4:
Öffnen Sie das Szenario Spinnen, übersetzen Sie es erneut (mit „Compile All“),
erzeugen Sie eine Spinne, untersuchen Sie sie und zeichnen Sie dann ein
Implementationsdiagramm der Klase Spinne.
Quelle für das Spinnenszenario:
http://bildungsserver.berlin-brandenburg.de/unterricht/faecher/mathematiknaturwissenschaften/informatik/material-inf/prog-sprachen/inf-pspr-bluej/infgreenfoot1/?L=0, abgerufen am 21.08.2015
1.5 Quellcode editieren
Mit einem Doppelklick auf eine Klasse öffnet sich der integrierte Java-Editor.
Einige Hinweise zur Arbeit mit Java:
Eine Java-Klasse hat in der Regel folgende Form:
import <benötigte Klassenbibliotheken>;
class <Klassenname> {
// Variablen für Objekte oder Daten:
// Objekte:
<public oder private> <Klassenname> <Objektname(n)>;
//Daten:
<public oder private> <Datentyp> <Variablenname>;
. . .
// Methoden:
<public oder private> void <Methodenname> (… ) {
//Aufrufe in der Form:
<objektname>.<methodenname(…)>;
//oder Zuweisungen der Form :
<Variablenname>=<Wert>;
//oder Erzeugung eines Objekts:
<Objektname>=new <Klassenname>();
24.08.2015
4
};
// Ende der Methode
...
} //Ende der Klasse
-
-
-
-
-
-
Programmblöcke, Methoden und Klassendefinitionen beginnen und enden mit
geschweiften Klammern {}. Einrückungen und Kommentare erleichtern das
Lesen. (/*<Kommentar>*/ oder //<Kommentar bis zum Zeilenende>)
Kommentare für die Dokumentation einer Methode werden mit
/ /**
* Kommentar
*/
vor die Methode geschrieben.
Groß- und Kleinschreibung beachten: Methodennamen und Attribute beginnen
in der Regel mit kleinem Buchstaben, Klassennamen mit großem Buchstaben.
In Klassendefinitionen werden zunächst die Variablen definiert, dann die
Methoden.
Am Anfang steht jeweils der Typ, z.B. int. void bedeutet dabei, dass die
Methode keinen Wert zurückgibt.
private kennzeichnet Variablen (Attribute) und Methoden, die nur innerhalb
dieser Klasse verwendet werden dürfen. public sind Methoden, die auch von
außen aufgerufen werden dürfen.
Soll eine Methode eines anderen Objekts aufgerufen werden, so steht dessen
Name vor dem Methodennamen. Zwischen Methodennamen und Objektnamen
steht ein Punkt. (<Objekt>.<Methode>(…);) Um eine eigene Methode des
Objekts aufzurufen, kann der Adressat entfallen oder this als Adressat der
Nachricht angegeben werden. Um eine Methode, die aus einer Oberklasse (z.B.
Actor) geerbt wurde auszuführen, kann man statt einem Adressat super oder
this, wenn die Methode in der Unterklasse nicht überschrieben (d.h. neu
geschrieben) wurde oder gar nichts.
Methodenaufrufe und Methodennamen enden immer mit runden Klammern ().
Ggf. steht in diesen Werte. In diesem Fall müssen bei der Definition der
Methode der Typ der Werte und Nanen für die Werte in den runden Klammern
angegeben werden. (z.B. public void setzeRichtung(int wohin){…})
Methodenaufrufe und Variablendeklarationen werden mit Semikolon
abgeschlossen.
Bevor ein verändertes Programm gestartet werden kann, muss es (am besten
mit „Compile All“) in Maschinensprache übersetzt werden. Wenn es
erfolgreich übersetzt werden konnte, sind die grauen Balken über den
Klassennamen verschwunden.
…
Aufgabe 5:
Öffnen Sie das Szenario „FroschVorlageAufgabe5“.
Editieren Sie die Klassen Frosch und FroschWelt.
a) Ändern Sie FroschWelt so ab, dass sie automatisch bevölkert wird (durch Aufruf
der Methode populate() nach dem Setzen des Hintergrundbildes). Ändern sie auch
die Methode populate() so, dass FroschFranz an Position (1,2) noch hinzukommt.
b) Wenn Frösche sich nach Westen drehen, stehen sie auf dem Kopf. Dies soll nun
verändert werden durch Spiegelung des Bildes, das den Frosch repräsentiert, an der
entsprechenden Stelle in der Methode setzeRichtung(…). Nutzen Sie dazu die
Dokumentation der Klassen Actor und GreenfootImage der Greenfoot Class
24.08.2015
5
Documentation (API, engl.: application programming interface). Diese erreicht man
über einen Klick mit der rechten Maustaste auf Actor und der Auswahl von „Open
Documentation“.
2 Ein Szenario verändern oder erweitern
2.1 Objekte einer weiteren Klasse hinzufügen
Aufgabe 6:
Erzeugen Sie eine neue Unterklasse der Klasse Actor, von Hindernissen, wie Blumen
oder Felsen, die den Fröschen im Weg stehen können. Dazu können Sie mit der rechten
Maustaste auf die Klasse Actor klicken, „New subclass…“ auswählen und
anschließend in dem sich öffnenden Fenster den neuen Klassennamen angeben sowie ein
passendes Bild auswählen. Klicken Sie anschließend „Compile all“ an, um auch die neue
Klasse in Maschinensprache übersetzen zu lassen, und positionieren Sie eines dieser
neuen Objekte in der Welt.
2.2
2.2.1
Auch Frösche können lernen – neue Methoden (mit und ohne
Rückgabe)- Algorithmik
Sequenzen - Methoden und Konstruktoren
Wenn ein Frosch wenden soll, muss er sich zweimal nach links drehen. Wenn das
zweimalige Drehen mehrfach verwendet werden soll, lohnt es sich für die Klasse Frosch
eine neue Methode
public void wenden( ) {
dreheLinks();
dreheLinks();
}
zu schreiben.
Die neue Methode kann dann in anderen Methoden aufgerufen werden, z.b. in der
Methode act():
public void act(){
24.08.2015
6
}
…
wenden();
…
Das Wort void besagt hierbei, dass die Methoden nur Aktionen ausführen, jedoch
keine Antwort geben.
Im Gegensatz dazu liefern die Methoden vorneFrei(), fliegeGefunden() und
getAnzahlVertilgterFliegen() der Klasse Frosch Antworten. Der Typ der
Rückgabe wird bei der Methodendeklaration angegeben: int ist eine ganze Zahl,
boolean ein Wahrheitswert (true oder false). In Methoden mit Rückgabewert
muss das Schlüsselwort return vorkommen, hinter dem der zurückzugebende Wert
bzw. die Variable, deren Wert zurückgegeben werden soll anzugeben ist.
Konstruktoren sind Methoden , die automatisch bei Erzeugung eines Objekts
ausgeführt werden und sonst nie. Man erkennt sie daran, dass ihr Name mit dem der
Klasse übereinstimmt und kein Rückgabetyp angegeben ist (auch nicht void). Z.B.
public Frosch(){
setzeRichtung(0);
vertilgteFliegen = 0;
}
Mit super(…); wird der Konstruktor
der Oberklasse aufgerufen.
Aufgabe 7:
a) Schreiben Sie die Methoden dreiSchritteVor() und zweiSchritteVor()
für die Klasse Frosch. Testen Sie die Methoden.
Gehen Sie zur Vereinfachung davon aus, dass kein Hindernis (wie das Ende der
FroschWelt) im Weg ist.
b) Ein zaghafter Frosch hüpft immer erst drei Schritte vor (in seine momentane
Blickrichtung), frisst dort ggf. eine Fliege und hüpft dann wieder zwei Schritte
zurück. Am Ende soll seine Blickrichtung wieder wie am Anfang sein. Schreiben
Sie eine entsprechende Methode dreiVorZweiZurueck(). (Verwenden sie
dazu auch die Methoden aus Teilaufgabe a) und die Methode wenden().)
Testen Sie die neue Methode.
Gehen sie wieder zur Vereinfachung davon aus, dass kein Hindernis im Weg ist.
c) Schreiben Sie für die Klasse Frosch die Methode boolean fliegeRechts()
Gehen Sie der Einfachheit halber dabei davon aus, dass der Frosch nach Osten
blickt. Sehen sie sich dazu insbesondere die Methode fliegeGefunden() und
die Dokumentation der darin verwendeten Methoden an.
2.2.2
Wiederholungen und Entscheidungen
Manchmal sollen die Frösche nur unter bestimmten Bedingungen etwas tun.
Umgangssprachlich
Java
Allgemeine Java-Syntax
if(vorneFrei()){
if(<Bedingung>){
Wenn du vorwärts hüpfen
huepf();
<Anweisungen>
kannst, hüpfe ein Feld
}
}
weiter, sonst drehe dich
else {
else {
nach links.
dreheLinks();
<Anweisungen>
}
}
(Diese Syntax haben Sie vermutlich auch schon für Aufgabe 7c) verwendet.)
Oft wiederholen Frösche etwas, solange eine bestimmte Bedingung erfüllt ist.
Umgangssprachlich
Java
Allgemeine Java-Syntax
while(fliegeRechts()){
while(<Bedingung>){
Hüpfe vorwärts, solange
24.08.2015
7
rechts neben dir eine Fliege
}
ist.
huepf();
}
<Anweisungen>
Bedingungen können auch verknüpft werden: Das Und-Zeichen & steht für „und“, der
senkrechte Strich | für das mathematische „oder“, das Ausrufungszeichen ! für „nicht“.
Die einzelnen zu verknüpfenden Bedingungen sollten dabei in runde Klammern gesetzt
werden.
Zur Fallunterscheidung von mehreren Fällen, kann eine Konstruktion aus mehreren
geschachtelten if-else-Verzweigungen verwendet werden.
Falls es dabei um unterschiedliche Werte einer Variablen vom Typ int oder char
(Zeichen) geht, kann stattdessen abkürzend eine switch-Anweisung verwendet werden:
Umgangssprachlich Java
Allgemeine Java-Syntax
switch(richtung)
{
switch(<Variable>) {
Falls die Richtung
case 3 :
case <Wert1> :
„Süden“ (also 3) ist,
setRotation(90);
<Anweisung>
drehe um 90°, falls
break;
break;
die Richtung
case 0 :
case <Wert2> :
setRotation(0);
<Anweisung>
„Osten“ (also 0)ist,
break;
break;
…
}
case 1 :
setRotation(270);
break;
case 2 :
setRotation(180);
break;
.. .
}
Aufgabe 8:
a) Erzeugen Sie eine Welt, die der folgenden Abbildung
entspricht. Ändern Sie die Methode act() der Klasse
Frosch so ab, dass der Frosch sich nach Osten dreht und
dann so lange geradeaus geht, bis rechts neben ihm keine
Fliege mehr ist. Anschließend soll er sich hinter die letzte
Fliege stellen, wenden, der Reihe nach alle Fliegen
vertilgen und sich wieder nach Osten wenden. Testen Sie
die Methode. (Tipp: Nutzen Sie die Möglichkeit mit Hilfe
der rechten Maustaste einen einzelnen Frosch die
Methode act() ausführen zu lassen.)
Gehen Sie zur Vereinfachung davon aus, dass kein
Hindernis im Weg ist.
b) Ändern Sie die Methode huepf() so ab, dass der Frosch wenn er vor einer Fliege sitzt
zunächst einen Salto schlägt, bevor er ein Feld weiter hüpft.
Tipp: Mit einem zusätzlichen Objekt der Klasse Greenfoot, das in dieser Methode
erzeugt wird, kann man die Zeit verzögern, so dass man den Frosch hüpfen sieht:
Greenfoot gf=new Greenfoot();
…
gf.delay(20);
2.2.3
Variablen – Langzeit- und Kurzzeitgedächtnis
Frösche haben ein Gedächtnis. Sie können sich zum Beispiel merken, wie viele Fliegen
sie gefressen haben. Die Anzahl ist in der Variable vertilgteFliegen gespeichert.
Variablen müssen deklariert werden, dazu wird ihr Typ angegeben und entschieden, ob
sie private oder public sind, z.B. private int vertilgteFliegen;
24.08.2015
8
Werden Variablen am Klassenanfang (vor den Methodendeklarationen) deklariert, so ist
sie (beziehungsweise der Wert der Variablen) in jeder Methode verfügbar. Man nennt sie
globale Variablen. Wird eine Variable dagegen in einer Methode deklariert, so ist sie
nur so lange verfügbar, wie die Methode ausgeführt wird. Sie wird lokale Variable
genannt.
Variablen können Werte zugewiesen bekommen, z.B. vertilgteFliegen=0; .Mit dem
Gleichheitszeichen wird hier ein Wert zugewiesen. Will man dagegen einen Wert mit
einem anderen vergleichen (zum Beispiel in einer Bedingung), so benötigt man zwei
Gleicheitszeichen. (z.B. if(vertilgteFliegen==5){…}).
Oft wird in Java abkürzend Variablendeklaration und die erste Wertbelegung
zusammengefasst z.B. int vertilgteFlien=0;
Mit vertilgteFliegen=vertilgteFliegen+1; wird der Wert um 1 erhöht. (Der neue
Wert ist der alte Wert plus 1). Kurzform in Java: vertilgteFliegen++;)
Aufgabe 9:
a) Ein Frosch, der schon 10 Fliegen gefressen hat, ist satt und frisst nichts mehr.
Ändern Sie die Methode frissFliege() so ab, dass der Frosch nur dann frisst, wenn er
noch keine 10 Fliegen gefressen hat.
b) Die Frösche sollen sich merken, wie viele Sprünge sie (insgesamt) bereits gehüpft
sind. Die Anzahl soll mit Hilfe einer Methode gehuepfteSpruenge() erfragt werden
können.
2.2.4
Zählschleifen
Wenn man weiß, wie oft etwas ausgeführt werden soll, kann man auch Zählschleifen
verwenden: Mit
for(int i=0;i<7;i=i+1){
huepf();
}
huepf() sieben mal wiederholt.
wird
Hierbei wird die Variable i nur für Zählschleife deklariert und steht danach nicht mehr
zur Verfügung. Im Anweisungsteil der Schleife könnte sie allerdings verwendet werden.
Aufgabe 10:
Schreiben Sie die Methode rechteck(), mit der ein Frosch im Rechteck hüpft: drei
Felder vor, vier Felder hoch,…
Gehen sie wieder zur Vereinfachung davon aus, dass kein Hindernis im Weg ist.
Tipp: Mit einem zusätzlichen Objekt der Klasse Greenfoot, das in dieser Methode
erzeugt wird, kann man die Zeit verzögern, so dass man den Frosch hüpfen sieht:
Greenfoot gf=new Greenfoot();
…
gf.delay(20);
2.2.5
Methoden mit Parameter
Variablen sind auch hilfreich, wenn Methoden mit verschiedenen Werten ausgeführbar
sein sollen.
Beispielsweise gibt es in der Klasse Frosch eine Methode void setzeRichtung(int
wohin). Wenn man sie (via rechten Mausklick auf den entsprechenden Frosch) ausführen
möchte, erscheint ein Fenster, in dem ein Wert für wohin (0 für Ost, 1 für Nord, 2 für
West und 3 für Süd) eingegeben werden soll.
24.08.2015
9
Entsprechend muss auch bei einem Methodenaufruf dieser Methode innerhalb einer
Methode in den runden Klammern ein Wert oder einer Variable, die mit dem Wert
belegt ist, angegeben werden. (Z.B. setzeRichtung(richtung+1);).
Ein anderes Beispiel ist die Methode removeObject(Actor object) der Klasse World.
Wenn man sie nutzt, muss in der runden Klammer der Name des Actors angegeben
werden, der beseitigt werden soll.
Wenn man eine Methode mit Parameter aufruft, wird in der runden Klammer nur der
Wert angegeben bzw. eine Variable, die diesen Wert hat. (z.B. in einer Methode der
Klasse FroschWelt: remove(froschFridolin); )
Wird dagegen eine Methode mit Parameter (neu) implementiert, so muss zusätzlich der
Typ des Parametrs (z.B. int oder Actor) angegeben werden. (z.B. void
setzeRichtung(int wohin){…}.)
Aufgabe 11:
Schreiben Sie eine Methode, mit der ein Frosch x Schritte vorwärts laufen kann, falls
keine Wand im Weg ist und testen Sie sie durch einen geeigneten Aufruf in der Methode
act(). (Falls eine Wand im Weg ist, also der Frosch aus der Welt laufen würde, soll er
nur so viele Schritte wie möglich machen.)
2.3 Verwendung von Methoden der Klasse Greenfoot um
Benutzerinteraktionen zu ermöglichen
Oft sind Reaktionen auf Benutzereingaben erwünscht, zum Beispiel, dass alle Fliegen nach
rechts fliegen, solange der Benutzer/die Benutzerin die Pfeiltaste nach rechts drückt. Hierfür
stellt die Klasse Greenfoot Methoden zur Verfügung.
Um die Methoden verwenden zu können, wurde in der Klasse Fliege des Szenarios
FliegeFliegen1 ein Objekt der Klasse Greenfoot deklariert und im Konstruktor (der Klasse
Fliege) erzeugt, um es anschließend in der Methode act() (der Klasse Fliege) zu
verwenden:
public class Fliege extends Actor
{private int richtung; //ost=0,nord=1,west=2,süd=3
private Greenfoot gf;
public Fliege(){
setzeRichtung(0);
gf=new Greenfoot();
}
24.08.2015
10
public void act(){
if(gf.isKeyDown("left")){
setzeRichtung(2);
flieg();
}
else if (gf.isKeyDown("right")){
setzeRichtung(0);
flieg();
}
else if (gf.isKeyDown("down")){
setzeRichtung(3);
flieg();
}
else if (gf.isKeyDown("up")){
setzeRichtung(1);
flieg();
}
}
...
}
Da es sich bei der Methode isKeyDown (String keyname) der Klasse Greenfoot um eine
statische Methode handelt (was man am Schlüsselwort static erkennt), ist es auch möglich
die Methode direkt z.B. mit Greenfoot.isKeyDown(„up“); als Klassenmethode aufzurufen,
ohne ein Objekt dieser Klasse zu erzeugen. (s. Szenario FliegeFliegen2).
Aufgabe 12:
Öffnen Sie das Szenario „FroschVorlageAufgabe12“. Hier läuft ein Frosch in der untersten
Zeile hin und her. Ändern Sie seine Methode huepfHinUndHer() so ab, dass er nach oben
springt, wenn die „j“-Taste (für „jump“)gedrückt ist, andernfalls wieder auf den Boden fällt
bzw. falls er noch oder schon wieder am Boden ist, weiter hin und her hüpft.
Tipps: Bei mittlerer Geschwindigkeit funktioniert das Szenario am Besten. Verwenden Sie
Bedingungen, keine Schleifen. (Die Wiederholungen entstehen durch die wiederholte
Ausführung der Methode, dadurch, dass sie in der Methode act() aufgerufen wird.)
3 Eigene Szenarien erstellen
1.) Neues Szenario anlegen
Ein neues Szenario legt sich fast von selbst an:
Im Hauptmenü auf „Scenario“ „New… „ klicken, dann einen neuen Szenarionamen
eingeben und auf „Create“ klicken.
24.08.2015
11
Schon ist ein neues Szenario entstanden.
2.) Neue Welt implementieren
Mit der rechten Maustaste kann man rechts auf die Klasse World klicken und einen neue
Unterklasse anlegen. Sie muss einen Namen bekommen, der in dem Textfeld, in dem
fenster, das erscheint, einzutragen ist. Außerdem kann man in diesem Fenster einen
Hintergrund auswählen. Der Hintergrund kann stattdessen oder zusätzlich auch mit
Grafikmethoden der Klasse GreenfootImage erstellt werden, z.B.:
GreenfootImage bg=getBackground();
bg.setColor(Color.BLUE);
bg.fill();
bg.setColor(Color.BLACK);
for (int i=0; i<10; i++)
{bg.drawLine(i*60,0,i*60,10*60);
bg.drawLine(0,i*60,10*60, i*60);
}
Die Größe der einzelnen Felder und der gesamten Welt lässt sich durch den Aufruf des
Konstruktors der Oberklasse World festlegen: super(10, 10, 60);
Hier wird ein Feld mit 10 mal 10 Feldern der Größe 60x60 Pixel angelegt.
3.) Aktoren implementieren
Dies wurde schon in II beschrieben. Wenn ein selbst erstelltes Bild verwendet werden
soll, speichert man die entsprechende jpg- oder gif-Datei im Unterordner image des
Szenario-Ordners im Ordner Szenarien oder klickt in dem Fenster, das zur Erstellung
einer Unterklasse erscheint „Browse for more images“. Nachträglich kann man das
Aussehen mit der Methode setImage(…) ändern.
Hierbei ist genau zu überlegen, welche Unterklassen der Klasse Actor benötigt werden.
Insbesondere wird bei einem Klick auf „Act“ die Methode act() jedes Objekts in der
Welt ausgeführt. Wenn einige Objekte auf diesen Klick in irgendeiner Art und Weise
agieren sollen und andere nicht oder anders, sind zwei verschiedene Klassen notwendig,
die sich (u.a.) in der Methode act() unterscheiden.
Aufgabe 13:
Erstellen Sie ein neues Szenario „boats“ (s. Abbildung). Nutzen Sie dafür die Verfügung
stehenden Bilddateien „shoe.jpg“ und „boat.jpg“, sowie das Bild „lighthouse“ der GreenfootGallery.
24.08.2015
12
Ein mögliches Implementationsdiagramm für diese Szenario ist:
W o rld
Sea
ra n d o m ize r: R a n d o m
S e a (...)
p o p u la te (...)
ra n d o m S h o e s (...)
A c to r
L ig h tH o u s e
a c t(...)
S a ilin g B o a t
E A S T : in t
W E S T : in t
N O R T H : in t
S O U T H : in t
d ire c tio n : in t
s h o e s F is h e d : in t
S ho e
a c t(...)
S a ilin g B o a t(...)
a c t(...)
fo u n d S h o e (...)
fis h S h o e (...)
m o v e (...)
c a n M o v e (...)
tu rn R a n d o m (...)
tu rn L e ft(...)
s e tD ire c tio n (...)
g e tS h o e s F is h e d (...)
24.08.2015
13
Quellen:
http://www.greenfoot.org/ abgerufen am 21.08.2015
Greenfoot Szenarien: http://www.greenfoot.org/scenarios/ und http://greenfootgallery.org/,
jeweils abgerufen am 21.08.2015
Greenfoot Tutorials: http://www.greenfoot.org/doc, abgerufen am 21.08.2015
Mathias Müller, Ralf Punkenburg bzw. Jürgen Frank (redaktionell): Anfangsuntericht mit
Greenfoot, Landesinstitut für Schule und Medien Berlin-Brandenburg (LISUM),
Ludwigsfelde-Struveshof, 2007:
http://bildungsserver.berlin-brandenburg.de/inf_greenfoot1.html, abgerufen am 21.08.2015
Michael Kölling: Introduction to Programming with Grennfoot, Pearson-Verlag, New Jersey
2010
Michael Kölling: Einführung in Java mit Greenfoot: Spielerische Programmierung mit Java,
Pearson-Verlag, Juni 2010
Kempe, Löhr, Tepaße:Informatik - Lehrwerk für die gymnasiale Oberstufe - Neubearbeitung:
Schülerband 1: Einführungsphase, Schöningh-Verlag 2014
24.08.2015
14