next up previous contents index
Next: ,,... daß sein ganzes Up: Schritt für Schritt ins Previous: Spielen und Erkennen: Neue

Subsections


Allerlei Dämonen

Dämonen (daemons) heißen in UNIX-Betriebssystemen Dienstprogramme, die unabhängig von Aktionen des Benutzers im Hintergrund laufen. Zu den bekanntesten gehört der cron-daemon, der dafür sorgt, Programme in bestimmten Zeitabständen auszuführen.

Ausführung eines Dämons bei jedem Spielzug

Inform ermöglicht es, für jedes Objekt einen eigenen Dämonen zu schreiben: nämlich als eine Routine in der property daemon des Objekts. Diese Routine wird mit dem Befehl StartDaemon(Objekt); gestartet; sie läuft dann bei jedem Spielzug einmal ab, bis sie mit StopDaemon(Objekt); wieder schlafen gelegt wird. Ein solcher Dämon des Objekts Eva sorgt etwa dafür, dass Eva der Spielerfigur Adam im ganzen Bereich des Gartens (d.h. dort, wo Gras wächst wie oben 2.5 beschrieben) nicht von der Seite weicht:

daemon [;  

    if (Eva notin parent(player))

        if (Gras in parent(player)) 

        {

            

            if (Eva in Gras)

            {

                move Eva to parent(player);

                "Auch Eva steht von der Wiese auf.";

            }

            else

            if (parent(Eva) ofclass Wasser)

            {

                move Eva to parent(player);

                "Auch Eva kommt aus dem Wasser.";

            }

            else

            {

                move Eva to parent(player);

                "Eva folgt dir nach.";

            }

        }

        else

        {    

            if (player in Gras)

            {

                move Eva to Gras;

                "Eva legt sich zu dir ins Gras.";

            }

            if (parent(player) ofclass Wasser)

            {

                move Eva to parent(player);

                print_ret "Auch Eva steigt in ", (den)

                    parent(player),".";

            }

                    

        }

  ],

  

Weitere Dämonen sorgen dafür, dass der Apfel nicht einfach liegengelassen werden kann und (in Verbindung mit einem Zähler und einer switch-Anweisung) für die sich über mehrere Züge erstreckenden Verhaltensfolgen der Schlange und des Yehova-Objekts.

Ich spüre deine Nähe ...

Besonders praktisch ist ein Dämon, der automatisch startet, wenn der Spieler in die Nähe des Objekts kommt und ebenso automatisch wieder anhält, wenn er sich entfernt hat. Dafür ist die property each_turn vorgesehen. Eine dort enthaltene Routine wird bei jedem Zug ausgeführt, falls das Objekt in Sichtweite (scope) des Spielers ist. Wir haben diesen Mechanismus schon in 2.7.2 dazu eingesetzt, bei jedem Zug die Gartentüre auf die richtige Seite zu bringen. Man kann damit aber mehr machen, z.B. eine unwiderstehlich impertinente Versuchung programmieren:

each_turn [;

    if ((Apfel in Eva) && (Eva has erkenntnis))

       "^Eva hält in ihrer Hand den Apfel vom

        Baum der Erkenntnis. Sie bietet ihn dir an: ~Iss auch du

        von dem Apfel! Wir werden wie ER sein und Gut und Böse

        unterscheiden können!~";

],

Diese property des Objekts Eva sorgt dafür, dass Eva dem Spieler bei jedem Zug den Apfel anbietet, solange Eva in Sichtweite der Spielerfigur ist.

,,Und da die sieben Tage vergangen waren ...''

Eine weitere Unterart der Dämonen ist der Timer. Er zählt von einem Anfangswert bei jedem Zug um 1 herunter und führt die mit ihm verbundene Routine des Objekts (enthalten in der property time_out) genau einmal aus, nämlich wenn er abgelaufen ist. Ein Timer sorgt z.B. dafür, dass Eva sich unaufhaltbar zur Schlange hingezogen fühlt:

time_out [;

    if (Eva notin Mitte)

    {

        move Eva to Mitte;

        print "Eva wird plötzlich unruhig. Ihr Blick wirkt nach

           innen gekehrt, als lausche sie einer Stimme, die nur

           sie hören kann.^^

           Schließlich entfernt sie sich mit großen Schritten

           zur Mitte des Gartens hin.^";

    }

],

Dieser Timer muss nicht unbedingt im Objekt Eva eingebaut sein. Da es sich ja eigentlich um die magische Anziehungskraft der Schlange handelt, habe ich ihn in das Objekt Schlange gesetzt. Gestartet wird er also mit dem Befehl StartTimer(Schlange,13); und zwar bereits bei Evas Erschaffung. Er schlägt nach 13 Zügen zu und holt Eva zur Schlange in die Mitte des Gartens.36 Während er läuft, kann die Autorin den Stand in Schlange.time_left nachsehen. Ein laufender Timer kann mit StopTimer(Objekt); auch wieder angehalten werden.



Footnotes

...36
Das eigentliche ,,Verführungswerk'' erledigt die Schlange dann standesgemäß mit ihrem Dämon. Ihr Dämon sorgt anschließend auch dafür, dass sie sich (samt Dämon) selbst aus dem Spiel entfernt.

next up previous contents index
Next: ,,... daß sein ganzes Up: Schritt für Schritt ins Previous: Spielen und Erkennen: Neue
Frank Borger
2003-05-02