Geschrieben um 17:19 am 06.02.2003 | Zitat | Editieren | Löschen | |
Mitglied Master Gumby Beiträge: 126 | Würde auch gerne mal ein wenig mit TAG experimentieren, wenn auch zugegebenermaßen nicht unbedingt ein ganzes Spiel programmieren. Da ich das Problem seit mindestens einem Jahr nicht weiter bearbeitet habe und damals aufgegeben hatte, wären mir ein paar sanfte "Hints" willkommen. Ich will wirklich keinen fertigen Code -- nur wissen, wo ich anfangen könnte. Angenommen, in der Spielwelt kriecht ein dichter magischer Nebel umher, der sich durch geschlossene Türen und ähnliche Hindernisse aussperren läßt. Der Nebel könnte demnach beispielsweise alle "Räume" eines Hafens "infizieren", ohne in ein Bootshaus oder die Kajüten der Boote einzudringen. Da es viele, evtl. unvorhersehbar viele Möglichkeiten der "Nebel/Nichtnebel"-Raumverteilung gibt und der Zustand benachbarter Räume ebenfalls von Bedeutung ist, sollte jedes Raumobjekt zu jeder Zeit "wissen" (oder eine Funktion, pardon, Aktion sollte zu jeder Zeit ermitteln können), ob ein Raum neblig ist (entweder oder, keine Zwischenschritte, kein langsames Vordringen). Das, denke ich, ist das geringere Problem. In nebligen Räumen soll es aber auch schwieriger sein, noch unbekannte Objekte zu erkennen. Beschreibung und Name eines Objekts sollen im Nebel also davon abhängen, ob der PC sie schon bei klarer Sicht erblickt hat. (Sobald das passiert, könnte ein Attribut "bekannt" gesetzt werden.) Da Beschreibungen ja nur auf Befehle hin ausgegeben werden, lassen sich diese relativ leicht mit VorAusf variieren, aber wie ist es mit den Namen von Objekten? Ich möchte wirklich keine Objekt-Vertausch-Spielchen anfangen... Soll ich die Ausgabe der Objekte nach der "Lage"-Besch eines Raumes unterdrücken, etwa so:
|
Geschrieben um 19:14 am 06.02.2003 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | Uff! das ist mal eine anspruchsvolle Aufgabenstellung. Eine gute Alternative zum Guru-Wettbewerb... Vor der Komplettlösung nur ganz kurz: Ally:
xObj ist in diesem Fall eine Variable, die wahrscheinlich mit lokale ObjVar x irgendwo deklariert wurde, und die in der Schleife als Zählvariable verwendet wird. ObjListe ist ein T.A.G.-Befehl, der alle Objekte, die eine Bedingung erfüllen, auf eine Liste schreibt. xObj wird hier nur als Variable für die (implizite) Objektschleife benötigt. Der Befehl macht nichts Offensichtliches, aber er schreibt die Anzahl der Objekte in der Liste auf AnzListe. In nachfolgende Texten kann dann mit [liste Fall] die Liste eingefügt werden. (Fall=1 ist Akkusativ.) Nur, wenn etwas gefunden wurde, wird hier ein Text geschrieben. Mit InhListe Objekt wird direkt, ohne den Umweg des Textbefehls, ein Absatz über den Inhalt des Objekts gegeben, wie er auch in einer Raumbeschreibung auftauchen würde: "Im Eimer siehst du eine Axt" oder "Auf dem Tablett befinden sich drei leckere Kanapees". Meist wird aber gar nichts ausgegeben - das Objekt ist kein Behälter oder leer. Ally:
T.A.G. ist ein Sprachchaos, das stimmt. Es ist halt immer etwas hinzugekommen, was nicht in die vorige Syntax gepasst hat. Der Fachausdruck heisst, glaube ich "organisch gewachsen". Zitat:
Hier kannst Du die (relativ schlecht dokumentierte) Möglichkeit einer Ausführung als Namen benutzen:
Aber das ist auch keine schöne Syntax: Um Leerzeichen nach dem Namen zu vermeiden, muss ein Schrägstrich angestellt werden, die ObjGenus-Krücke muss angewendet werden, und, und, und... |
Geschrieben um 22:02 am 06.02.2003 | Zitat | Editieren | Löschen | |
Mitglied Master Gumby Beiträge: 126 | Martin: Hier kannst Du die (relativ schlecht dokumentierte) Möglichkeit einer Ausführung als Namen benutzen: Ahh! Das ist exakt das, was anwenden zu können ich nicht zu hoffen wagte Ich bin mir ziemlich sicher, daß ich diese Methode schon beim ersten Versuch damals ausprobiert hatte (jedenfalls hätte ich es bei TADS so gemacht), aber die Details fehlten einfach. Hinter die Objektlistenschleifensache wäre ich vermutlich nie gekommen. Danke! |
Geschrieben um 11:32 am 07.02.2003 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | Ally:
Ich habe eben mal gesucht, wo dieses Feature in der Doku beschrieben ist. Es ist schon sehr gut versteckt: In der Lösung zu Aufgabe 22 des Tutoriums wird diese Möglichkeit kurz erwähnt. (Die Überarbeitung des Handbuchs muss wohl mal ganz oben auf die To-Do-Liste.) Ally:
T.A.G. hat als einfache Beschreibungssprache angefangen. Dann ist mir irgendwie das DM3 von Inform in die Hände gefallen, und ich fand viele schöne Features, die T.A.G. natürlich auch haben sollte. Und auch bekam, allerdings in einer unflexiblen Syntax, die sich an das Bestehende anlehnte. Alles, was bei Inform eine Library-Routine ist, ist bei T.A.G. ein eigener Opcode. Und das Fehlen von Rückgabewerten macht dann so Krücken wie globale Variablen für das Ergebnis einer Aktion notwendig. Ach, ja: Es gibt in T.A.G. übrigens ein Attribut bekannt, das automatisch gesetzt wird: Alles, was der Spieler einmal in einer Raumbeschreibung oder beim Öffnen eines Behälters beschrieben bekommen hat, hat dieses Attribut. Die ganze Nebelproblematik ist ja der Aufgabenstellung des IF-Guru #1 nicht unähnlich. In meiner Lösung verwende ich die Aktion SichtUndRw, mit der man die normalen Regeln zur Sichtbarkeit und Erreichbarkeit von Objekten ändern kann: Alles was man im Halbdunkel nicht sehen kann, wird mit ObjAusserSicht versteckt. Ally:
Nein, das geht. Dazu könnte man schön eine Raumklasse benutzen für Räume die neblig sein können. (Ob der Raum dann neblig ist, würde man mit einem Attribut checken.) |
Geschrieben um 02:49 am 08.02.2003 | Zitat | Editieren | Löschen | |
Mitglied Master Gumby Beiträge: 126 | Martin: Ach, ja: Es gibt in T.A.G. übrigens ein Attribut bekannt, das automatisch gesetzt wird: Alles, was der Spieler einmal in einer Raumbeschreibung oder beim Öffnen eines Behälters beschrieben bekommen hat, hat dieses Attribut. Das würde aber nicht berücksichtigen, ob der Gegenstand in unvernebelter Umgebung gesichtet wurde oder nicht, oder? Zitat: Die ganze Nebelproblematik ist ja der Aufgabenstellung des IF-Guru #1 nicht unähnlich. An den Guru hatte ich zwar nicht gedacht, aber: Du hast mich ertappt. Im Grunde ging es mir gar nicht um Nebel, sondern um die Umsetzung von Halbdunkel, was ich spoilervermeidend verschwieg. Vielleicht mach ich ja auch was mit Nebel und Halbdunkel... (bei TADS hatte ich das noch mit "Ausweichen" auf Gerüche und Geräusche bei völliger Finsternis ergänzt, was einigermaßen klappte. Für's Erste spare ich mir das jetzt besser.) Zitat: In meiner Lösung verwende ich die Aktion SichtUndRw, mit der man die normalen Regeln zur Sichtbarkeit und Erreichbarkeit von Objekten ändern kann: Alles was man im Halbdunkel nicht sehen kann, wird mit ObjAusserSicht versteckt. Für kleine Objekte hatte ich das auch vor. Wie ich sehe, hast du dich in deinem Beitrag dessen angenommen. Na, um so besser... |