CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 23 Sep 2018 10:12

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 13 mensajes ] 
Autor Mensaje
NotaPublicado: 28 Mar 2011 12:49 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
String preprocessCommand ( Player jugador , String cadenaCompleta )
{
String nuevaCadena = noaccents_preprocessCommand ( jugador , cadenaCompleta );
nuevaCadena = nuevaCadena.toLowerCase();

nuevaCadena = nuevaCadena.replaceAll( "e " , "e " );
nuevaCadena = nuevaCadena.replaceAll( "s " , "e " );
nuevaCadena = nuevaCadena.replaceAll( "n " , "n " );
nuevaCadena = nuevaCadena.replaceAll( "o " , "o " );


return nuevaCadena;


}


>e
el verbo es ir
No parece haber salida en esa dirección.

¿Qué estoy haciendo mal?

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


Arriba
 Perfil  
 
NotaPublicado: 28 Mar 2011 13:02 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5303
Ubicación: Coruña
Hum, no entiendo muy bien lo que querías hacer en este preprocessCommand. Pero el código que tienes no hace absolutamente nada, porque al hacer por ejemplo

Código:
nuevaCadena = nuevaCadena.replaceAll( "e " , "e " );


Lo que le estás diciendo es "cambia las apariciones de una e seguida de espacio en la cadena por una e seguida de espacio"... o sea... que no haga nada de nada :D

Si lo que quieres es que la "e" no se asocie a "ir al este", puedes hacerlo de las siguientes maneras:

- Opción 1: en el preprocessCommand mirar directamente si la cadena es una "e" y hacer lo que quieras que haga la "e", sin usar el parseCommand para nada,
Código:
if ( equals(nuevaCadena,"e") ) { jugador.write("Has elegido la opción e"); end(); }


- Opción 2: si realmente quieres usar el parseCommand por algún motivo (por ejemplo para que sea sensible a la localidad en la que estás, o para que se pueda uno referir a algún objeto después de la e), entonces puedes cambiar la "e " en el preprocessCommand por otra cosa, por ejemplo "letraE ", y luego en el parseCommand capturar "letraE".

- Opción 3: no usar el preprocessCommand para nada, y en el parseCommand capturar "ir este", sabiendo que la "e" se traduce a eso.

Yo creo que en principio lo más cómodo es la opción 1, aunque si por ejemplo quieres que la reacción ante la "e" sea distinta en distintas localidades, necesitarías la 2.

_________________
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: 28 Mar 2011 13:08 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Hum, no entiendo muy bien lo que querías hacer en este preprocessCommand. Pero el código que tienes no hace absolutamente nada, porque al hacer por ejemplo

Código:
nuevaCadena = nuevaCadena.replaceAll( "e " , "e " );


Lo que le estás diciendo es "cambia las apariciones de una e seguida de espacio en la cadena por una e seguida de espacio"... o sea... que no haga nada de nada :D

Si lo que quieres es que la "e" no se asocie a "ir al este", puedes hacerlo de las siguientes maneras:

- Opción 1: en el preprocessCommand mirar directamente si la cadena es una "e" y hacer lo que quieras que haga la "e", sin usar el parseCommand para nada,
Código:
if ( equals(nuevaCadena,"e") ) { jugador.write("Has elegido la opción e"); end(); }


- Opción 2: si realmente quieres usar el parseCommand por algún motivo (por ejemplo para que sea sensible a la localidad en la que estás, o para que se pueda uno referir a algún objeto después de la e), entonces puedes cambiar la "e " en el preprocessCommand por otra cosa, por ejemplo "letraE ", y luego en el parseCommand capturar "letraE".

- Opción 3: no usar el preprocessCommand para nada, y en el parseCommand capturar "ir este", sabiendo que la "e" se traduce a eso.

Yo creo que en principio lo más cómodo es la opción 1, aunque si por ejemplo quieres que la reacción ante la "e" sea distinta en distintas localidades, necesitarías la 2.


Vaya... yo pensaba que eso funcionaba de otro modo, que lo de la derecha era una especie de asignación de nuevo verbo...
Bueno, pues aclarado el asunto.
Es un libro juego y las opciones son "letras", "e" es una opción que estoy tratando como verbo.

Gracias :)

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


Arriba
 Perfil  
 
NotaPublicado: 28 Mar 2011 13:17 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
nuevaCadena = nuevaCadena.replaceAll( "e " , "mi_e " );

if(equals(verb,"mi_e"))

>e
el verbo es ir
No parece haber salida en esa dirección.

:(

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


Arriba
 Perfil  
 
NotaPublicado: 28 Mar 2011 13:34 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5303
Ubicación: Coruña
Sí, porque no me he dado cuenta de comentarte otro problema que tenías.

El método replaceAll busca todas las apariciones del primer parámetro en la cadena y las sustituye por el segundo. En este caso, el primer parámetro es una e seguida de un espacio. Pero tú no introduces una e seguida de un espacio, introduces una e a secas. Así que no cambia nada.

Si simplemente es un librojuego y el jugador va a teclear una e y nada más, lo más sencillo es que hagas:

if ( equals(nuevaCadena,"e") ) nuevaCadena = "mi_e";

Así cambiarás la e sola sin nada más por mi_e, y lo que no funcionaría sería una e con más cosas, pero eso seguramente sea lo que quieres, ya que la e no es realmente un verbo que se pueda llamar sobre un objeto.

_________________
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: 28 Mar 2011 13:38 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5303
Ubicación: Coruña
jenesis escribió:
Vaya... yo pensaba que eso funcionaba de otro modo, que lo de la derecha era una especie de asignación de nuevo verbo...

Aquí te dice exactamente lo que hace el preprocessCommand:

http://www.caad.es/aetheria/doc/doku.ph ... la_entrada

Esto no es un RTFM, no es que tenga ningún problema en responder dudas; pero es que si te lo lees a lo mejor me puedes dar feedback sobre si la documentación es clara o no y eso siempre vendría bien :)

_________________
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: 28 Mar 2011 13:52 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
jenesis escribió:
Vaya... yo pensaba que eso funcionaba de otro modo, que lo de la derecha era una especie de asignación de nuevo verbo...

Aquí te dice exactamente lo que hace el preprocessCommand:

http://www.caad.es/aetheria/doc/doku.ph ... la_entrada

Esto no es un RTFM, no es que tenga ningún problema en responder dudas; pero es que si te lo lees a lo mejor me puedes dar feedback sobre si la documentación es clara o no y eso siempre vendría bien :)


Sí que lo había visitado, aunque solo ha sido por verificar la sintaxis.
Y realmente hace lo que yo pensaba, solo que no sabía que proporcionara tantas alternativas, yo solo lo había usado para lo que he dicho, capturar un verbo y transformarlo en otro fuera inventado o no.
Es cierto que "e=e2, pero había pensado que en este caso debería haber sido "e= ir este", ya ha quedado aclarado que no es así. :)

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


Arriba
 Perfil  
 
NotaPublicado: 28 Mar 2011 13:55 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
>e
el verbo es medir
¿Cómo? ¿medir?

:shock: :shock: :shock:

PD: Acabo de desactivar el spellchecking y ya va bien.

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


Arriba
 Perfil  
 
NotaPublicado: 28 Mar 2011 14:50 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5303
Ubicación: Coruña
Claro. Es que mi_e se parece a "mide". Está a distancia 1 (cambiar la d por un _).

Si quisieras arreglarlo con el spell checking activado, podrías simplemente añadiendo mi_e como verbo:

Código:
world.getLanguage().addVerbEntry("mi_e","mi_e")


y así no te lo interpretaría como un verbo mal escrito.

Pero bueno, si es un librojuego el jugador no va a escribir realmente palabras, así que obviamente lo más lógico es desactivar el spell checking, como has hecho.

_________________
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: 28 Mar 2011 16:07 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
nuevaCadena = nuevaCadena.replaceAll( "m" , "mi_m" );

>a
el verbo es mi_mirar
el verbo es a
No entiendo...

Yo tampoco lo entiendo. :roll:

PD: Hay un forceCommand "mirar", eso sí.

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


Arriba
 Perfil  
 
NotaPublicado: 28 Mar 2011 16:43 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5303
Ubicación: Coruña
Es que no me estás haciendo ni caso :D

Hacer, como yo te dije, cosas como

Código:
if ( equals(nuevaCadena,"e") ) nuevaCadena = "mi_e";


= Bien.

Hacer cosas como

Código:
nuevaCadena = nuevaCadena.replaceAll( "m" , "mi_m" );


= abonar el terreno para el CAOS.

¿Por qué? Porque fíjate que estás haciendo varios reemplazos de ésos en cadena (dado que tienes varias opciones). Y fíjate que le estás diciendo que reemplace todas las letras m; aunque sea una m que está en medio de una palabra.

Si por ejemplo tienes algo como:

Código:
nuevaCadena = nuevaCadena.replaceAll( "a" , "mi_a" );
(...)
nuevaCadena = nuevaCadena.replaceAll( "i" , "mi_i" );
(...)
nuevaCadena = nuevaCadena.replaceAll( "m" , "mi_m" );


Si a esto le pones una a, hará:

"a" -> reemplazo las aes por "mi_a" -> "mi_a" -> reemplazo las ies por "mi_i" -> "mmi_i_a" -> reemplazo las emes por "mi_m" -> "mi_mmi_mi_i_a" -> caos.

En tu caso no ha sido tantísimo caos, pero sí que ha sido caos porque has hecho un forceCommand de mirar, eso contiene una m, entonces la m se cambia por mi_m y queda mi_mirar, claro.

_________________
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: 28 Mar 2011 17:05 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Es que no me estás haciendo ni caso :D

Hacer, como yo te dije, cosas como

Código:
if ( equals(nuevaCadena,"e") ) nuevaCadena = "mi_e";


= Bien.

Hacer cosas como

Código:
nuevaCadena = nuevaCadena.replaceAll( "m" , "mi_m" );


= abonar el terreno para el CAOS.

¿Por qué? Porque fíjate que estás haciendo varios reemplazos de ésos en cadena (dado que tienes varias opciones). Y fíjate que le estás diciendo que reemplace todas las letras m; aunque sea una m que está en medio de una palabra.

Si por ejemplo tienes algo como:

Código:
nuevaCadena = nuevaCadena.replaceAll( "a" , "mi_a" );
(...)
nuevaCadena = nuevaCadena.replaceAll( "i" , "mi_i" );
(...)
nuevaCadena = nuevaCadena.replaceAll( "m" , "mi_m" );


Si a esto le pones una a, hará:

"a" -> reemplazo las aes por "mi_a" -> "mi_a" -> reemplazo las ies por "mi_i" -> "mmi_i_a" -> reemplazo las emes por "mi_m" -> "mi_mmi_mi_i_a" -> caos.

En tu caso no ha sido tantísimo caos, pero sí que ha sido caos porque has hecho un forceCommand de mirar, eso contiene una m, entonces la m se cambia por mi_m y queda mi_mirar, claro.


Sí que te hago caso, otra cosa es que te entienda. :oops:
En la doc no se habla del método replaceAll, yo pensaba que ese metodo reemplazaba todo el input del jugador de tal modo que si el input era "m" y solo "m" se reemplazaba por "mi_m". Piensa que yo solo lo había usado para capturar el input "sacar" y transformarlo en "mi_sacar". Ahora si me dices que lo que hace es reemplazar cualquier m del input mi planteamiento era erróneo a todas luces y menos mal que dejé el espacio final o cuando alguien escribiera "sacarina", el parser leería "mi_sacarina". :roll:

Vale, creo que ya lo he entendido, o eso espero. :)

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


Arriba
 Perfil  
 
NotaPublicado: 28 Mar 2011 17:17 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5303
Ubicación: Coruña
Es que cuando hiciste el misacar inicialmente habías tenido justo ese problema (no era exactamente con sacarina, pero hacías varias sustituciones y te salían cosas raras), por eso te había dicho lo de poner el espacio.

replaceAll no sale en la documentación porque para los métodos de cadenas la documentación manda a la documentación de cadenas de java (ya están documentados ahí). Ese método lo tienes aquí:

http://download.oracle.com/javase/1.4.2 ... ang.String, java.lang.String)

_________________
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  [ 13 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 2 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:  
cron
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM