CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 21 Nov 2018 19:41

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 10 mensajes ] 
Autor Mensaje
NotaPublicado: 26 May 2009 16:52 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 726
Hola una vez más.

Sigo intentando hacer una pequeña aventura en ratos libres; y me he econtrado con
una situación que no se muy bien cómo programar. Tengo una habitación con
muchas ventanas iguales y el jugador tiene que ser capaz de abrir y cerrar una de
ellas. Lo que he hecho ha sido programar un objeto "ventanas" de decorado, que
sólo se puede examinar, y otro "ventana" con el que se puede interactuar más
(abrir, cerrar, romper, mirar a través suyo,...).

Ahora quería que todas las acciones que el jugador haga sobre el objeto
"ventanas", salvo Examinar, sean tratadas por el objeto "ventana"; pero la única
manera que sé de hacerlo es capturar todas las acciones posibles en la rutina
before de ventanas y pasárselas una a una a ventana.

Código:
Object ventanas "ventanas"
 with    description "....",
            before [;
                 Attack: <<Attack ventana>>;
                 Close:  <<Close ventana>>;
                 Examine: rfalse;
                 Open: <<Open ventana>>;
                 [...]
            ],
 has      scenery female pluralname;


Un código horrible. ¿Alguien podría decirme cuál es la forma correcta de
hacer eso? ¿Podría hacerse un sólo objeto ventana, con las palabras 'ventana' y
'ventanas' en su atributo name que diese una descripción diferente en
función de qué palabra ha introducido el jugador para referirse al objeto?

Gracias de antemano.
Un saludo!


Última edición por Makinaimo el 27 May 2009 00:43, editado 2 veces en total

Arriba
 Perfil  
 
NotaPublicado: 26 May 2009 18:14 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

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

A ver, esto no lo he probado nunca, pero...

Código:
Object ventanas "ventanas"
 with    description "....",
            before [;
                 Examine: rfalse;
                 default:
                         noun = ventana;
                         return ventana.before();
            ],
 has      scenery female pluralname;


Salud !

Baltasar

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
NotaPublicado: 26 May 2009 18:31 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 15 Dic 2004 21:28
Mensajes: 2302
Makinaimo escribió:
¿Podría hacerse un sólo objeto ventana, con las palabras 'ventana' y 'ventanas' en su atributo name que diese una descripción diferente en función de qué palabra ha introducido el jugador para referirse al objeto?


No, eso en Inform no puede hacerse, al menos de manera limpia.

Y tampoco creo que sea correcto desde el punto de vista de la orientación a objetos.


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 26 May 2009 19:27 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 726
Hmm... vale. Pues muchas gracias. Voy a probar eso que has comentado, Baltasarq.


Arriba
 Perfil  
 
 Asunto: I6Sp
NotaPublicado: 26 May 2009 21:02 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

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

Makinaimo escribió:
Hmm... vale. Pues muchas gracias. Voy a probar eso que has comentado, Baltasarq.


Se me ha ocurrido que con cambiar "noun" a lo mejor ya funciona, y es más limpio, pero no estoy nada seguro.

Es decir:

Código:
noun = ventana;
rfalse;


En lugar de,

Código:
noun = ventana;
return ventana.before();



No pierdes nada por intentarlo.

Salud !

Baltasar

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 26 May 2009 21:57 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 726
Vaya. He intentado programar la rutina de las dos maneras, pero no funcionan... romper ventanas sigue respondiendo "No debes preocuparte por eso.", en lugar de "Agarras la piedra y la lanzas contra una de las ventanas del salón. Tu madre se va a enfadar mucho...".

¿Alguna otra idea?


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 27 May 2009 00:41 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 726
Uhm... tal vez no sea una solución muy elegante y rompa un poco con la filosofía de la orientación a objetos, pero se me ha ocurrido implementar mi ventana personalizando su rutina parse_name (lo que me ha dado pie a estudiar un poco esta rutina, con la que no había hecho absolutamente nada hasta ahora). Creo que un código más o menos parecido a este ---espero que no esté demasiado mal--- podría funcionar para lo que quiero:

Código:
Object   ventana "ventana" Pasillo
 with name 'ventana' ...,
   adjectives 'salon' ...,
   num_plural false,
   parse_name [ w n m;
       w = NextWord();
       !! Comprueba si el usuario se refiere a las ventanas (en plural)
       if (w == 'ventanas') {
      parser_action == ##PluralFound;
      self.num_plural = true;
      SetPronoun('-las', self);
      n++;
      w = NextWord();
       } else self.num_plural = false;
       !! Comprueba conicidencias de nombre y adjetivos
       while (WordInProperty(w, self, name)) { n++; w = NextWord(); }
       while (WordInProperty(w, self, adjectives)) { m++; w = NextWord(); }
       !! Se exige una coincidencia de nombre en el comando del usuario
       if (n == 0) return 0; return n+m;      
   ],
   description [;
       if (self.num_plural == true) return self.description_plural();
       return self.description_singular();
   ],
   description_plural [...]
   description_singular [...]
   before [;
       [...]
   ],
 has   female static concealed openable ~open;


Y ahora me asalta una duda: ¿cómo se podría reconocer que el jugador se refiere al objeto en plural cuando usa un pronombre "-las" en lugar del nombre "ventanas"?

Un saludo.


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 27 May 2009 00:55 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 24 Ago 2007 00:41
Mensajes: 2023
Ubicación: Chile
No lo entiendo... A tu objeto ventana puedes darle un "react_before()" y ya reaccionará ante todas las acciones cerca de él (puedes descriminar la que NO QUIERES) que sea gestionada.

Por otro lado, tus localidades también pueden tener un "react_before()". Puedes tener una clase de localidades en las que si existe dentro una ventana, todas las acciones sea redirigidas hacia la ventana.

El truquito consistiría, en este caso, tal como han dicho mis contertulios, en cambiar el noun en tiempo de ejecución. Sólo el noun, nada mas... a la

noun = miVentana;

y listo. :)

Saludos.

_________________
Eliuk Blau
eliukblau (AT) gmail.com
http://www.caad.es/eliukblau/


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 27 May 2009 10:15 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 726
Muy bien. Gracias Eliuk.
Lo cierto es que tampoco había usado nunca la rutina react_before() y aún no tengo muy claro de qué forma funciona. Pero ahora mismo le echo un vistazo.

Un saludo!


Arriba
 Perfil  
 
 Asunto: react_before()
NotaPublicado: 27 May 2009 10:21 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

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

Makinaimo escribió:
Muy bien. Gracias Eliuk.
Lo cierto es que tampoco había usado nunca la rutina react_before() y aún no tengo muy claro de qué forma funciona. Pero ahora mismo le echo un vistazo.


Arrgghh!! Lo siento, pensaba que estabas utilizando react_before(), y no before(). Mis disculpas, ni m fijé.

Salud !

Baltasar

_________________
-- Baltasar, el arquero


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