CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 21 Nov 2018 20:11

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 7 mensajes ] 
Autor Mensaje
NotaPublicado: 05 May 2009 16:02 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 10 Sep 2004 00:17
Mensajes: 3039
Ubicación: Chile
Saludos:

¿cómo extender una gramática para que reconozca múltiples objetos en su uso?

Ej: Atacar <PSI> con <objeto inventario 1> y <objeto inventario 1>

y más importante ¿cómo se maneja el Antes o el Vida para que reconozca qué objetos tengo o no en uso para la acción que usa <objeto inventario 1> y <objeto inventario 1>?

Se despide, de antemano agradecido,

_________________
[Incanus]
El Escritorio - Blog Aventurero y Literario


Arriba
 Perfil  
 
NotaPublicado: 05 May 2009 21:10 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
Incanus escribió:
Saludos:

¿cómo extender una gramática para que reconozca múltiples objetos en su uso?

Ej: Atacar <PSI> con <objeto inventario 1> y <objeto inventario 1>

y más importante ¿cómo se maneja el Antes o el Vida para que reconozca qué objetos tengo o no en uso para la acción que usa <objeto inventario 1> y <objeto inventario 1>?

Se despide, de antemano agradecido,


Si he entendido bien, quieres articular una gramática que detecte hasta tres objetos.
La solución que se me ocurre es extender a * topic ->atacarinconcreto para que trague con todo, y luego hacer un rastreado por cadenas, pasando del parseado por defecto.

Si es así, te puede interesar el código de Ad Verbum (si vas a compilar para máquina Z) o el de Venenarius Verborum, si lo vas a hacer para Glulx.
Si van por ahí los tiros te los paso.

Saludos.

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
NotaPublicado: 05 May 2009 21:33 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 10 Sep 2004 00:17
Mensajes: 3039
Ubicación: Chile
jarel escribió:
Si he entendido bien, quieres articular una gramática que detecte hasta tres objetos.


Exacto.


jarel escribió:
La solución que se me ocurre es extender a * topic ->atacarinconcreto para que trague con todo, y luego hacer un rastreado por cadenas, pasando del parseado por defecto.

Si es así, te puede interesar el código de Ad Verbum (si vas a compilar para máquina Z) o el de Venenarius Verborum, si lo vas a hacer para Glulx.
Si van por ahí los tiros te los paso.


Hmm... No he entendido mucho (yo entiendo con código en mano :-P). Envíame pues lo de Ad Verbum y lo reviso encantado.

¿Alguien más ha hecho algo parecido, para una librería de combates o así? (¿Baltasar?)

Se despide, de antemano agradecido,

Se despide,

_________________
[Incanus]
El Escritorio - Blog Aventurero y Literario


Arriba
 Perfil  
 
NotaPublicado: 06 May 2009 10:53 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 23 Abr 2004 08:49
Mensajes: 2909
Ubicación: España (Galicia)
Hola !

Incanus escribió:
¿Alguien más ha hecho algo parecido, para una librería de combates o así? (¿Baltasar?)


No, lo cierto es que nunca he tenido la necesidad de especificar hasta tres objetos. ¿Estás seguro de que quieres llegar a ese nivel de detalle?. Quizás deberías replanteártelo de cara a la sensación de jugabilidad para el jugador.

En cualquier caso, en mi famoso artículo (bueno, es una forma de hablar):

http://spac.caad.es/1/spac42.htm

Puedes ver, al final, como se hace una rutina de parsing. Lo que necesitarías es susituir el verbo "atacar":

Código:
Extend 'ataca' replace
 * topic -> atacaNuevo
;


Entonces, definir la rutina atacaNuevoSub:

Código:
[ atacaNuevoSub;
    ! parsing
];


Y ahí meter la rutina de parsing. También será útil crear una nueva variable global, llamada por ejemplo, third, de manera que puedas lanzar las acciones "normales", asignando noun al primer objeto, second al segundo objeto, y third al tercer objeto.

Código:
Global third;


Así:

Código:
[ atacaNuevoSub x y z;
    ! parsing
    ! ...
    third = z;
    <<attack x y>>;
];


Y en el objeto:

Código:
object Malo "el malo"
with
     before [;
               attack:
                         if ( second == objEspada
                          && third == AtaqueEnCabeza )
                         {
                         }
     ]
;


Tendrías que definir alguna constante más para las partes del cuerpo:

Código:
Constant AtaqueEnCabeza 0;
Constant AtaqueEnTorso 1;
Constant AtaqueEnMiembros 2;


Espero que te sirva de ayuda.

Salud !

Baltasar

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
NotaPublicado: 06 May 2009 14:20 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 10 Sep 2004 00:17
Mensajes: 3039
Ubicación: Chile
baltasarq escribió:
No, lo cierto es que nunca he tenido la necesidad de especificar hasta tres objetos. ¿Estás seguro de que quieres llegar a ese nivel de detalle?. Quizás deberías replanteártelo de cara a la sensación de jugabilidad para el jugador.


De hecho, estoy aceptando el
Código:
<acción> <sujeto> con <objeto en inventario 1>

en vez de
Código:
<acción> <sujeto> con <objeto en inventario 1> y <objeto en inventario 2>

y luego veo si el jugador tiene o no en inventario el <objeto en inventario 1>; y si lo tiene, qué pasa si tiene o no el <objeto en inventario 2> ... y funciona.

En efecto, puede que complique más la jugabilidad si extiendo la gramática para que acepte ambos objetos de inventario en una acción. De hecho...[spoiler="...no lo hice en Ofrenda a la Pincoya"] y para hacer fuego bastaba usar el pedernal sin explicitamente decir que se usaba el anzuelo; bastaba con tener ambos[/spoiler]y nadie nunca se quejó ;-)

baltasarq escribió:
En cualquier caso, en mi famoso artículo (bueno, es una forma de hablar):

http://spac.caad.es/1/spac42.htm

Puedes ver, al final, como se hace una rutina de parsing. Lo que necesitarías es susituir el verbo "atacar":[...]


Hmm... Sí tendría que ser así. Voy a ver qué tan difícil resulta; son varias acciones, no solo "Atacar" las que tendría que modificar... pero ya veo que es algo que voy a dejar para el final del desarrollo ;-) porque, como dije más arriba, la solución "alternativa" ya está implementada (y funciona, por cierto).

Se despide, muy agradecido,

_________________
[Incanus]
El Escritorio - Blog Aventurero y Literario


Arriba
 Perfil  
 
NotaPublicado: 06 May 2009 16:19 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
Te he mandado el código por email. Aunque la solución de Balta es más limpia y consecuente con el estilo de Inform, la de Ad verbum, cuando la desembrollas, es muy funcional.

Saludos

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
NotaPublicado: 06 May 2009 18:54 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 10 Sep 2004 00:17
Mensajes: 3039
Ubicación: Chile
jarel escribió:
Te he mandado el código por email. Aunque la solución de Balta es más limpia y consecuente con el estilo de Inform, la de Ad verbum, cuando la desembrollas, es muy funcional.

¡Gracias! Veré qué puedo hacer con ambas propuestas...

_________________
[Incanus]
El Escritorio - Blog Aventurero y Literario


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


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