CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 16 Jul 2020 06:01

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 9 mensajes ] 
Autor Mensaje
NotaPublicado: 10 Dic 2010 14:55 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
He estado repasando hilos y temas sobre este asunto y he encontrado dos tipos de intervenciones por parte del parser robusto que me pueden molestar.

Que el parser robusto intervenga cuando no reconoce un verbo, no deja de ser un problema del programador, se trata de añadir más y más verbos al verbos.lan, hasta que no quede ninguno.

Que el parser robusto intervenga cuando el jugador comete un error tipográfico escribiendo un comando, me preocupa mucho más, porque es algo que no puedo controlar de ningún modo.

Que el parser robusto intervenga cuando el jugador usa la forma "le" de los verbos, aunque sea de forma redundante, también me preocupa porque tampoco lo puedo controlar.

Citar:

>Grita
El grito sobresalta al asesino, notas cierto movimiento de ramas justo en frente de ti.

>dipara al asesino -->grita
Tu grito revela tu posición.
No escuchas la bala que acaba con tu vida, nadie lo hace.


*******************

>Coge el dinero
Coges el dinero.
Es un billete de 50 euros.

> Dale el dinero al casero ---> coge el dinero
Ya tienes el dinero.

El casero se impacienta...

> Dale el dinero al casero ---> coge el dinero
Ya tienes el dinero.

El casero se marcha y se lleva las llaves de tu casa.
Estás en la calle.



En el primer caso se ve que es un error del jugador, aún así las consecuencias no son gratas.

En el segundo caso a pesar de ser redundante e incorrecto, causa una situación parecida y que no parece sino un bug.

Así, que esas son las dos situaciones en las que me molesta que el parser robusto intervenga.

Te mandé una lista de verbos transitivos ¿te acuerdas?
Si no la encuentras me lo dices y te la vuelvo a mandar.

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 10 Dic 2010 15:25 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
Vale, las situaciones de los errores tipográficos que comentas deberían resolverse al implementar lo de los verbos transitivos e intransitivos. La lista de transitivos que me mandaste aún la tengo. Lo que pasa es que no la he usado porque el tema es implementar el código que haga uso de ella, que es lo que a ver si hago en navidades.

Respecto a lo del "le", puedo hacer que las formas verbales que terminan en "le" sean reconocidas como verbos, y por lo tanto cuando aparezcan el parser no "adivine" otro verbo (como sucede con los verbos normales que no terminan en "le"). Esto es un arreglo mucho más fácil que lo de los transitivos, puedo hacerlo en unos minutos.

Eso sí, eso sólo haría que el parser robusto no saltara en ese caso; pero al decirle "dale el dinero" te diría que no entiende si no has tratado "dale"... te recuerdo por si acaso que, según habíamos dicho en hilos anteriores (véase viewtopic.php?f=31&t=3911&hilit=pronombre+le ), como el "le" puede ser o no enfático y depende del contexto si lo es o no, es tarea del programador de la aventura darle tratamiento. Así pues, si la aventura no entiende "dale" realmente el problema de fondo es que no has definido "dale", no es el parsing robusto. Otra cosa es que se adivine un verbo el mensaje que se le da al jugador sea desconcertante ("Ya tienes el dinero" en vez de "No entiendo"), eso sí es culpa del parsing robusto y lo arreglaré como he dicho en el párrafo anterior.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 10 Dic 2010 16:57 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
No sé si te estoy entendiendo...
Lo que siguen son ejemplos en los que según dices el parser robusto es útil.

> atacar a Jorge
> escupirle

> mirar el coche
> arreglarle la rueda

> mira al enfermo
> dale la medicina

Sin embargo yo he hecho la prueba y me he encontrado con esto:


>mira al rey
El rey te saluda desde su trono.

>dale la corona
Es una corona de oro macizo

¿Seguro que lo ha resuelto?
¿Es el comportamiento esperado?
Igual es que ya había tocado yo algo, no sé...


Sí que parece funcionar con esto:
>ex el cetro
Es un cetro real.

>dáselo al rey
El rey te hace una reverencia al aceptar el presente.

PD: No toques nada de este tema del "le", hasta que no tenga claro el asunto. Si cuesta tan poco como dices siempre se puede dejar para última hora.

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 10 Dic 2010 17:21 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
No, no. Es que estamos mezclando conceptos. El tema del "le" no lo he implementado en absoluto, ni con parser robusto ni sin él. Y no lo he implementado por el motivo que ya hemos hablado varias veces: que no hay manera de distinguir el "le" enfático del "le" no enfático sin conocer el contexto. Para que nos aclaremos:

Con parser robusto actual sin arreglo:

> atacar a Jorge
Atacas a Jorge.
> escupirle -> no lo reconoce como verbo -> prueba con el verbo "atacar"
Atacas a Jorge.

Con parser robusto + arreglo:

> atacar a Jorge
Atacas a Jorge.
> escupirle -> lo reconoce como verbo así que no prueba el verbo anterior, pero no sabe qué tiene que hacer ante ese verbo porque el programador no lo ha implementado con "le"
No entiendo...

Desactivando por completo el parser robusto:

> atacar a Jorge
Atacas a Jorge.
> escupirle -> no sabe lo que es porque el programador no lo ha implementado con "le"
No entiendo...

Como ves, el problema de que adivine el verbo y ataque a Jorge sólo existe con el parser robusto sin arreglo. Pero arreglar eso no hace "mágicamente" que el parser entienda el "le". Eso lo tiene que hacer el programador, tal como está el AGE ahora. Para conseguir el comportamiento realmente deseado, que sería

> atacar a Jorge
Atacas a Jorge.
> escupirle
Le lanzas un escupitajo a Jorge en toda la cara.

Necesitarías hacer algo así en el preprocessCommand:

Código:
cadenaCompleta = cadenaCompleta.replace("escupirle","escupirlo");
cadenaCompleta = cadenaCompleta.replace("escupele","escupirlo");
//...
cadenaCompleta = cadenaCompleta.replace("darle","dar");
cadenaCompleta = cadenaCompleta.replace("dale","dar");
//...


Para reflejar que por ejemplo en tu aventura el le de escupir no es enfático (sino que es de complemento indirecto), mientras que el le de dar sí lo es.

Pero esta última solución funcionaría tanto con parser robusto como sin él. Y si no haces esto, el "le" no va a funcionar ni con parser robusto ni sin él. La única diferencia que mete ahí el parser robusto es que al no reconocer el "le" adivina otro verbo, y eso es lo que puedo arreglar.

Espero que ahora me haya explicado mejor.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 10 Dic 2010 17:33 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Necesitarías hacer algo así en el preprocessCommand:

Código:
cadenaCompleta = cadenaCompleta.replace("escupirle","escupirlo");
cadenaCompleta = cadenaCompleta.replace("escupele","escupirlo");
//...
cadenaCompleta = cadenaCompleta.replace("darle","dar");
cadenaCompleta = cadenaCompleta.replace("dale","dar");
//...


Para reflejar que por ejemplo en tu aventura el le de escupir no es enfático (sino que es de complemento indirecto), mientras que el le de dar sí lo es.

Pero esta última solución funcionaría tanto con parser robusto como sin él. Y si no haces esto, el "le" no va a funcionar ni con parser robusto ni sin él. La única diferencia que mete ahí el parser robusto es que al no reconocer el "le" adivina otro verbo, y eso es lo que puedo arreglar.

Espero que ahora me haya explicado mejor.


Sí, lo del preprocessCommand ya lo había hecho, pero la solución era a medias... por eso lo había desechado por ahora.
Otra opción que estaba mirando era capturar la accion "dale" desde el mundo y responder en consecuencia, intentando averiguar si en la localidad hay otros psis, y darlo directamente a uno, o preguntar a quién ha de darlo. Pero mi primer intento no ha funcionado correctamente.
Ha sido entonces cuando he comprobado lo que aquí he mostrado y que al parecer había entendido mal anteriormente.
No toques nada, ya haré yo lo que sea.

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 10 Dic 2010 17:42 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
No, el arreglo que he dicho del parser robusto lo voy a hacer igual, porque con eso no se pierde nunca nada. "Dale" es una forma verbal y está bien que la reconozca como tal y que no adivine otro verbo como ahora. Así que no hay ningún motivo para no hacerlo. Al menos hará que si un autor se olvida de implementar el "le", al jugador le salga un mensaje de error normal y no una acción que no es la que quería. Y eso es una mejora.

Sólo quería que fueras consciente de que, eso... ese arreglo lo que hace es hacer que el parser robusto no actúe si un autor se olvida de implementar el "le"... pero no sustituye a la implementación del "le". Así que si ante "dale" quieres que la aventura realmente dé el objeto, vas a tener que arreglar ese preprocessCommand o alguna otra solución para "dale" (lo que dices de los PSI's puede funcionar, dependiendo del contexto). Y esto tanto con parser robusto como sin él.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 10 Dic 2010 19:53 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
Ya he implementado el mencionado arreglo del "le", falta lo de los transitivos e intransitivos que como he dicho llevará más tiempo.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 10 Dic 2010 19:57 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Ya he implementado el mencionado arreglo del "le", falta lo de los transitivos e intransitivos que como he dicho llevará más tiempo.



Cuando puedas me pasas esta nueva versión para adaptarme mi código al nuevo comportamiento.
Gracias :)

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 10 Dic 2010 19:59 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
jenesis escribió:
Cuando puedas me pasas esta nueva versión para adaptarme mi código al nuevo comportamiento.
Gracias :)


Sí, el motivo de que no te la pase ya es que me dejé en otro ordenador los cambios en el sonido que hacen que vaya mejor en ubuntu, ya que me olvidé de committearlos al repositorio.

Esta noche tendré acceso a ese ordenador otra vez, así que ya juntaré los cambios de hoy con ésos y te pasaré la versión.

De todas formas, para esto del "le" no deberías necesitar cambiar ningún código, ya que lo único que mejora es el comportamiento cuando un "le" no está implementado, y tú lo que quieres es implementarlo.

Eso sí, la versión que te mande de noche también incluirá los métodos reportAction y say con colores, y ahí sí que te interesará cambiar tu código para usarlos.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 9 mensajes ] 

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM