Wir wollen nun ein etwas komplexeres Beispiel anschauen. Sie finden das Programm auf dem Wiki. (durchfressen.sb2.zip)
Beschreibung
Die Katze (Scratch) soll den rechten Bildrand erreichen. Im Weg stehen die «cheesy-puffs», durch welche sich Scratch fressen muss. Scratch startet links, marschiert nach rechts zu den «cheesy-puffs», isst dort und marschiert zurück. Das wiederholt sich so lange bis kein Essen mehr da ist. Dann verschwinden die «cheesy-puffs» und Scratch kann den rechten Bildrand erreichen.
Vorbereitung
Folgende Vorbereitungen müssen getroffen werden
Nun können Skripte für die beiden Objekte erstellt werden:
Der Hauptakteur ist die Katze. Deshalb wird ihr Skript etwas umfangreicher:
when flag clicked
point in direction (90 v)
go to x:(-170) y:(-60)
repeat until <(x position) > [170]>
wait (0.1) secs
if <touching [Essen v]?> then
broadcast [essen]
think [fein...] for (1) secs
if <touching [Essen v]?> then
turn ccw (180) degrees
end
end
move (10) steps
next costume
if on edge, bounce
end
say [Ziel erreicht!! Yipee] for (5) secs
stop [all v]
In diesem Skript erkennt man sehr schön die hierarchische Strukturierung:
Auch das Essens-Objekt benötigt zwei Skripte.
when flag clicked
set [Essensvorrat v] to [5]
show
stop [this script v]
when I receive [essen v]
change [Essensvorrat v] by (-1)
if <(Essensvorrat) = [0]> then
hide
else
think (join [noch] (Essensvorrat)) for (2) secs
end
stop [this script v]
Im ersten Skript wird die Variable «Essensvorrat» auf den Startwert gestellt. Dann wird sichergestellt, dass beim Programmstart das eventuell noch versteckte Essens-Objekt angezeigt wird.
Das zweite Skript wird ausgeführt wenn die Katze die Meldung «essen» schickt. Das Essens-Objekt muss auf diese Meldung reagieren indem es den Essensvorrat verkleinert und falls der Essensvorrat 0 erreicht sich selbst ausblendet, so dass die Katze freie Bahn zum rechten Rand hat.