Подход% attacker% можно расширить, включив в него некоторую информацию, кроме имен объектов:
- Глагол может быть единственного или множественного числа. Это зависит от предмета. «Вы нападаете на Х» (особый субъект от 2-го лица) против «Экстракун нападает на Х» (особый субъект от 3-го лица) против «Гоблины нападают на Х» (множественное число от 3-го лица). Большинство глаголов просто нужно
-s
добавить, но есть несколько исключений.
- Существительное может быть собственным (« Гоблин атакует X») или нарицательным (« Гоблин атакует X»). Обыкновенные существительные, начинающиеся с гласного звука, должны использовать «an» вместо «a». Это может быть обычное существительное, но имеющее только один экземпляр в текущем контексте (« Гоблин атакует X»).
- Число существительных может варьироваться от нуля («Вы ударили ни одного гоблина ») до одного («Вы ударили одного гоблина ») до многих («Вы ударили трех гоблинов »). Многие существительные просто нуждаются
-s
или -es
добавлены, но есть много исключений.
- Предметы и объекты могут быть простыми (« Гоблин ») или составными (« Гоблин и ее брат »).
- Обыкновенные существительные в начале предложения должны быть написаны заглавными буквами, но если у существительного есть артикль или если оно составное, вы хотите использовать заглавные буквы только в первом слове. Собственные существительные всегда пишутся с большой буквы.
- Положение субъекта ( « Она попала в гоблин„) и положение объекта (“Гоблин ударил ее ») используют разные местоимения.
- Притяжений можно сгенерировать, добавив в
's
единственном числе (« топор гоблина »), во '
множественном числе (« топоры двух гоблинов »), но местоимения имеют свои собственные правила (« Ваш топор»).
Для английского я написал Python библиотеку генерации текста, полученную из MUD под названием JaysHouseMOO. Не стесняйтесь изучать или копировать код . У него нет хорошей библиотеки исключительных случаев; Вы должны будете добавить это со словами, используемыми в вашей игре. Боюсь, мой перенесенный код не был тщательно протестирован. Также может потребоваться добавление дополнительных случаев для игр (он был разработан для социальной 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 балл». Это то, что мешает мне в игровом тексте, поэтому я постарался включить функцию, которая облегчит его правильную печать.
Вот еще один пример с составными существительными и «а» против «ан»:
>>> 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.")
Эти примеры на английском языке, и только отслеживать мужской / женский, местоимения, глаголы единственного / множественного числа / существительные и собственные / общие существительные. То, что вам нужно отслеживать, зависит от языка и типа текста в вашей игре. В испанском есть формальные и неформальные местоимения. Несколько языков имеют мужские и женские формы глаголов. Японские местоимения зависят от статуса субъекта относительно объекта. В некоторых языках спряжение глагола может неявно включать предмет. Определите все виды текста, который вы хотите сгенерировать, и языки, на которые вы хотите перевести, и это скажет вам, что вам нужно отслеживать в игровых объектах. Когда вы создаете контент, вы можете включить необходимые аннотации и исключительные случаи.