CAAD
https://foro.caad.es/

Nadar en Inform
https://foro.caad.es/viewtopic.php?f=12&t=1089
Página 1 de 1

Autor:  grendelkhan [ 03 Abr 2006 10:53 ]
Asunto:  Nadar en Inform

Hola!

Tengo una duda con la orden "Nadar" en Inform. Resulta que hay un lago en el cual el prota puede nadar, para esto quiero que pueda nadar hacia el fondo y hacia la superficie. He creado el objeto lago, el objeto fondo y el objeto superficie, de tal forma que, capturando la opción nadar en el antes del objeto referenciado, imprima un "Nadas hacia el fondo, tal y tal" o bien {"Nadas hacia la superficie"; JugadorA(orilla);}

Lamentablemente al probar el juego, al escribir nadar hacia fondo o superficie invariablemente me pregunta si quiero nadar, a lo que responde que no hay suficiente agua. ¿Qué estoy haciendo mal?

Autor:  Mel Hython [ 03 Abr 2006 10:55 ]
Asunto:  Re: Nadar en Inform

grendelkhan escribió:
Hola!

Tengo una duda con la orden "Nadar" en Inform. Resulta que hay un lago en el cual el prota puede nadar, para esto quiero que pueda nadar hacia el fondo y hacia la superficie. He creado el objeto lago, el objeto fondo y el objeto superficie, de tal forma que, capturando la opción nadar en el antes del objeto referenciado, imprima un "Nadas hacia el fondo, tal y tal" o bien {"Nadas hacia la superficie"; JugadorA(orilla);}

Lamentablemente al probar el juego, al escribir nadar hacia fondo o superficie invariablemente me pregunta si quiero nadar, a lo que responde que no hay suficiente agua. ¿Qué estoy haciendo mal?


Necesitaré algo más de detalle de cómo lo estás intentando implementar, me lo mandas por correo?

Autor:  grendelkhan [ 03 Abr 2006 11:48 ]
Asunto: 

Ok, tendré que enviarlo mañana, ya que estoy en el trabajo y en casa no tengo internet (la migración a adsl comienza a dar sus frutos), pero mas o menos la cosa es así: (lo escribo de memoria)

Objeto orilla "orilla del lago"
with nombre 'orilla',
antes [; nadar, entrar, meterse: {print "Con gran estilo, te lanzas al lago"; EsperarTecla (0); JugadorA (lago); rtrue;}
];
descripcion "Es la orilla del lago",
has localidad luz;

Objeto lago "dentro del lago"
with nombre 'lago' 'aguas',
antes [; nadar, Ir, IrAmbiguo, Salir: "¿Hacia donde quieres nadar exactamente?"; default: <<examinar self>>;
],
descripcion "Estás dentro del lago, nadando entre sus aguas. Puedes observar en el fondo un bonito manto de algas marinas.",
has localidad luz;

Objeto superficie "superficie" lago
with nombre 'superficie' 'orilla',
antes [; nadar: JugadorA (orilla);],
has escenario;

Objeto fondo "fondo" lago
with nombre 'fondo' 'algas' 'marinas' 'manto',
antes [; nadar: "Nadas hacia el fondo, descubriendo un secreto.";
default: <<examinar self>>;
],
descripcion "Bonito.",
has escenario;

Autor:  baltasarq [ 03 Abr 2006 11:53 ]
Asunto:  Nadar ... en el agua

Hola !

grendelkhan escribió:
Objeto orilla "orilla del lago"
with nombre 'orilla',
antes [; nadar, entrar, meterse: {print "Con gran estilo, te lanzas al lago"; EsperarTecla (0); JugadorA (lago); rtrue;}
];
descripcion "Es la orilla del lago",
has localidad luz;

Si no me equivoco, se resolvería utilizando reaccionar_antes() en lugar de antes(), y comprobando que uno se refiere a la superficie, fondo ... etc.

Salud !

Baltasar

Autor:  Mel Hython [ 03 Abr 2006 14:21 ]
Asunto: 

grendelkhan escribió:
Ok, tendré que enviarlo mañana, ya que estoy en el trabajo y en casa no tengo internet (la migración a adsl comienza a dar sus frutos), pero mas o menos la cosa es así: (lo escribo de memoria)
[...]


Gracias, te lo miro esta tarde, pero sólo una cosilla, imagino que habrás extendido ya la gramática de 'nadar', ¿no?

Lo digo porque en la actual solo pone 'nadar *', no 'nadar hacia' y en la GramaticaExperta.h de Mapache veo que tampoco está.

Pásame cómo las has extendido tb y así veo el problema entero.

Autor:  Invitado [ 03 Abr 2006 14:42 ]
Asunto: 

Hum....

Pues va a ser que no.

No he modificado para nada el verbo Nadar... pensaba que por defecto "hacia" y "en" eran ignorados por el párser. Esta noche extenderé la gramática a ver si me sale. Lo que estaba haciendo ayer era crear un verbo "bucear"

Autor:  Mel Hython [ 03 Abr 2006 16:13 ]
Asunto: 

Anonymous escribió:
Hum....

Pues va a ser que no.

No he modificado para nada el verbo Nadar... pensaba que por defecto "hacia" y "en" eran ignorados por el párser. Esta noche extenderé la gramática a ver si me sale. Lo que estaba haciendo ayer era crear un verbo "bucear"


Lamentablemente Inform no es 'best effort', o consigue un matching o se queja y se queja de una forma que no me suele gustar mucho.

Pero además si lo piensas un momento si no tienes una entrada:

Verb 'nada'
* 'hacia' uno --> Nadar;

(O parecido)

Simplemente no habría ningún 'uno' sobre el que se activaría el proceso 'antes' en acción ##Nadar. Así que estaría pasando por el 'reaccionar_antes' de la localidad (como decía Baltasar) pero nunca sobre un 'antes' del objeto 'hacia' el que pretendes nadar.

De hecho para ser 'puristas' yo crearía una acción 'NadarHacia' y extendería la sintaxis de 'nada' indicando la nueva acción y no la antigua.

Autor:  sarganar [ 03 Abr 2006 19:08 ]
Asunto: 

Mel Hython escribió:
Simplemente no habría ningún 'uno' sobre el que se activaría el proceso 'antes' en acción ##Nadar. Así que estaría pasando por el 'reaccionar_antes' de la localidad (como decía Baltasar) pero nunca sobre un 'antes' del objeto 'hacia' el que pretendes nadar.


esasi, maomeno....

Si te fijas en la rutina RutinasAntes de Eparser.h veras como se resuelve el asunto para Nadar y los demas verbos G3;

[ RutinasAntes;
if (RutinaPreJuego()~=0) rtrue;
if (EjecutarRutinas(jugador,ordenes)~=0) rtrue;
if (localizacion~=0 && EjecutarRutinas(localizacion,antes)~=0) rtrue;
razon_alcance=RAZON_REACCIONAR_ANTES; parser_uno=0;
BuscarEnAlcance(TopeAlcanzable(jugador),jugador,0); razon_alcance=RAZON_PARSING;
if (parser_uno~=0) rtrue;
if (dat1>1 && EjecutarRutinas(dat1,antes)~=0) rtrue;
rfalse;
];

osea (pseudo-codeando):

Antes
RutinaPrejuego()
Jugador.ordenes()
localidad.antes()
objetos_en_alcance.reaccionar_antes()
obj_uno.antes()
Durante
NadarSub() [en Acciones.h]
Despues
Acciones G3 no tienen 'despues'.

Espero no haber metido la pata.
Una pregunta: qué hace "has localidad"?

Saludos.
Sarganar (que se aleja nadando por el Pacifico)

>nada por el Pacifico hacia America
>No hay suficiente agua en la que nadar
>D'hou!

Autor:  Mel Hython [ 04 Abr 2006 09:30 ]
Asunto: 

Sarganar escribió:
Mel Hython escribió:
Simplemente no habría ningún 'uno' sobre el que se activaría el proceso 'antes' en acción ##Nadar. Así que estaría pasando por el 'reaccionar_antes' de la localidad (como decía Baltasar) pero nunca sobre un 'antes' del objeto 'hacia' el que pretendes nadar.


esasi, maomeno....

Si te fijas en la rutina RutinasAntes de Eparser.h veras como se resuelve el asunto para Nadar y los demas verbos G3;

[...]
Saludos.
Sarganar (que se aleja nadando por el Pacifico)

>nada por el Pacifico hacia America
>No hay suficiente agua en la que nadar
>D'hou!


Ya, pero eso no le ayuda mucho...

Lo que necesita grendel es cambiar la gramática porque quiere poder nadar 'hacia' diversos objetivos. Y para eso no puede usar los 'reaccionar_antes' como indica Baltasar. Ni tampoco se puede usar el 'antes' de la localidad como sugiere (y confunde) el manual de referencia.

En definitiva, grendel, lo primero que tienes que hacer es extender la gramática.

Si con eso no te funciona mándame el código y veo que pasa...

Autor:  grendelkhan [ 04 Abr 2006 09:58 ]
Asunto: 

Estoy en ello, de momento mis resultados son infructuosos, si no me veo capaz te enviaré el código. Lo que funciona es "nadar" en el reaccionar_antes del lago, que te conduce al interior del lago, pero no se puede usar para "nadar hacia" ya que el antes no funciona.

Por otro lado, tampoco fui capaz ayer de lanzarme al lago, ya que en el reaccionar_antes al poner 'nadar' 'tirar' 'lanzar', para que el jugador pueda escribir libremente: "nadar en lago, tirate al lago, lánzate al lago" pues resulta que no funciona porque >lánzate al lago (primero tratas cogerte a ti mismo) Siempre te tienes a ti mismo.
¿Porqué Inform es tan puñeteramente listo? ¿Alguna sugerencia para tratar de lanzarse al lago?

Autor:  baltasarq [ 04 Abr 2006 12:43 ]
Asunto:  Nadar

Hola !

grendelkhan escribió:
Estoy en ello, de momento mis resultados son infructuosos, si no me veo capaz te enviaré el código. Lo que funciona es "nadar" en el reaccionar_antes del lago, que te conduce al interior del lago, pero no se puede usar para "nadar hacia" ya que el antes no funciona.


Tienes que hacer lo siguiente:

1. Después de incluir gramática.h, tienes que extender la gramática de nadar:

replace 'nada' first
with
* 'a//' noun -> nadar
* 'hacia' noun -> nadar
* 'al' noun -> nadar
;

2. En el objeto tienes que sustituir antes [; por reaccionar_antes [;

3. Dentro de reaccionar_antes(), debes comprobar si uno es la orilla ... etc. Probablemente deberás crear en la localidad del lago objetos falsos que representen esos "lugares".

Creo que te vendría bien leerte el artículo sobre gramática informATE! que escribir para SPAC hace un número o dos. Así, verías que lo de "lanzarte" al lago lo puedes solucionar con el reaccionar_antes del jugador.

Salud !

Baltasar

Autor:  Mel Hython [ 04 Abr 2006 13:57 ]
Asunto: 

grendelkhan escribió:
Estoy en ello, de momento mis resultados son infructuosos, si no me veo capaz te enviaré el código. Lo que funciona es "nadar" en el reaccionar_antes del lago, que te conduce al interior del lago, pero no se puede usar para "nadar hacia" ya que el antes no funciona.

Por otro lado, tampoco fui capaz ayer de lanzarme al lago, ya que en el reaccionar_antes al poner 'nadar' 'tirar' 'lanzar', para que el jugador pueda escribir libremente: "nadar en lago, tirate al lago, lánzate al lago" pues resulta que no funciona porque >lánzate al lago (primero tratas cogerte a ti mismo) Siempre te tienes a ti mismo.
¿Porqué Inform es tan puñeteramente listo? ¿Alguna sugerencia para tratar de lanzarse al lago?


Lo que ha puesto Baltasar justo encima creo que cubre practicamente todo lo que necesitas.

Pero si tienes alguna otra duda, no te cortes en preguntar.

Autor:  grendelkhan [ 05 Abr 2006 08:18 ]
Asunto: 

Ya he conseguido hacerlo funcionar, mañana pondré el código correcto ya que la solución no es tan fácil (ni tan complicada) para que funcione correctamente.

Gracias a todos!

Autor:  grendelkhan [ 06 Abr 2006 08:48 ]
Asunto:  Solución a Nadar en Inform

Posteo aquí la forma de Nadar en Inform (método Grendeliano):

Citar:
Extend 'nada'
* 'a//' noun -> nadar
* 'hacia' noun -> nadar
* 'en' noun -> nadar
* 'al' noun -> nadar;

Verb 'bucear' 'bucea' 'buceo'
* 'a//' noun -> nadar
* 'hacia' noun -> nadar
* 'en' noun -> nadar
* 'al' noun -> nadar;


Éste código tiene que ir después de incluir Gramatica.h (yo lo he puesto dentro de GramaticaExperta.h)

Después, se utiliza en una localidad con dos objetos llamados "orilla" y "fondo" por ejemplo, en pseudocódigo:

Citar:
Lugar lago "lago"
with descripción "Estás nadando en un lago, puedes ver un bonito fondo de algas marinas.";

Objeto -> fondo "fondo del lago"
reaccionar_antes [; nadar: if (uno ~= fondo or orilla) "Nadas por el lago un rato.";
Ir, Salir, IrAmbiguo: "Nadar hacia donde?";
],
antes [; nadar: "Lo que sea...";],
descripcion "Es un bonito fondo de algas marinas...",
has escenario;

Objeto -> orilla "orilla del lago"
with nombre 'orilla' 'superficie' 'salida',
antes [; nadar: JugadorA (bosque);],
descripcion "La orilla está a unos metros de aquí...",
has escenario;

Página 1 de 1 Todos los horarios son UTC + 1 hora
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/