El enfoque% atacante% se puede ampliar para incluir información que no sea solo los nombres de los objetos:
- El verbo puede ser singular o plural. Esto depende del tema. "Usted ataca X" (singular segunda persona sujeta) vs. "Extrakun ataques X" (singular tercera persona sujeta) frente a "Los duendes atacan X" (plural tercera persona sujeta). La mayoría de los verbos solo necesitan un
-s
agregado, pero hay algunas excepciones.
- El sustantivo puede ser un nombre propio (" Goblin ataca X") o un sustantivo común (" Un duende ataca X"). Los sustantivos comunes que comienzan con un sonido vocal deben usar "an" en lugar de "a". Puede ser un nombre común pero tener solo una instancia en el contexto actual (" El duende ataca X").
- El nombre puede variar en número, desde cero ("No golpeas a los duendes ") a uno ("Golpea a un duende ") a muchos ("Golpea a tres duendes "). Muchos sustantivos solo necesitan un
-s
o -es
agregado, pero hay muchas excepciones.
- Los sujetos y los objetos pueden ser simples (" Un duende ") o compuestos (" Un duende y su hermano ").
- Los sustantivos comunes al comienzo de la oración deben escribirse en mayúscula, pero si el sustantivo tiene un artículo o si es compuesto, solo desea poner en mayúscula la primera palabra. Los nombres propios siempre están en mayúscula.
- La posición del sujeto ( " Ella golpeó el duende ') y la posición del objeto (' El duende golpeó su ") utiliza diferentes pronombres.
- Los posesivos pueden generarse agregando
's
if singular (" Axe goblin's axe"), '
if plural ("Two goblins ' axes"), pero los pronombres tienen sus propias reglas (" Your ax").
Para inglés, escribí Python una biblioteca de generación de texto derivada de un MUD llamado JaysHouseMOO. Siéntase libre de estudiar o copiar el código . No tiene una buena biblioteca de casos excepcionales; tendrás que agregar eso con las palabras usadas en tu juego. Me temo que mi código portado no se ha probado exhaustivamente. También podría necesitar más casos agregados para juegos (fue diseñado para un MUD social, no para un MUD de juegos).
Su ejemplo se escribiría como "%1I %1:(inflicts) a serious wound (%2n damage) on %3i"
. Los números %1
, %2
,%3
dicen que el objeto que ha de ser sustituido; I
/ i
dígale que agregue un artículo indirecto ("a", "an") si es necesario; n
le dice que muestre el sustantivo sin artículos; :(inflicts)
le dice que conjugue el verbo para ese objeto.
Aquí está la salida para mostrarle al atacante, al defensor y a todos los demás:
$ 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.')
Tenga en cuenta que si lo hubiera dado, (1, 'point')
habría impreso "1 punto" en lugar de "1 punto". Eso es algo que me molesta en el texto del juego, así que me aseguré de incluir una función para facilitar la impresión correcta.
Aquí hay otro ejemplo, con sustantivos compuestos, y "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.")
Estos ejemplos están en inglés y solo rastrean masculinos / femeninos, pronombres, verbos / sustantivos singulares / plurales y sustantivos propios / comunes. Lo que necesitas rastrear variará según los idiomas y el tipo de texto en tu juego. En español hay pronombres formales e informales. Varios idiomas tienen formas de verbos masculinos y femeninos. Los pronombres japoneses dependen del estado del sujeto en relación con el objeto. En algunos idiomas, la conjugación verbal puede incluir implícitamente al sujeto. Determine todos los tipos de texto que desea generar y los idiomas a los que desea traducir, y eso le dirá lo que necesita rastrear en los objetos de su juego. Cuando crea el contenido, puede incluir las anotaciones necesarias y casos excepcionales.
En lugar de tener una sola cadena e intentar sustituirla correctamente, podría tener un conjunto completo de ellas. Comience con los objetos. Ya sabes, al crear la mafia, a qué referirse. Puede darle una propiedad específica, separada de su nombre, para sustituirla en cadenas de ataque. Las armas pueden tener múltiples cadenas para la variedad, y pueden sustituir con más detalle. En lugar de 'atacante', pueden pedir específicamente 'atacante-pronombre' o 'atacante-nombre propio'. Las multitudes también pueden tener versiones plurales de estos identificadores, si sus 'abejas' están representadas por múltiples mobs y no solo por una sola mafia que se llama 'abejas'.
Entonces tendrías una mafia como
Luego, su cadena de ataque solicita elementos específicos como este ...
¡% atacante-pronombre% golpear% defensor-específico_común% para% daño%! ¡% defender-pronombre% realmente sintió eso!
fuente
Hay un conjunto de módulos para Perl que comienzan con Lingua :: EN :: Inflect que se ocupa de estos problemas. Incluso si está utilizando un idioma diferente, las opciones de API realizadas pueden ayudarlo a enmarcar su propio diseño.
fuente
La forma en que manejo esto es a través de un gran conjunto de sistemas que, entre otras cosas, implica modelar el mensaje como una estructura de datos en lugar de una cadena. Los valores para el atacante y el defensor son sus objetos reales; el verbo ("infligir" en su mensaje) está marcado como tal y conoce el objeto para la persona que lo realiza, de modo que el procesador de mensajes sabe que debe mostrarse en primera persona al actor y en segunda persona a todos los demás. Los objetos también saben si sus nombres son propios o no (y, por lo tanto, si "el" o "a / an" se les debe aplicar alguna vez), existen modelos de datos que me permiten especificar que "el" o "a / an "normalmente se esperaría que se aplicara a un nombre no apropiado en esa posición, y mucho más.
Este hilo en Mudconnector es muy similar a su pregunta, y voy a los detalles de mi sistema ampliamente allí. Básicamente, la forma en que lo hago es lo que desearía si desea estar completamente libre de las capacidades subyacentes de su sistema de mensajería y está dispuesto a pagar un precio en la curva de aprendizaje por eso. (Al igual que vi vs. nano.)
fuente
Te aconsejaría que BESAS (que sea estúpidamente simple) y que aproveches las ventajas de la interfaz de texto.
Simplifica, simplifica, simplifica tanto como puedas. Elimine la complejidad incluso antes de comenzar a pensar en la codificación. En lugar de una oración, use dos oraciones para describir un evento, como hacen muchos juegos. ¿Recuerdas la puerta de Baldur ? No es un juego de texto, pero el daño se describe con texto;)
Divida la información entre la fuente del evento y su consecuencia.
Por ejemplo :
También recomendaría usar siempre la tercera persona del singular, ya sea un nombre propio o común.
Además, aunque el inglés es un idioma internacional importante, si quieres tener un mayor impacto emocional y tocar un mercado más grande, es posible que necesites traducir tu juego a otros idiomas.
Si tiene la intención de hacerlo, tenga en cuenta que la estructura de la oración puede ser diferente en otros idiomas. Según Wikipedia , el 45% de los idiomas disponibles construyen la oración en el orden SOV (sujeto-objeto-verbo), donde el 42% (como el inglés) construye la oración en el orden SVO; como Inglés.
fuente