Geschrieben um 19:14 am 16.04.2013 | Zitat | Editieren | Löschen | |
Mitglied Pupil Gumby Beiträge: 15 | Einen wunderschönen Guten Morgen, in meinem Inform 7 Projekt hätte ich gerne eine Klasse (Kind of Thing), die eine Instanzabhängige Beschreibung definiert. Ich stelle mir das ungefähr so vor:
Leider funktioniert das mal so überhaupt nicht.
Das verstehe ich ja im Prinzip auch. Ich weiss aber nun wirklich nicht, wie man in Inform (Anfängerprobleme?) in einer Methodendefinition auf die echte Instanz einer Klasse zugreift. (in Java würde ich schreiben this.getBesitzer(), in Inform kenne ich die Umschreibung für "this" aber nicht ;-) Wer kann mir helfen? Vielen Dank, Olav |
Geschrieben um 22:30 am 16.04.2013 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 551 | [Owner of the noun]? |
Geschrieben um 00:00 am 17.04.2013 | Zitat | Editieren | Löschen | |
Mitglied Pupil Gumby Beiträge: 15 | Hannes:
Dachte ich auch zuerst. Hab ich auch ausprobiert. Funktioniert aber nur, wenn der Spieler gerade zufällig einen Befehl eingetippert hat, wo noun zum richtigen Objekt geparst wird. In diesem kleinen Beispiel Zitat:
A Ball is a kind of thing. Every Ball has a person called Owner. The printed name of a Ball is "[Owner of the noun]'s Ball". The description of a Ball is "This ball belongs to [owner of the noun]." The Courtyard is a room. Olav is a person in the courtyard. Olavs Ball is a Ball in the Courtyard. The Owner of Olavs Ball is Olav. scheitert es leider schon bei der Ausgabe der Raumbeschreibung mit einem Run-time problem. Die description funktioniert, mit "x ball" bekommt man die richtige Antwort, aber eben nur, weil "ball" in der Eingabe des Spielers der korrekte (und vor allem konkrete) Ball ist. Hast Du vielleicht noch weitere Ideen? Das bringt mich fast zur Verzweiflung. CU, Olav |
Geschrieben um 00:17 am 17.04.2013 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 699 | Statt noun müsste eine Funktion eingebaut werden, die das konkret zugewiesene Objekt kennt, in etwa:
----- |
Geschrieben um 00:40 am 17.04.2013 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 699 | olav.mueller:
Oops, da hat sich wohl was überschnitten. Person kann nicht "nothing" sein, das erzeugt den Run-time error. ----- |
Geschrieben um 00:45 am 17.04.2013 | Zitat | Editieren | Löschen | |
Mitglied Pupil Gumby Beiträge: 15 | proc:
Aber auch hier habe ich doch wieder dasselbe Problem wie in Hannes' Vorschlag. Es funktioniert nur wenn "noun" aus der Eingabe des Spieler richtig geparst ist. Wenn ich die Objekte jedoch irgendwo sonst (in einer Schleife im Inventar bspw.) ausgeben will, komme ich auch auf diese Art an den owner nicht heran, oder? Noun ist nämlich in diesem Fall ("inv") nothing. Muss ich für jeden Ball in meinem Spiel wirklich eigenhändig eine printed name Definition tippern? Das wären im Moment 7 Stück, da tippe ich weniger lange dran als ich jetzt schon herumprobiere und überlege! ;-) CU, Olav |
Geschrieben um 01:37 am 17.04.2013 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 699 | olav.mueller:
Sorry, das Beispiel ist Unsinn weil da immer noch das "noun" drinsteckt. Warum das überhaupt funktioniert, ist mir ein Rätsel, das noun gehört zum Parser und kann von Aktionsregeln verwendet werden, anscheinend aber auch von statischen Objektinstanzen. I7 ist nicht wirklich objektorientiert, sondern simuliert das nur, auf zukünftig zu vererbende Eigenschaften kann bei der Definition nicht zugegriffen werden. Das ginge erst nach den Objektdefinitionen, z.B. in Regeln wie "when play begins". Auch über Relationen wie "Ownership relates various things to one person" wäre einiges machbar, das ist bei 7 Objekten dann aber mehr eine Kanonen-Spatzen-Artillerieleistung. olav.mueller:
Nein. In diesem Fall aber Ja. Das spiegelt die Redundanz im Paradigma der natürlichsprachigen Programmierung wider. Und eben auch die Missverständnisse. ----- |
Geschrieben um 06:23 am 17.04.2013 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 60 | Bei mir funktioniert folgendes:
Mir ist zwar nicht klar, warum es mit "of the ball" nicht geht, aber ohne funktioniert es mit printed name und description. |
Geschrieben um 09:08 am 17.04.2013 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 551 | Herr Rau:
Mir ist zwar nicht klar, warum es mit "of the ball" nicht geht, aber ohne funktioniert es mit printed name und description. Wieder mal so ein typischer I7-Fall bei der mangelhaft dokumentierten Sprache sitzt man ja erfahrungsgemäß 90% der Zeit nicht am wirklich konstruktiven Schreiben, sondern am Such immer wieder neuer, eigentlich scheinbar äquivalenter Formulierungen, die sich aber allesamt unterschiedlich verhalten |
Geschrieben um 11:02 am 17.04.2013 | Zitat | Editieren | Löschen | |
Mitglied Pupil Gumby Beiträge: 15 | Herr Rau:
Boah, das wird ja immer kranker. Herzlichen Dank erstmal für diese Lösung. Warum ich das scheinbar noch nicht ausprobiert hatte, weiß ich nicht. Interessanterweise ist aber "owner" innerhalb der description routine ein Objekt vom Typ "property". Gibt es eine programmatische Methode an die person zu kommen, die das property repräsentiert? Ahhhhhh ... ich werd wahnsinnig ;-) In I6 war das so schön einfach ;-)
Warum schreib ich nicht einfach in I6 weiter? ;-) CU, Olav |
Geschrieben um 12:17 am 17.04.2013 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 324 | HIer sind zwei Sachen vermischt: Zum einen darf im printed name keine Texterserzung mit Kasusangabe stehen, weil sonst der Kasus für die evtl. auszugebende restliche Liste verändert wird. z.B. The printed name of ... is "[Des owner]s Ball[-s]" führt in der Du siehst hier außerdem Liste zu Irritationen wie Du siehst hier eine Nonne, einen Pater, Jim, Jims Balls und eines Gärtners. "eines Gärtners" statt "einen Gärtner" weil der Ball den Kasus der kompletten restlichen Liste ändert. Das Problem könnte behoben werden, falls die Leute, die den Ball besitzen immer proper-named sind, dann könnte man schreiben
weil der Artikel ja bei proper-named unterdrückt wird, daher erhält man Du siehst hier eine Nonne, einen Pater, Jim, Jims Ball und einen Gärtner. Zum anderen muss es heißen: A ball has a person called owner, um korrekt auf den owner zugreifen zu können. Bleibt aber natürlich noch die Understand Definition bei jedem Ball, die von Hand gemacht werden muss, um die Bälle für den Parser unterscheidbar zu machen ..... Also das vermurkste aber funktionierende Beispiel:
Edit: Oh weh, wir haben ja auch noch den direkten Artikel der unterdrückt werden muss A ball is proper-named. Und es bleibt noch, dass Listen in einem anderen Fall als dem Akkusativ natürlich auch wieder falsch ausgegeben werden. Dazu müsste man in die Listenschreib Routine eingreifen ... Insgesamt wohl nicht empfehlenswert .......... |
Geschrieben um 13:08 am 18.04.2013 | Zitat | Editieren | Löschen | |
Mitglied Pupil Gumby Beiträge: 15 | Mikawa: Das Problem könnte behoben werden, falls die Leute, die den Ball besitzen immer proper-named sind, dann könnte man schreiben
Ja, die Ausgabe in den richtigen Fall zu bringen ist noch ein ganz anderes Thema, das ist klar. Mit Hilfe der englschsprachigen Newsgroup habe ich jetzt eine Lösung für mein Problem gefunden. [owner of the object described] liefert mir den korrekten Charakter, mit dem ich dann alles machen kann, was ich will. Danke Euch, Olav |
Geschrieben um 16:36 am 18.04.2013 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 324 | So langsam nähere ich mich an. Mein Versuch nutzt die Möglichkeit der Relationships. Somit kann der Owner mit "Jim is owner of Jimsball" zugewiesen werden. Der einzige Wermutstropfen ist, dass I7 die Bälle als Duplicates behandelt, somit tauchen die Owner im printed name nur auf, wenn ein einzelner Ball rumliegt. Wie man das abstellt und Inform dazu bringt, die Bälle nicht als Duplicates sondern als getrennte Objekte zu behandeln, weiß ich auf die Schnelle nicht. Grüße, --MI
|