IF-Forum

» IF-Forum - Autorencafé - Schreiben! - "Wege" in inform 6?
AntwortenNeues ThemaNeue Umfrage

"Wege" in inform 6?

Geschrieben um 21:26 am 08.04.2010 | Zitat | Editieren | Löschen
C++
Mitglied
Bachelor Gumby
Beiträge: 40

Hallo zusammen,

in den Ferien kann ich immer mal ein wenig daran arbeiten, von TAG auf inform 6 umzustellen, vor allem, weil es Möglichkeiten bietet, die bei TAG (noch) nicht entdeckt habe. Jedoch stoße ich immer wieder an Grenzen, vielleicht weil ich im Programmier-Englisch nicht so bewandert bin und IBG und DM4 nur schleppend durcharbeite.

Meine Frage, die ich so weder im Forum noch in den Tutorial-Adventures noch im DM4 beantwortet finde: Kann man wie in TAG "Wege" definieren, also Objekte, die den Player je nach eingegebener Richtung zu dem einen oder dem anderen Raum-Objekt transportieren UND dabei einen Text ausgeben? Etwa so:

Zitat:

WALDRAND

Du stehst am Rand des Schattenwalds. Ein Weg führt nach Norden hinein.

n

Vorsichtig folgst du dem Pfad und fragst dich, ob die vielfältigen Geräusche nur natürlichen Ursprungs sind... Nach einer halben Stunde gelangst du an eine Lichtung

LICHTUNG

Du stehst auf einer Waldlichtung. In der Mitte befindet ich ein Haus aus Lebkuchen.

...

Objekte mit dem door-Attribut und den entsprechenden Properties leisten den Transport, aber die Routine mit der Fallunterscheidung bei door_dir und door_to kann offenbar nur Variablen zurückgeben (return n_to) aber keine Texte ausgeben (print "Du gehst vorsichtig durch den Wald nach Norden."). Wenn in dieser Fallunterscheidung die Location mittels "move player to lichtung" zu ändern, wird erstens die Raumbeschreibung unterschlagen und zweitens ist keine weitere Bewegung von der Lichtung möglich, weil diese offenbar als Sitzfläche o.ä. angesehen wird ("Solange du noch in der Lichtung bist, kannst du nicht nach Osten gehen...")

Wenn ich versuche, das Problem über eine Routine bei der Richtungsangabe in der Objektdefinition von WALDRAND zu lösen, werden für mich nicht verständliche Zahlenwerte (-15336 oder so ähnlich) ausgegeben.

Ich glaube, was mir fehlt, ist eine Möglichkeit, die gewählte Richtung als Variable an das nächste Objekt (was ich als "Weg" bezeichne) zu übergeben. Gibt es eine globale Variable (analog aRitg bei TAG) , auf der die Richtung steht?

Es wär schön, wenn mir jemand helfen könnte. Bis dahin wird der halbstündige Weg durch den Wald halt recht kurz angehandelt.

Schöne Grüße,

Christof

Geschrieben um 22:12 am 08.04.2010 | Zitat | Editieren | Löschen
Mischa
Mitglied
Master Gumby
Beiträge: 107

Hallo erstmal... :-)

Ich habe dein Problem in meinem Textadventure folgendermaßen gelöst:

1) der Ausgangsraum bekommt über den Kompass den Zielraum zugewiesen (in deinem Fall im "Object Waldrand" ein "n_to Lichtung"

2) der Zielraum bekommt über after bei Go mit dem noun n_obj de Text zugewiesen, den du vor der Raumbeschreibung haben willst (also "Object Lichtung": after [; Go: if (noun == n_obj) print "Vorsichtig folgst du...";]

Beim Zielraum ist das Print wichtig, da sonst die Raumbeschreibung unterdrückt wird.

Geschrieben um 23:55 am 08.04.2010 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Hallo!

Du könntest auch beim Ausgangsraum die Richtung als Routine definieren, was dem Weg-Konzept aus T.A.G. ähnelt. Inform 6 ist schmerzfrei was Datentypen angeht:

with n_to [; print "Vorsichtigt folgst du ... ^"; return Lichtung; ],

Wichtig ist, dass die Routine den Zielraum zurückgibt.

Geschrieben um 16:24 am 09.04.2010 | Zitat | Editieren | Löschen
C++
Mitglied
Bachelor Gumby
Beiträge: 40

Vielen Dank euch beiden!

Ich werde die Tipps gleich mal ausprobieren, der Sicherheit halber beide. Christians Lösung scheint mir einfacher zu sein, aber die andere Methode ist mglw. in anderem Kontext angebracht. Ich bin ja noch in der Test- und Übungsphase...

Tatsächlich hatte ich den Unterschied von n_to und n_obj zwar verstanden, aber noch nicht aktiv auf dem Zettel und immer eine falsche Bedingung in meiner Fallunterscheidung.

Nochmals danke und schöne Grüße!

Christof

PS: Gibt es nun eine Variable, auf der die aktuelle Richtung (evtl. auch über die Go-Aktion hinaus) abgelegt wird, oder ist das immer noun?

Geschrieben um 16:50 am 09.04.2010 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

C++:

Gibt es nun eine Variable, auf der die aktuelle Richtung (evtl. auch über die Go-Aktion hinaus) abgelegt wird, oder ist das immer noun?

Eine Richtungsvariable wie aRitg in T.A.G. gibt es in Inform nicht. Wenn der Spieler schreibt >gehe nach norden ist das erste Objekt des Satzes (noun) der Norden (n_obj). Wenn Du diese Information auch nach dem aktuellen Zug noch brauchst, musst Du die Richtung in einer Variable hinterlegen.

Eine Möglichkeit wäre Folgendes:



Class Room

  with react_after [; Go: if (noun) current_direction = noun; ],

    has light;```

Nach jedem Gehen in einem Raum der Klasse Room wird die letzte Richtung in last_direction abgelegt (wenn es eine Richtung oder ein Zielobjekt gibt). Ich bin mir jetzt gerade nicht sicher, ob die react_after für Go im Start- oder im Zielraum feuert, aber ... so oder ähnlich könnte man es machen, glaube ich.

Einen guten Überblick über die Routinen, Konstanten und Variablen der Inform-Library kannst Du Dir mit Roger Firths ["InfoLib at Your Fingertips"](http://www.firthworks.com/roger/downloads/inflibqr.zip) verschaffen.

Grüße,

Christian
AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz