CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 11 Ago 2020 23:55

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 14 mensajes ] 
Autor Mensaje
 Asunto: Nadar en Inform
NotaPublicado: 03 Abr 2006 10:53 
Desconectado
Implementador
Implementador

Registrado: 18 Mar 2004 19:26
Mensajes: 1481
Ubicación: Barcelona
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?

_________________
https://asvelin.itch.io/


Arriba
 Perfil  
 
NotaPublicado: 03 Abr 2006 10:55 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 21:40
Mensajes: 1444
Ubicación: Nímgar, Ciudad Lunar
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?


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 03 Abr 2006 11:48 
Desconectado
Implementador
Implementador

Registrado: 18 Mar 2004 19:26
Mensajes: 1481
Ubicación: Barcelona
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;

_________________
https://asvelin.itch.io/


Arriba
 Perfil  
 
NotaPublicado: 03 Abr 2006 11:53 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 23 Abr 2004 08:49
Mensajes: 2970
Ubicación: España (Galicia)
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

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 03 Abr 2006 14:21 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 21:40
Mensajes: 1444
Ubicación: Nímgar, Ciudad Lunar
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.


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 03 Abr 2006 14:42 
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"


Arriba
  
 
 Asunto:
NotaPublicado: 03 Abr 2006 16:13 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 21:40
Mensajes: 1444
Ubicación: Nímgar, Ciudad Lunar
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.


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 03 Abr 2006 19:08 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 15 Ene 2005 22:26
Mensajes: 780
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!


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 04 Abr 2006 09:30 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 21:40
Mensajes: 1444
Ubicación: Nímgar, Ciudad Lunar
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...


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 04 Abr 2006 09:58 
Desconectado
Implementador
Implementador

Registrado: 18 Mar 2004 19:26
Mensajes: 1481
Ubicación: Barcelona
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?

_________________
https://asvelin.itch.io/


Arriba
 Perfil  
 
 Asunto: Nadar
NotaPublicado: 04 Abr 2006 12:43 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 23 Abr 2004 08:49
Mensajes: 2970
Ubicación: España (Galicia)
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

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 04 Abr 2006 13:57 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 21:40
Mensajes: 1444
Ubicación: Nímgar, Ciudad Lunar
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.


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 05 Abr 2006 08:18 
Desconectado
Implementador
Implementador

Registrado: 18 Mar 2004 19:26
Mensajes: 1481
Ubicación: Barcelona
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!

_________________
https://asvelin.itch.io/


Arriba
 Perfil  
 
NotaPublicado: 06 Abr 2006 08:48 
Desconectado
Implementador
Implementador

Registrado: 18 Mar 2004 19:26
Mensajes: 1481
Ubicación: Barcelona
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;

_________________
https://asvelin.itch.io/


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 14 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 5 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