Der% attacker% -Ansatz kann erweitert werden, um einige andere Informationen als nur die Namen der Objekte einzuschließen:
- Das Verb kann Singular oder Plural sein. Das hängt vom Thema ab. "Sie attackieren X" (Singular 2. Person Thema) vs. "Extrakun Angriffe X" (Einzahl 3. Person Thema) vs. "Die Goblins greifen X" (Plural 3. Person Thema). Die meisten Verben brauchen nur eine
-s
hinzugefügt werden, es gibt jedoch einige Ausnahmen.
- Das Substantiv kann ein Eigenname (" Goblin attackiert X") oder ein gebräuchliches Substantiv (" A Goblin attackiert X") sein. Gängige Substantive, die mit einem Vokalton beginnen, sollten "ein" anstelle von "ein" verwenden. Es kann ein gewöhnliches Substantiv sein, hat aber nur eine Instanz im aktuellen Kontext (" Der Kobold greift X an").
- Das Substantiv kann in der Anzahl variieren, von Null ("Du hast keine Goblins getroffen ") über Eins ("Du hast einen Goblin getroffen ") bis zu Vielen ("Du hast drei Goblins getroffen "). Viele Substantive brauchen nur ein
-s
oder -es
hinzugefügt, aber es gibt viele Ausnahmen.
- Subjekte und Objekte können einfach (" Ein Kobold ") oder zusammengesetzt (" Ein Kobold und ihr Bruder ") sein.
- Gängige Substantive am Satzanfang müssen in Großbuchstaben geschrieben werden. Wenn das Substantiv einen Artikel enthält oder zusammengesetzt ist, möchten Sie nur das erste Wort in Großbuchstaben schreiben. Die richtigen Substantive werden immer in Großbuchstaben geschrieben.
- Die Subjektposition (“ Sie traf den Kobold‚) und Objektposition (‘Der Kobold schlug sie “) verwendet unterschiedliche Pronomen.
- Possessivpronomen kann durch Zugabe erzeugt werden ,
's
wenn Singular ( „A Kobold Axt“), '
wenn Plural ( „Two Goblins Achsen‚), aber Pronomen haben ihre eigenen Regeln (‘ Deine Axt“).
Für Englisch habe ich Python eine Texterzeugungsbibliothek geschrieben, die von einem MUD namens JaysHouseMOO abgeleitet ist. Fühlen Sie sich frei, den Code zu studieren oder zu kopieren . Es gibt keine gute Bibliothek für Ausnahmefälle. Sie müssen das mit den Wörtern hinzufügen, die in Ihrem Spiel benutzt werden. Ich fürchte, mein portierter Code wird nicht ausgiebig getestet. Möglicherweise müssen auch weitere Hüllen für Spiele hinzugefügt werden (es wurde für ein soziales MUD und nicht für ein Gaming-MUD entwickelt).
Ihr Beispiel wäre geschrieben als "%1I %1:(inflicts) a serious wound (%2n damage) on %3i"
. Die Zahlen %1
, %2
, %3
sagen , dass es die Aufgabe ist , substituiert sein können; I
/ i
sage ihm, dass er bei Bedarf einen indirekten Artikel ("a", "an") hinzufügen soll; n
weist es an, das Substantiv ohne Artikel anzuzeigen; :(inflicts)
Weist es an, das Verb für dieses Objekt zu konjugieren.
Hier ist die Ausgabe, die dem Angreifer, dem Verteidiger und allen anderen angezeigt werden soll:
$ python
>>> import msg
>>> m = "%1I %1:(inflicts) a serious wound (%2n damage) on %3i."
>>> attacker = msg.GenderedObject('Amit', 'm', 'proper')
>>> defender = msg.GenderedObject('goblin', 'm', 'unique')
>>> points = (12, 'point')
>>> msg.Msg().sub_parties({1: attacker, 2: points, 3: defender},
m, [attacker, defender])
(['You inflict a serious wound (12 points damage) on the goblin.',
'Amit inflicts a serious wound (12 points damage) on you.'],
'Amit inflicts a serious wound (12 points damage) on the goblin.')
Beachten Sie, wenn Sie es gegeben (1, 'point')
hätten, hätte es "1 Punkt" anstelle von "1 Punkte" gedruckt. Das ist etwas, das mich im Spieltext stört, also habe ich darauf geachtet, eine Funktion zu integrieren, die es einfach macht, das richtig zu drucken.
Hier ist ein weiteres Beispiel mit zusammengesetzten Substantiven und "a" vs. "an":
>>> m = "%1I %1:(hits) %2'n %2'(head)."
>>> a1 = msg.GenderedObject('goblin', 'm', 'normal')
>>> a2 = msg.GenderedObject('orc', 'm', 'normal')
>>> d1 = msg.GenderedObject('Amit', 'm', 'proper')
>>> d2 = msg.GenderedObject('Extrakun', 'm', 'proper')
>>> msg.Msg().sub_parties({1: [a1, a2], 2: [d1, d2]}, m, [d1, d2])
(["A goblin and an orc hit your and Extrakun's heads.",
"A goblin and an orc hit Amit's and your heads."],
"A goblin and an orc hit Amit's and Extrakun's heads.")
Diese Beispiele sind in englischer Sprache und zeigen nur männliche / weibliche, Pronomen, singuläre / pluralische Verben / Substantive und Eigennamen / gebräuchliche Substantive. Was Sie nachverfolgen müssen, hängt von den Sprachen und der Art des Textes in Ihrem Spiel ab. Auf Spanisch gibt es formelle und informelle Pronomen. Mehrere Sprachen haben männliche und weibliche Formen von Verben. Japanische Pronomen hängen vom Status des Subjekts relativ zum Objekt ab. In einigen Sprachen kann die Verbkonjugation implizit das Thema enthalten. Bestimmen Sie alle Arten von Text, die Sie generieren möchten, und die Sprachen, in die Sie übersetzen möchten. Sie erfahren dann, was Sie in Ihren Spielobjekten nachverfolgen müssen. Beim Erstellen des Inhalts können Sie die erforderlichen Anmerkungen und Ausnahmefälle einfügen.
Anstatt eine einzelne Zeichenfolge zu haben und zu versuchen, sie ordnungsgemäß zu ersetzen, könnten Sie eine ganze Reihe von Zeichenfolgen haben. Beginnen Sie mit den Objekten. Sie wissen, wenn Sie den Mob erstellen, als was Sie ihn bezeichnen sollen. Sie können dem Objekt eine bestimmte, vom Namen getrennte Eigenschaft zuweisen, um es in Angriffszeichenfolgen zu ersetzen. Waffen können mehrere Saiten für Abwechslung haben und können detaillierter ersetzen. Anstelle von "Angreifer" können sie gezielt nach "Angreifer-Pronomen" oder "Angreifer-Eigenname" fragen. Mobs können auch mehrere Versionen dieser Bezeichner haben, wenn Ihre "Bienen" durch mehrere Mobs dargestellt werden und nicht nur durch einen einzigen Mob, der zufällig "Bienen" genannt wird.
Du hättest also eine Menge wie
Dann fragt Ihre Angriffszeichenfolge nach bestimmten Gegenständen wie diesem.
% attacker-pronoun% hit% defender-specific_common% für% damage%! % defender-pronoun% hat das wirklich gespürt!
quelle
Es gibt eine Reihe von Modulen für Perl, die mit Lingua :: EN :: Inflect beginnen und sich mit diesen Problemen befassen. Selbst wenn Sie eine andere Sprache verwenden, können Sie anhand der getroffenen API-Auswahl Ihr eigenes Design gestalten.
quelle
Die Art und Weise, wie ich damit umgehe, besteht in einer großen Anzahl von Systemen, bei denen die Nachricht unter anderem als Datenstruktur und nicht als Zeichenfolge modelliert wird. Die Werte für den Angreifer und den Verteidiger sind die tatsächlichen Objekte. Das Verb ("zufügen" in Ihrer Nachricht) ist als solches gekennzeichnet und kennt das Objekt für die Person, die es ausführt, so dass der Nachrichtenrenderer weiß, dass es in der ersten Person für den Schauspieler und in der zweiten Person für alle anderen angezeigt werden muss. Objekte wissen auch, ob ihre Substantive korrekt sind oder nicht (und daher, ob "the" oder "a / an" jemals auf sie angewendet werden sollte), es gibt Datenmodelle, mit denen ich "the" oder "a / an" angeben kann "würde normalerweise erwartet werden, dass sie auf ein nicht eigenständiges Substantiv in dieser Position angewendet wird, und vieles mehr.
Dieser Thread zu Mudconnector ist Ihrer Frage sehr ähnlich, und ich gehe dort ausführlich auf die Details meines Systems ein. Grundsätzlich ist die Art und Weise, wie ich es mache, das, was Sie wollen, wenn Sie von den zugrunde liegenden Fähigkeiten Ihres Messagingsystems völlig frei sein möchten und bereit sind, dafür einen Preis für die Lernkurve zu zahlen. (Ähnlich wie vi gegen nano.)
quelle
Ich würde Sie zu KISS raten (halten Sie es einfach) und die Vorteile der Textschnittstelle ausnutzen.
Vereinfachen Sie, vereinfachen Sie, vereinfachen Sie so viel Sie können. Entfernen Sie die Komplexität, bevor Sie überhaupt über das Codieren nachdenken. Verwenden Sie statt eines Satzes zwei Sätze, um ein Ereignis zu beschreiben, wie dies bei vielen Spielen der Fall ist. Erinnerst du dich an Baldurs Tor ? Es ist kein Textspiel, aber der Schaden wird mit Text beschrieben;)
Teilen Sie die Informationen zwischen der Quelle des Ereignisses und seiner Folge auf.
Zum Beispiel :
Ich würde auch raten, immer die dritte Person Singular zu verwenden, wäre es entweder Eigenname oder Substantiv.
Obwohl Englisch eine wichtige internationale Sprache ist, müssen Sie Ihr Spiel möglicherweise in andere Sprachen übersetzen, wenn Sie eine emotionalere Wirkung erzielen und einen größeren Markt berühren möchten.
Beachten Sie in diesem Fall, dass die Satzstruktur in anderen Sprachen möglicherweise anders ist. Laut Wikipedia bilden 45% der verfügbaren Sprachen den Satz in der SOV-Reihenfolge (subject-object-verb), wobei 42% (wie Englisch) den Satz in der SVO-Reihenfolge bilden. wie Englisch.
quelle