%attacker%アプローチは、オブジェクトの名前以外の情報を含めるように拡張できます。
- 動詞は単数でも複数でもよい。これは主題によって異なります。「あなたはXを攻撃します」(単数の2人称主題)vs.「エクストラクンは Xを攻撃します」(単数の3人称主題)対「ゴブリンが Xを攻撃します」(複数の3人称主題)。ほとんどの動詞は
-s
追加する必要がありますが、いくつかの例外があります。
- 名詞は、固有名詞(「ゴブリン攻撃X」)または一般名詞(「ゴブリン攻撃X」)の場合があります。母音で始まる一般的な名詞は、「a」の代わりに「an」を使用する必要があります。普通の名詞かもしれませんが、現在のコンテキストではインスタンスが1つだけです(「ゴブリンはXを攻撃します」)。
- 名詞の数は、0(「あなたはゴブリンを打たない」)から1(「1つのゴブリンを打つ」)から多く(「3つのゴブリンを打つ」)までさまざまです。多くの名詞は単に追加
-s
または-es
追加する必要がありますが、多くの例外があります。
- サブジェクトとオブジェクトは、単純(「ゴブリン」)または複合(「ゴブリンと彼女の兄弟」)の場合があります。
- 文の先頭の一般的な名詞は大文字にする必要がありますが、名詞に冠詞がある場合、または複合語である場合は、最初の単語のみを大文字にする必要があります。固有名詞は常に大文字です。
- 被験者の位置(「彼女はゴブリンを打つ」)とオブジェクトの位置(「ゴブリンは彼女を打つ」)は異なる代名詞を使用します。
- 所有者は
's
、単数の場合(「ゴブリンの'
if 」)、複数の場合(「2つのゴブリンの軸」)を追加することで生成できますが、代名詞には独自のルール(「あなたの a」)があります。
英語については、JaysHouseMOOと呼ばれるMUDから派生したテキスト生成ライブラリをPythonで作成しました。コードを自由に勉強またはコピーしてください。例外的なケースの優れたライブラリがありません。ゲームで使用されている単語を追加する必要があります。私は、移植されたコードが広範囲にテストされていないのではないかと心配しています。また、ゲーム用に追加のケースが必要になる場合があります(ゲーム用MUDではなく、ソーシャルMUD用に設計されました)。
あなたの例はとして書かれ"%1I %1:(inflicts) a serious wound (%2n damage) on %3i"
ます。数字は%1
、%2
、%3
置換対象となるオブジェクトにそれを伝えます。I
/ i
必要に応じて間接記事( "a"、 "an")を追加するように指示します。n
記事なしで名詞を表示するように指示します。:(inflicts)
そのオブジェクトの動詞を活用するように指示します。
攻撃者、防御者、および他のすべての人に表示する出力は次のとおりです。
$ 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.')
指定した(1, 'point')
場合は、「1ポイント」ではなく「1ポイント」と印刷されることに注意してください。それはゲームテキストで私を悩ませているものなので、適切に印刷しやすくするための機能を必ず追加しました。
次に、複合名詞と「a」と「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.")
これらの例は英語であり、男性/女性、代名詞、単数/複数動詞/名詞、固有名詞/普通名詞のみを追跡します。追跡する必要があるものは、言語やゲーム内のテキストの種類によって異なります。スペイン語には、正式および非公式の代名詞があります。いくつかの言語には、男性形と女性形の動詞があります。日本語の代名詞は、対象に対する対象の状態に依存します。一部の言語では、動詞の活用に暗黙的に主題を含めることができます。生成するすべての種類のテキストと翻訳する言語を決定すると、ゲームオブジェクトで追跡する必要があるものがわかります。コンテンツを作成するときに、必要な注釈と例外的なケースを含めることができます。