Forum moved to if-forum.org
Autor Nachricht
<  I7: Objektabhängige Beschreibungen in einer Klasse?
olav.mueller
BeitragVerfasst am: Di, 16 Apr 2013 - 18:14  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 14.10.2004
Beiträge: 15
Wohnort: Düsseldorf

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:

Code:
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.

Code:
 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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hannes
BeitragVerfasst am: Di, 16 Apr 2013 - 21:30  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.03.2010
Beiträge: 660

[Owner of the noun]?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
olav.mueller
BeitragVerfasst am: Di, 16 Apr 2013 - 23:00  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 14.10.2004
Beiträge: 15
Wohnort: Düsseldorf

Hannes hat folgendes geschrieben:
[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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
proc
BeitragVerfasst am: Di, 16 Apr 2013 - 23:17  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 923
Wohnort: Berlin

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

Code:
"Jumpin' Balls"

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.
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
proc
BeitragVerfasst am: Di, 16 Apr 2013 - 23:40  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 923
Wohnort: Berlin

olav.mueller hat folgendes geschrieben:
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.
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
olav.mueller
BeitragVerfasst am: Di, 16 Apr 2013 - 23:45  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 14.10.2004
Beiträge: 15
Wohnort: Düsseldorf

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

Code:
"Jumpin' Balls"

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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
proc
BeitragVerfasst am: Mi, 17 Apr 2013 - 0:37  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 923
Wohnort: Berlin

olav.mueller hat folgendes geschrieben:
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 hat folgendes geschrieben:
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.
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Herr Rau
BeitragVerfasst am: Mi, 17 Apr 2013 - 5:23  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 07.04.2012
Beiträge: 52
Wohnort: München

Bei mir funktioniert folgendes:

Code:
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hannes
BeitragVerfasst am: Mi, 17 Apr 2013 - 8:08  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.03.2010
Beiträge: 660

Herr Rau hat folgendes geschrieben:
Bei mir funktioniert folgendes:

Code:
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 ;)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
olav.mueller
BeitragVerfasst am: Mi, 17 Apr 2013 - 10:02  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 14.10.2004
Beiträge: 15
Wohnort: Düsseldorf

Herr Rau hat folgendes geschrieben:
Code:
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 ;-)

Code:

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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mikawa
BeitragVerfasst am: Mi, 17 Apr 2013 - 11:17  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 03.09.2009
Beiträge: 453
Wohnort: Cham

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

Code:

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:

Code:

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 ..........
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
olav.mueller
BeitragVerfasst am: Do, 18 Apr 2013 - 12:08  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 14.10.2004
Beiträge: 15
Wohnort: Düsseldorf

Mikawa hat folgendes geschrieben:

Das Problem könnte behoben werden, falls die Leute, die den Ball besitzen immer proper-named sind, dann könnte man schreiben

Code:

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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mikawa
BeitragVerfasst am: Do, 18 Apr 2013 - 15:36  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 03.09.2009
Beiträge: 453
Wohnort: Cham

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


Code:

"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"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 1
if-de :: Forum Foren-Übersicht  >  Inform & Glulx

Neues Thema eröffnen   Neue Antwort erstellen


 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Kontakt: Administrator

Powered by phpBB and NoseBleed v1.05