IF-Forum

» IF-Forum - Autorencafé - Schreiben! - I7: Objektabhängige Beschreibungen in einer Klasse?
AntwortenNeues ThemaNeue Umfrage

I7: Objektabhängige Beschreibungen in einer Klasse?

Geschrieben um 19:14 am 16.04.2013 | Zitat | Editieren | Löschen
olav.mueller
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:

A Ball is a kind of thing. Every Ball has a person called Owner. The description of a Ball is "[Owner of the Ball]'s Ball".

Leider funktioniert das mal so überhaupt nicht.

 it looks as if you intend 'Owner of the Ball' to be a property, but 'a ball' is not specific enough about who or what the owner is.

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
Hannes
Avatar
Mitglied
Prof Gumby
Beiträge: 550

[Owner of the noun]?

Geschrieben um 00:00 am 17.04.2013 | Zitat | Editieren | Löschen
olav.mueller
Mitglied
Pupil Gumby
Beiträge: 15

Hannes:

[Owner of the noun]?

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:

"Balls of null" by Olav Müller

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
proc
Avatar
Mitglied
Retired Gumby
Beiträge: 696

Statt noun müsste eine Funktion eingebaut werden, die das konkret zugewiesene Objekt kennt, in etwa:



Section - Mechanics

A Ball is a kind of thing. Every Ball has an object called owner. The owner is usually nothing. The description of a Ball is usually "[bearer of the noun]'s ball".

To say bearer of (b - a ball): say the owner of b.

Section - Gameplay

Jungle is a room.

Tarzan is a man in jungle.

Jane is a woman in jungle.

The left marble is a ball in jungle. The owner of the left marble is Tarzan.

The right marble is a ball in jungle. The owner of the right marble is Tarzan.

The left boob is a ball in jungle. The owner of the left boob is Jane.

The right boob is a ball in jungle. The owner of the right boob is Jane.

Instead of touching a ball: say "[Description of the noun] is jumping."

Test me with "touch left marble / touch right boob".```

Object statt person muss nur genommen werden, wenn "nothing" zugelassen sein soll.
-----
Geschrieben um 00:40 am 17.04.2013 | Zitat | Editieren | Löschen
proc
Avatar
Mitglied
Retired Gumby
Beiträge: 696

olav.mueller:

scheitert es leider schon bei der Ausgabe der Raumbeschreibung mit einem Run-time problem.

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
olav.mueller
Mitglied
Pupil Gumby
Beiträge: 15

proc:

Statt noun müsste eine Funktion eingebaut werden, die das konkret zugewiesene Objekt kennt, in etwa:


Section - Mechanics

A Ball is a kind of thing. Every Ball has an object called owner. The owner is usually nothing. The description of a Ball is usually "[bearer of the noun]'s ball".

To say bearer of (b - a ball): say the owner of b.

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
proc
Avatar
Mitglied
Retired Gumby
Beiträge: 696

olav.mueller:

Aber auch hier habe ich doch wieder dasselbe Problem wie in Hannes' Vorschlag.

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:

Muss ich für jeden Ball in meinem Spiel wirklich eigenhändig eine printed name Definition tippern?

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
Herr Rau
Avatar
Mitglied
Bachelor Gumby
Beiträge: 60

Bei mir funktioniert folgendes:

A Ball is a kind of thing. Every Ball has a person called Owner. The description of a Ball is "[Owner]'s Ball".

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
Hannes
Avatar
Mitglied
Prof Gumby
Beiträge: 550

Herr Rau:

Bei mir funktioniert folgendes:

A Ball is a kind of thing. Every Ball has a person called Owner. The description of a Ball is "[Owner]'s Ball".

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
olav.mueller
Mitglied
Pupil Gumby
Beiträge: 15

Herr Rau:

A Ball is a kind of thing. Every Ball has a person called Owner. The description of a Ball is "[Owner]'s Ball".

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 ;-)


Attribute flightless;

Class Bird

  with wingspan 7,

  flying_strength [;

    if (self has flightless) return 0;

    return self.wingspan + self.worms_eaten;

  ],

  worms_eaten;

Bird "ostrich" with wingspan 3, has flightless;

Bird "magpie" with wingspan 5;

Warum schreib ich nicht einfach in I6 weiter? ;-)

CU,

Olav

Geschrieben um 12:17 am 17.04.2013 | Zitat | Editieren | Löschen
Mikawa
Avatar
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


The printed name of a ball is "[Den Owner]s Ball[-s]".

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:


A Ball is a kind of thing. A ball has a person called owner. A ball is usually male. The special indefinite article of a ball is NO ARTICLE.

The description of a Ball is "Dieser Ball gehört [dem owner].". The printed name of a ball is "[den Owner]s Ball[-s]". Understand "ball" as a ball.

Jim is a man, here. Jim is proper-named.

The Jimsball is a ball, here. The owner of the Jimsball is Jim.

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
olav.mueller
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


The printed name of a ball is "[Den Owner]s Ball[-s]".

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
Mikawa
Avatar
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


"Onkel Toms Hütte" by Mikawa

Include German by Team Gerx.

The dining hall is a room. "Der Speisesaal ist düster und staubig, das Mobiliar ist uralt und heruntergekommen und ein unangenehmer Geruch hängt in der Luft. Im Norden ist ein Weizenfeld.". The printed name is "Speisesaal".

[*** Wir setzen alle Bälle, deren Owner proper-named ist, ebenfalls auf proper-named - ohne Artikelausgabe"]

when play begins:

   repeat with item running through bälle:

      if owner of item is proper-named:

         now item is proper-named.

[*** Ein paar potentielle "Owner"]

The Jim is a man, here. The Jim is proper-named.

The Jane is a woman, here. The Jane is proper-named.

The Nonne is a woman, here.

The Pater is a man, here. The printed name is "Pater[-s]".

[*** Unser Ball "Kind"]

A Ball is a kind of thing.

A Ball is privately-named.

The printed name of a Ball is "Ball[-s]".  The Plural of Ball is Bälle.

Understand "ball[m]" and "kugel[f]" as "[Ball]".

understand "baelle" as the plural of a ball.

Understand "[Ball] von/des/der [something related by reversed owning]" as a Ball.

Understand "[Ball] [something related by reversed owning]" as a Ball.

Understand "[something related by reversed owning] [Ball]" as a Ball.

Understand "[Ball]" as a Ball.

[*** Die Owning Relation]

Owning relates one person (called the owner) to one ball. The verb to be owner of implies the owning relation.

The description of a Ball is "Dieser Ball gehört [dem owner].". The printed name of a ball is "Ball[-s]".

The special indefinite article of a ball is definite article.

[*** Die spezielle printing Rule gibt den korrekten Namen des Ball mit Owner aus ... Jims Ball / Ball der Nonne ...]

Rule for printing the name of a ball (called the item)

(this is the German printing the name of a ball rule):

   let C be the current case;

   if the owner of the item is the player:

      if C is:

         -- nominative:

            if the gender of the item is:

               -- Mehrzahl: say "[deine]";

               -- männlich: say "[dein]";

               -- weiblich: say "[deine]";

               -- sächlich: say "[dein]";

         -- genitive:

            if the gender of the item is:

               -- Mehrzahl: say "[deiner]";

               -- männlich: say "[deines]";

               -- weiblich: say "[deiner]";

               -- sächlich: say "[deines]";

         -- dative:

            if the gender of the item is:

               -- Mehrzahl: say "[deiner]";

               -- männlich: say "[deinem]";

               -- weiblich: say "[deiner]";

               -- sächlich: say "[deinem]";

         -- accusative:

            if the gender of the item is:

               -- Mehrzahl: say "[deine]";

               -- männlich: say "[deinen]";

               -- weiblich: say "[deine]";

               -- sächlich: say "[dein]";

      say " [printed name of item]";

   otherwise:

      if the owner of the item is proper-named:

         say "[owner of item][if owner of item is not s-terminated]s[otherwise]['][end if] ";

         say "[printed name of item]";

         now the previously named noun is the item;

      otherwise:

         say "[printed name of item] [des owner of item]";

         now the previously named noun is the item;

   rule succeeds.

[*** Ein paar Bälle, verteilt auf zwei Räume, da der Ball von I7 als Duplicate angesehen wird, bekommt man die korrekte Namensausgabe nur, wenn nur ein einziger Ball im Raum liegt ...]

The JimsBall is a male Ball, here. Jim is owner of JimsBall.

The JanesBall is a male Ball, here. Jane is owner of JanesBall.

Weizenfeld is north from dining hall. "Ein weites Feld erstreckt sich bis zum Horizont. Der Speisesaal ist südlich."

The Klaus is a man, here. The Klaus is proper-named. The Klaus is s-terminated.

The NonnesBall  is a male Ball, here. Nonne is owner of NonnesBall.

The Patersball  is a male Ball, here. Pater is owner of Patersball.

Test me with "nimm alle bälle/n/nimm alle bälle/leg janes ball hin/schau/nimm ball/leg ball der nonne hin/schau"
AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz