Beispiel

Wir wollen nun ein etwas komplexeres Beispiel anschauen. Sie finden das Programm auf dem Wiki. (durchfressen.sb2.zip)

Screenshot des Beispiel-Programmes

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

  • Hintergrund wählen
  • 2 Objekte einfügen und positionieren
    • «Scratch»
    • «Cheesy-puffs»
  • Variable «Essensvorrat» erstellen
    • Gehört zum Objekt «cheesy-puffs»

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]
Skript für Objekt Katze

In diesem Skript erkennt man sehr schön die hierarchische Strukturierung:

  • Ganz zu Beginn wird Position und Ausrichtung der Katze festgelegt.
  • Dann folgt der Hauptteil des Programms im Wiederhol-Block. Hier, wo der eigentliche Spielablauf stattfindet, wird für jeden Schritt überprüft, ob die Katze beim Essen angekommen ist; und wenn sie gegessen hat, ob nun der Weg frei ist.
  • Sobald das Ziel, also der rechte Rand, erreicht ist, wird der Wiederhol-Block nicht mehr ausgeführt und die Katze freut sich darüber angekommen zu sein.

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]
Skripte für Objekt Essen

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.