MODVS VIVENDI - SPAC - Club de Aventuras AD
MODVS VIVENDI - SPAC - Club de Aventuras AD
MODVS VIVENDI - SPAC - Club de Aventuras AD
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
TUTORIAL<br />
"jarra <strong>de</strong> leche" <strong>de</strong>bido a que la "leche"<br />
está <strong>de</strong>ntro <strong>de</strong> la jarra (En caso <strong>de</strong><br />
empate el parser consi<strong>de</strong>ra más<br />
importantes los objetos que no están<br />
<strong>de</strong>ntro <strong>de</strong> otro, y toma su propia<br />
<strong>de</strong>cisión).<br />
Si moviéramos el objeto "leche" a la<br />
localidad, obtendríamos una pregunta<br />
<strong>de</strong> <strong>de</strong>sambiguación, al existir empate:<br />
¿Cuál concretamente, la jarra con leche<br />
o la leche <strong>de</strong> la jarra?<br />
>x leche<br />
Leche, la jarra está llena <strong>de</strong> leche.<br />
Correcto<br />
>x blanca<br />
Leche blanca, la jarra está llena <strong>de</strong><br />
leche.<br />
Nuevo problema: el sistema <strong>de</strong><br />
puntuación por <strong>de</strong>fecto valora los<br />
adjetivos aun ante la ausencia <strong>de</strong> un<br />
nombre, dando lugar a extrañezas como<br />
ésta. O incluso cosas peores, como que<br />
al escribir "EXAMINAR CONTIENE",<br />
el parser <strong>de</strong>tecte que nos referimos a<br />
alguna <strong>de</strong> las jarras:<br />
>x contiene<br />
¿Cuál concretamente, la jarra con leche<br />
o la jarra con agua?<br />
Ahora vamos a modificar el código <strong>de</strong>l<br />
ejemplo <strong>de</strong> arriba, <strong>de</strong>scomentando las<br />
siguientes líneas:<br />
Replace ParseNoun;<br />
Inclu<strong>de</strong> "IntnombreINFSP.h";<br />
Compilamos <strong>de</strong> nuevo, y algo ha<br />
cambiado en el parseado, vamos a ver:<br />
Pue<strong>de</strong>s ver una jarra con leche y una<br />
jarra con agua.<br />
>x blanca<br />
No veo eso que dices.<br />
Hemos arreglado lo <strong>de</strong> los adjetivos que<br />
querían tener <strong>de</strong>masiado protagonismo.<br />
>x leche blanca<br />
Leche blanca, la jarra está llena <strong>de</strong><br />
leche.<br />
Como vemos, los adjetivos funcionan<br />
sólo acompañados <strong>de</strong> alguno <strong>de</strong> sus<br />
nombres.<br />
>x jarra<br />
¿Cuál concretamente, la jarra con leche<br />
o la jarra con agua?<br />
>agua<br />
Es una jarra que contiene agua<br />
La pregunta <strong>de</strong> <strong>de</strong>sambiguación <strong>de</strong>l<br />
parser ante objetos con nombre idéntico<br />
sigue funcionando correctamente.<br />
>x jarra <strong>de</strong> leche<br />
Es una jarra que contiene leche<br />
Y si <strong>de</strong>sambiguamos nosotros<br />
directamente en la or<strong>de</strong>n, nos<br />
ahorramos la pregunta <strong>de</strong>l parser.<br />
>x leche <strong>de</strong> jarra<br />
Es una jarra que contiene leche<br />
Seguimos con el mismo problema <strong>de</strong><br />
antes. Ambos objetos tienen la misma<br />
puntuación, pero la leche está contenida<br />
<strong>de</strong>ntro <strong>de</strong> la jarra y sale perdiendo.<br />
En cualquier caso, el sacar la leche <strong>de</strong> la<br />
jarra no arreglaría el problema,<br />
entraríamos en un bucle <strong>de</strong> preguntas<br />
"leche <strong>de</strong> jarra" versus "jarra <strong>de</strong> leche"<br />
<strong>de</strong>l que sólo saldríamos aportando una<br />
palabra que esté contenida en el campo<br />
name o adjectives <strong>de</strong> uno <strong>de</strong> los objetos<br />
y no en el otro, por ejemplo:<br />
Con "x leche BLANCA <strong>de</strong> la jarra"<br />
ganaría la leche.<br />
Con "x jarra QUE CONTIENE leche"<br />
ganaría la jarra.<br />
Pero <strong>de</strong> todos modos, <strong>de</strong> la misma<br />
forma:<br />
Con "x jarra <strong>de</strong> la leche BLANCA"<br />
seguiría ganando la leche.<br />
Y con "x leche QUE CONTIENE la<br />
jarra" seguiría ganando la jarra.<br />
Desambiguando en Inform 6<br />
De modo que nuestro problema sigue<br />
ahí.<br />
Pero vamos a solucionarlo en seguida:<br />
Para empezar <strong>de</strong>scomentamos la línea<br />
que le otorga prioritario al objeto<br />
“leche<strong>de</strong>lajarra”:<br />
object leche<strong>de</strong>lajarra "leche <strong>de</strong> la jarra"<br />
habitacion<br />
with name 'leche',<br />
adjectives 'jarra' 'blanca',<br />
prioritario 3,<br />
<strong>de</strong>scription "Leche blanca, la jarra está llena<br />
<strong>de</strong> leche.",<br />
has female;<br />
De modo que a partir <strong>de</strong> ahora en caso<br />
<strong>de</strong> empate siempre ganará la leche sobre<br />
la jarra.<br />
Si el objeto tiene la propiedad<br />
prioritario, al elegir el objeto ganador,<br />
en caso <strong>de</strong> empate éste recibirá unos<br />
puntos extra, por enchufe.<br />
Según vemos en el código, en lugar <strong>de</strong><br />
un punto por coinci<strong>de</strong>ncia, recibiría el<br />
valor <strong>de</strong> su propiedad prioritario más<br />
otros dos, un total <strong>de</strong> 5 puntos.<br />
La función ChooseObjects se encarga <strong>de</strong><br />
eso: <strong>de</strong> adjudicar puntos entre todos los<br />
objetos en base a las coinci<strong>de</strong>ncias <strong>de</strong> su<br />
vocabulario con lo que ha escrito el<br />
jugador para <strong>de</strong>terminar cuál <strong>de</strong> ellos es<br />
el ganador.<br />
Sólo con esto, la leche ganaría siempre<br />
con sólo cumplir que el jugador haya<br />
escrito "leche", y tampoco es lo que<br />
queremos, pues sería elegida al escribir<br />
"jarra <strong>de</strong> leche".<br />
Vamos a plantear una regla sencilla tal<br />
que, si el jugador escribe jarra antes que<br />
leche, significará que se refiere a la jarra<br />
<strong>de</strong> leche; y si en cambio escribe leche<br />
antes que jarra, se referirá a la leche <strong>de</strong> la<br />
jarra.<br />
Añadiremos este código <strong>de</strong>trás <strong>de</strong> la<br />
función Initialise <strong>de</strong> nuestro listado<br />
(ojo, sólo funciona para compilar en<br />
Glulx, al final incluiré las pequeñas<br />
modificaciones para que compile en<br />
<strong>SPAC</strong> – Octubre 2010 / 41