L'approche% attacker% peut être étendue pour inclure des informations autres que les noms des objets:
- Le verbe peut être singulier ou pluriel. Cela dépend du sujet. "Vous attaquez X" (sujet singulier à la 2ème personne) vs "Extrakun attaque X" (sujet singulier à la 3ème personne) vs "Les gobelins attaquent X" (sujet pluriel à la 3ème personne). La plupart des verbes ont juste besoin d'un
-s
ajout, mais il y a quelques exceptions.
- Le nom peut être un nom propre ("Le gobelin attaque X") ou un nom commun (" Un gobelin attaque X"). Les noms communs commençant par un son de voyelle doivent utiliser "an" au lieu de "a". Il peut s'agir d'un nom commun mais n'ayant qu'une seule instance dans le contexte actuel (" Le gobelin attaque X").
- Le nom peut varier en nombre, de zéro ("Vous frappez pas de gobelins ") à un ("Vous frappez un gobelin ") à plusieurs ("Vous frappez trois gobelins "). De nombreux noms ont juste besoin d'un
-s
ou -es
ajoutés, mais il existe de nombreuses exceptions.
- Les sujets et les objets peuvent être simples (" Un gobelin ") ou composés (" Un gobelin et son frère ").
- Les noms communs au début de la phrase doivent être en majuscules, mais si le nom a un article ou s'il est composé, vous ne voulez mettre en majuscule que le premier mot. Les noms propres sont toujours en majuscule.
- La position de sujet ( « Elle a frappé le gobelin « ) et la position de l' objet ( » Le gobelin a frappé son ») utilisent différents pronoms.
- Les possessifs peuvent être générés en ajoutant
's
if singulier ("Une hache de gobelin "), '
if pluriel ("Deux axes de gobelins "), mais les pronoms ont leurs propres règles (" Votre hache").
Pour l'anglais, j'ai écrit Python une bibliothèque de génération de texte dérivée d'un MUD appelé JaysHouseMOO. N'hésitez pas à étudier ou copier le code . Il n'a pas une bonne bibliothèque de cas exceptionnels; vous devrez ajouter cela avec les mots utilisés dans votre jeu. Je crains que mon code porté ne soit pas largement testé. Il pourrait également avoir besoin de plus de cas ajoutés pour les jeux (il a été conçu pour une MUD sociale, pas une MUD de jeu).
Votre exemple serait écrit comme "%1I %1:(inflicts) a serious wound (%2n damage) on %3i"
. Les nombres %1
, %2
, %3
disent que ce qui objet doit être substitué; I
/ lui i
dire d'ajouter un article indirect ("a", "an") si nécessaire; n
lui indique d'afficher le nom sans articles; :(inflicts)
lui dit de conjuguer le verbe de cet objet.
Voici la sortie à montrer à l'attaquant, au défenseur et à tout le monde:
$ 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.')
Notez que si vous l'aviez donné, (1, 'point')
il aurait imprimé "1 point" au lieu de "1 point". C'est quelque chose qui me dérange dans le texte du jeu, donc je me suis assuré d'inclure une fonctionnalité pour le rendre facile à imprimer correctement.
Voici un autre exemple, avec des noms composés, et "un" contre "un":
>>> 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.")
Ces exemples sont en anglais et ne suivent que les noms masculins / féminins, les pronoms, les verbes / noms singuliers / pluriels et les noms propres / communs. Ce que vous devez suivre variera selon les langues et le type de texte dans votre jeu. En espagnol, il existe des pronoms formels et informels. Plusieurs langues ont des verbes masculins et féminins. Les pronoms japonais dépendent du statut du sujet par rapport à l'objet. Dans certaines langues, la conjugaison des verbes peut implicitement inclure le sujet. Déterminez tous les types de texte que vous souhaitez générer et les langues que vous souhaitez traduire, et cela vous dira ce dont vous avez besoin pour suivre dans vos objets de jeu. Lorsque vous créez le contenu, vous pouvez inclure les annotations nécessaires et les cas exceptionnels.
Au lieu d'avoir une seule chaîne et d'essayer de la remplacer correctement, vous pouvez en avoir un ensemble complet. Commencez par les objets. Vous savez, lors de la création de la foule, à quoi l'appeler. Vous pouvez lui donner une propriété spécifique, distincte de son nom, pour la remplacer par des chaînes d'attaque. Les armes peuvent avoir plusieurs chaînes pour la variété et peuvent se substituer plus en détail. Au lieu de «attaquant», ils peuvent demander spécifiquement «attaquant-pronom» ou «attaquant-propername». Les mobs peuvent également avoir plusieurs versions de ces identifiants, si vos «abeilles» sont représentées par plusieurs mobs et pas seulement une seule mob qui se trouve être appelée «abeilles».
Vous auriez donc une foule comme
Ensuite, votre chaîne d'attaque demande des éléments spécifiques comme ça ..
% attaquant-pronom% a frappé% defender-specific_common% pour% damage%! % defender-pronom% l'a vraiment ressenti!
la source
Il existe un ensemble de modules pour Perl commençant par Lingua :: EN :: Inflect qui traite de ces problèmes. Même si vous utilisez un langage différent, les choix d'API effectués peuvent vous aider à cadrer votre propre conception.
la source
La façon dont je gère cela est à travers un large ensemble de systèmes qui, entre autres, implique la modélisation du message comme une structure de données plutôt que comme une chaîne. Les valeurs pour l'attaquant et le défenseur sont leurs objets réels; le verbe ("infliger" dans votre message) est marqué comme tel et connaît l'objet pour la personne qui l'exécute, de sorte que le rendu du message sache qu'il doit être affiché à la première personne pour l'acteur et à la deuxième personne pour tout le monde. Les objets savent également si leurs noms sont corrects ou non (et donc, si "le" ou "a / an" doit leur être appliqué), il existe des modèles de données qui me permettent de spécifier que "le" ou "a / an" "devrait normalement être appliqué à un nom non approprié dans cette position, et bien plus encore.
Ce fil sur Mudconnector est très similaire à votre question, et j'entre dans les détails de mon système là-bas. Fondamentalement, la façon dont je le fais est ce que vous voudriez si vous voulez être complètement libre des capacités sous-jacentes de votre système de messagerie et êtes prêt à payer un prix dans la courbe d'apprentissage pour cela. (Tout comme vi vs nano.)
la source
Je vous conseillerais de KISS (garder les choses stupidement simples), et d'exploiter les avantages de l'interface texte.
Simplifiez, simplifiez, simplifiez autant que vous le pouvez. Supprimez la complexité avant même de commencer à penser au codage. Au lieu d'une phrase, utilisez deux phrases pour décrire un événement, comme le font de nombreux jeux. Vous souvenez-vous de la porte de Baldur ? Ce n'est pas un jeu de texte, mais les dégâts sont décrits avec du texte;)
Répartissez les informations entre la source de l'événement et ses conséquences.
Par exemple :
Je conseillerais également de toujours utiliser la troisième personne du singulier, que ce soit un nom propre ou commun.
De plus, bien que l'anglais soit une langue internationale importante, si vous voulez avoir plus d'impact émotionnel et toucher un plus grand marché, vous devrez peut-être traduire votre jeu dans d'autres langues.
Si vous avez l'intention de le faire, sachez que la structure des phrases peut être différente dans d'autres langues. Selon Wikipedia , 45% des langues disponibles construisent la phrase dans l'ordre SOV (sujet-objet-verbe), où 42% (comme l'anglais) construisent la phrase dans l'ordre SVO; Comme l'anglais.
la source