inicio | documentación | contacto
Version para imprimir Imprimir
Inicio » Documentación » Recipientes y soportes

Recipientes y soportes

Hasta ahora sabemos como crear objetos por el suelo y decorado, así como objetos que se abren y objetos que se activan. Sabemos abrirlos, cerrarlos, encenderlos y apagarlos, también cogerlos, volverlos a dejar por el suelo, pero ¿deben estar siempre los objetos por el suelo tirados? ¿es el suelo el único sitio donde coger y dejar objetos? La respuesta es no: existen objetos especiales que tienen la capacidad de contener otros objetos, ya sean dentro o encima, y transportarlos. Estos objetos son los recipientes y los soportes.

  • Los recipientes permiten guardar objetos dentro, como una caja, un maletín, un cubo de basura, un barril o un armario.
  • Los soportes permiten colocar objetos encima, como una bandeja, una mesa o una estantería.

La principal utilidad de estos objetos es que permiten transportar otros objetos, ya que al cogerlos también nos llevamos todo lo que contienen, independientemente de si tienen cosas dentro o encima. Además, el hecho de que un objeto sea recipiente o soporte no es excluyente: el mismo objeto puede ser a la vez soporte y recipiente; por lo que puede tener cosas dentro y encima a la vez, como por ejemplo, un cofre con la superficie plana puede tener encima objetos de adorno colocados y, además, dentro un tesoro escondido.

El jugador, o cualquier personaje, puede ver, coger y manipular los objetos que hay dentro o encima de los soportes y recipientes igual que si estuvieran en el suelo. O lo que es lo mismo, la accesibilidad y la visibilidad de un objeto no varían por estar dentro o encima de un objeto.

La diferencia básica entre soporte y recipiente es que el recipiente puede, además, ser un recipiente que se puede abrir y cerrar (*abrible*). Cuando esta cerrado, oculta lo que hay en su interior e impide su acceso, por lo que para poder ver y acceder a dicho interior, es necesario abrirlo. También es posible que el recipiente sea transparente, lo que significaría que es posible ver y examinar su contenido aún estando cerrado, pero seguiría sin permitir el acceso a su interior hasta que no fuera abierto.

Flags recipiente, soporte y transparente.

Veamos algunos ejemplos de objetos reales que se pueden crear:

flagsDescripciónObjetos de ejemplo
recipienteNo se puede abrir ni cerrar, por lo que actúa como si siempre estuviera abierto. Se puede acceder libremente al contenido de su interior.Una papelera, una bolsa de papel, un cubo sin tapa.
recipiente + abribleSe puede abrir y cerrar, por lo que solo permite el acceso a su interior cuando está abierto. Si esta cerrado, su contenido permanece ocultoUna caja de madera, una maleta o un armario no te permitirá ver lo que hay dentro ni tocarlo hasta que la abras.
recipiente + abrible + transparenteSe puede abrir y cerrar, por lo que solo permite el acceso a su interior cuando está abierto. Sin embargo, siempre se puede ver su contenido, aunque esté cerrado.Una caja de cristal o una jaula permiten ver y examinar lo que hay en su interior aunque estén cerradas. Pero será necesario abrirlas para coger lo que hay dentro.
soportePermite colocar objetos encima a los cuales siempre se puede acceder.Una mesa o una bandeja

Nota: Los flags transparente y abrible solo afectan a los recipientes, nunca a los soportes. Y el flag transparente solo afecta a los objetos recipiente + abrible.

Recipientes

Para crear un recipiente donde meter cosas dentro, tan solo tenemos que añadir el flag recipiente a la línea de flags dentro del objeto que vamos a crear, así:

flags recipiente

Si queremos que el recipiente se pueda abrir y cerrar (como una caja), le añadiremos abrible al la línea de flags

flags recipiente, abrible

Por defecto, todos los objetos están abiertos a no ser que se indique lo contrario. Así que si queremos que el estado inicial de nuestro recipiente sea cerrado, debemos añadir !abierto o not abierto a la línea de flags (la admiración ! o el not delante de un flag niega su valor y su significado. Así, si el flag abierto significa que "está abierto", su negación significa "está cerrado")

flags recipiente, abrible, !abierto

Si queremos que el recipiente sea, además, transparente (como una jaula), el flag a añadir es transparente :

flags recipiente, abrible, !abierto, transparente

El flag abrible solo afecta a los recipientes, nunca a los soportes. Y el flag transparente solo tiene sentido en los recipientes que se pueden abrir y cerrar. Si un recipiente no es abrible (como una papelera sin tapa o un cuenco), significa que estará siempre abierto y que siempre se podrá ver su contenido, por lo que sería redundante (y por lo tanto innecesario) indicar que es transparente pues, a todos los efectos, es como si ya lo fuera (ejemplo, no es necesario que un cuenco sea transparente, pues al no tener tapa, ya se puede ver lo que hay en su interior).

Soportes

Si queremos crear un soporte, el flag a añadir es soporte :

flags soporte

Otros

Podemos combinarlos todos juntos:

flags soporte, recipiente, abrible, !abierto

Ejemplos

Un ejemplo completo de una bandeja y una caja cerrada:

object Bandeja dentro:Habitacion
    nombre FS:bandeja
    flags soporte
    def alMirar: "Es una bandeja de metal."
endobject

object Caja dentro:Habitacion
    nombre FS:caja
    flags recipiente, abrible, !abierto
    def alMirar: "Es una caja de madera."
endobject

Situando objetos encima y dentro de otros

Al igual que para colocar un objeto en una localidad se indicaba con dentro:localidad o para colocar un objeto dentro del jugador (y que forme parte de su inventario) se utilizaba dentro:personaje, igualmente se hace para un soporte y un recipiente. Se indica primero la relación dentro: o encima: seguido del identificador del objeto donde queremos colocar el objeto.

Para colocar un objeto dentro de un recipiente se utiliza la relación dentro:

object MiObjeto dentro:objetoRecipiente

Y en un soporte se utiliza la relación encima:

object MiObjeto encima:objetoSoporte

Por ejemplo, una caja con un dado dentro. Primero creamos el objeto caja como recipiente y después el objeto dado, situándolo dentro de la caja con dentro:Caja :

object Caja dentro:Habitacion
    nombre FS:caja
    flags recipiente, abrible, !abierto
    def alMirar: "Es una caja de madera."
endobject

object Dado dentro:Caja
    nombre MS:dado
    def alMirar: "Es un dado de 6 caras."
endobject

Ejemplo completo

En el siguiente ejemplo tenemos una bandeja (soporte) y una caja (recipiente). Dentro de la caja hemos colocado un boli, aunque no lo podremos ver porque la caja donde se encuentra está cerrada. Encima de la bandeja hemos puesto un mechero, y el jugador lleva encima una foto.

Copiar | Descargar
include system/default

object Main:MainBase
    def start
        Estado.jugador = McAventura
        #jugador.accion(Mirar)
    end
endobject

/**
* El objeto jugador
*/
object McAventura:Personaje dentro:Habitacion
    nombre MS:Mc Aventura
    def alMirar: "Eres Mc Aventura, el protagonista de esta historia."
endobject

/**
* Localidades
*/
object Habitacion:Localidad
    nombre MS:Habitación
    def alMirar: "Estás en tu habitación, cálida y soleada, de donde parten tus primeros recuerdos."
endobject

/**
* Objetos en el inventario del jugador
*/
object Foto dentro:McAventura
    nombre FS:foto
    def alMirar: "Es una foto tuya de cuando eras pequeño."
endobject

/**
* Objetos en la Habitación
*/
object Bandeja dentro:Habitacion
    nombre FS:bandeja
    flags soporte
    def alMirar: "Es una bandeja de metal."
endobject

object Caja dentro:Habitacion
    nombre FS:caja
    flags recipiente, abrible, !abierto
    def alMirar: "Es una caja de madera."
endobject

/**
* El boli que está dentro de la caja
*/
object Boli dentro:Caja
    nombre MS:boli
    def alMirar: "Es un boli de plástico, un poco gastado y mordisqueado."
endobject

/**
* El mechero que está encima de la bandeja
*/
object Mechero encima:Bandeja
    nombre MS:mechero
    def alMirar: "Es un mechero de color rojo."
endobject
Archivo: system/repositorio/!6-1-Contenedores.k | Abrir el repositorio de ejemplos

Una prueba real de interacción con los objetos sería:

Habitación
Estás en tu habitación, cálida y soleada, de donde parten tus primeros recuerdos.

Salidas posibles: ninguna.
Puedes ver una bandeja y una caja.

>> i
Llevas:
   una foto

>> ex bandeja
Es una bandeja de metal.

>> ex caja
Es una caja de madera.

Hasta aquí correcto, iniciamos la prueba y vemos que en el suelo hay una bandeja y una caja. Sin embargo las examinamos pero no hay manera de saber si tienen algo dentro o encima. Sin esta información, ¿como podemos usar el boli y el mechero, si no sabemos donde están? Es más, nosotros sabemos que hay un boli y un mechero porque somos los creadores de la aventura y los hemos colocado ahí al inicio, pero un jugador cualquiera, que inicie el juego por primera vez, ni siquiera sabría que existen.

La solución a esto es la orden buscar en, mirar en, mirar dentro o registrar objetos, correspondiente a la acción BuscarEn. Esta acción devuelve un listado con los objetos que hay dentro o encima del objeto registrado, si es posible.

>> registrar bandeja
Hay un mechero.

>> coger mechero
Coges el mechero de la bandeja.

>> buscar en la bandeja
No hay nada encima.

>> registrar caja
No puedes ver lo que hay dentro de la caja porque está cerrada.

>> coger boli
No veo eso que dices.

>> abrir caja
Abres la caja.

>> mirar en la caja
Dentro hay un boli.

>> coger boli
Sacas el boli de la caja.

>> mirar en la caja
Esta vacía.

>> i
Llevas:
   una foto
   un mechero
   un boli

Al estar cerrada la caja, el boli que hay dentro no es accesible, por lo que un intento de cogerlo dará un fallo (ni tampoco funciona la orden mirar en, aunque el sistema te avisa de ello, sugiriéndote que abras la caja si quieres saber lo que hay dentro). Una vez abierta, el boli, al igual que el mechero, son accesibles y se pueden coger.

Ahora que tenemos varios objetos, vamos a operar con ellos. Podemos colocar todas nuestras pertenencias encima de la bandeja:

>> poner todo en la bandeja
Pones la foto, el mechero y el boli encima de la bandeja.

Y podemos cogerlas de nuevo. Para poner coger todo debemos especificar de donde, ya que si ponemos coger todo a secas, cogeríamos todo lo que hay en el suelo, que en este caso sería la caja y la bandeja.

>> coger todo de la bandeja
Coges la foto, el mechero y el boli.

Volvemos a colocar los objetos dentro de la caja, pero esta vez de uno en uno, y utilizando distintas ordenes, todas equivalentes y cuyo resultado final es el mismo: meter un objeto dentro de la caja :

>> poner boli en la caja
Pones el boli dentro de la caja.

>> meter el mechero dentro la caja
Pones el mechero dentro de la caja.

>> dejar foto en el interior de la caja
Pones la foto dentro de la caja.

>>registrar caja
Dentro hay un boli, un mechero y una foto.

Ahora que están todos los objetos dentro de la caja, si cogemos la caja, también nos llevamos todo lo que hay dentro:

>> coger caja
Cogida.

>>i ancho
Llevas una una caja (que tiene dentro una foto, un boli y un mechero)

>> i estrecho
Llevas:
   una caja
      una foto
      un mechero
      un boli

Podemos vaciar un objeto dentro o encima de otro, que sería equivalente a sacar cada objeto, uno a uno y dejarlo de nuevo, pero sobre (o dentro) de otro objeto.

>> vaciar la caja sobre la bandeja
(Primero intentas sacar la foto de la caja)
Pones la foto encima de la bandeja.
(Primero intentas sacar el mechero de la caja)
Pones el mechero encima de la bandeja.
(Primero intentas sacar el boli de la caja)
Pones el boli encima de la mesa.

>>registrar mesa
Dentro hay un boli, un mechero y una foto.

Ahora podemos coger la bandeja, con todo lo que tiene encima y meterla dentro de la caja (que llevamos encima y está vacía):

>> coger bandeja
Cogida.

>> i
Llevas:
   una caja
   una bandeja
      una foto
      un mechero
      un boli

>> meter la bandeja dentro de la caja
Pones la bandeja dentro de la caja.

>> i
Llevas:
   una caja
      una bandeja
         una foto
         un mechero
         un boli

El resultado final es que tenemos una caja que dentro tiene una bandeja sobre la que hay una foto, un mechero y un boli.

Otro ejemplo

Este ejemplo, más elaborado, tiene los siguientes objetos

En la localidad Cocina

  • McAventura es el jugador que está en la Cocina
    • Y la Foto dentro de McAventura (es decir, una posesión que forma parte de su inventario)
  • La Papelera esta dentro de la Cocina (por el suelo, luego se lista al mirar)
  • La Mesa es un componente de la Cocina (al ser componente, no se lista ni se puede coger)
    • La Bandeja esta encima de la Mesa (aparece al mirar en mesa)
      • El Vaso esta encima de la Bandeja (aparece al mirar en bandeja)
        • El Dado esta dentro del Vaso (aparece al mirar en vaso)
  • El ArmarioCocina es un componente de la Cocina (otro componente, ni se lista ni se coge)
    • La Cazuela está dentro del ArmarioCocina (aparece al mirar en armario, pero solo si lo abrimos antes)
    • El Microondas esta encima del ArmarioCocina (aparece al mirar en armario)
      • El Plato esta dentro del Microondas (aparece al mirar en microondas aunque esté cerrado, pues es transparente)
Copiar | Descargar
include system/default

object Main:MainBase
    def start
        Estado.jugador = McAventura
        #jugador.accion(Mirar)
    end
endobject

/**
* El objeto jugador
*/
object McAventura:Personaje dentro:Cocina
    nombre MS:Mc Aventura
    def alMirar: "Eres Mc Aventura, el protagonista de esta historia."
endobject

/**
* Localidades
*/
object Cocina:Localidad
    nombre MS:Cocina
    def alMirar: "Estás en la cocina de tu casa.\
                    Al lado tuyo hay una gran mesa para comer y un armario de cocina."
endobject

/**
* Objetos en el inventario del jugador
*/
object Foto dentro:McAventura
    nombre FS:foto
    def alMirar: "Es una foto tuya de cuando eras pequeño."
endobject

/**
* Objetos en la cocina
*/
object Mesa componente:Cocina
    nombre FS:Mesa
    flags soporte
    def alMirar: "Es una mesa para comer muy grande."
endobject

object ArmarioCocina componente:Cocina
    nombre MS:armario de cocina
    sinonimos armario cocina?
    flags soporte, recipiente, abrible, !abierto
    def alMirar: "Es un armario de cocina. Dentro se pueden guardar cosas."
endobject

object Papelera dentro:Cocina
    nombre FS:papelera
    flags recipiente
    def alMirar: "Es una papelera, sirve para tirar cosas dentro."
endobject

object Microondas encima:ArmarioCocina
    nombre MS:microondas
    sinonimos horno? microondas?
    flags recipiente, abrible, !abierto, transparente
    def alMirar: "Es un horno microondas, que calienta, descongela y gratina."
endobject

object Plato dentro:Microondas
    nombre MS:plato
    sinonimos plato de? comida|comer
    def alMirar: "Es un plato, sirve para comer."
endobject

object Bandeja encima:Mesa
    nombre FS:bandeja
    flags soporte
    def alMirar: "Es una bandeja, sirve para transportar platos."
endobject

object Vaso encima:Bandeja
    nombre MS:vaso
    sinonimos vaso de? cristal
    flags recipiente
    def alMirar: "Es un vaso de cristal."
endobject

object Dado dentro:Vaso
    nombre MS:dado
    sinonimos dado blanco
    def alMirar: "Es el típico dado de 6 caras blanco."
endobject

object Cazuela dentro:ArmarioCocina
    nombre FS:cazuela
    sinonimos MS:cazo
    def alMirar: "Es una cazuela para cocinar."
endobject
Archivo: system/repositorio/!6-2-Contenedores.k | Abrir el repositorio de ejemplos

Prueba a examinar todos los objetos y buscar dentro o encima, a ver que tienen.

Resumen

  • Hemos visto que hay objetos que pueden contener otros: los recipientes dentro y los soportes encima, para ello se utilizarán los flags soporte y recipiente. Y que un objeto puede ser recipiente y soporte a la vez.
  • Para colocar un objeto encima o dentro de otro hay que especificarlo en la definición del mismo con dentro:sitio o encima:sitio.
  • Los recipientes pueden ser abiertos y cerrados si se usa el flag abrible. Por defecto están abiertos, para que empiecen cerrados hay que usar el flag not abierto o !abierto. Si un recipiente está cerrado, su interior permanece oculto e inaccesible hasta que sea abierto.
  • Un recipiente además puede ser transparente. Esto permite ver lo que hay en su interior aún estando cerrado. Pero para acceder a su interior sigue haciendo falta abrirlo.
  • Durante el juego, para saber lo que hay en un objeto necesitamos usar mirar dentro, mirar en, buscar en o registrar objeto (accion BuscarEn)
  • Podemos coger los objetos que hay sobre los soportes y dentro de los recipientes (si están abiertos) simplemente con coger objeto (accion Coger) , aunque podemos especificar de donde lo queremos coger coger objeto de sitio. Esto último es necesario si queremos coger todo, ya que usado a secas, coge todo lo que hay en el suelo donde está el jugador. Usar coger todo de sitio es la manera correcta de hacernos con todos los objetos que hay dentro o encima de un objeto.
  • Podemos meter objetos dentro de un recipiente o encima de un soporte usando poner objeto en sitio y el sistema ya deduce si es dentro o encima en función del tipo de objeto (accion Meter o accion PonerSobre). Si el objeto es un recipiente y soporte a la vez, tendremos que ser más específicos, usando meter objeto dentro de sitio o poner objeto encima de sitio.
  • No hay limite en los objetos, ni de cantidad, ni de profundidad del almacenamiento: podemos tener una caja grande, donde dentro hay una mesa, donde encima hay otra caja, donde dentro hay un vaso, etc.
  • Podemos vaciar objetos dentro o encima de otros objetos con vaciar objeto en sitio (accion VaciarEn), vaciar objeto encima de sitio o vaciar objeto dentro de sitio (accion VaciarSobre). Si ponemos vaciar objeto, el destino del contenido de dicho objeto será el suelo (accion Vaciar).
Anterior: Objetos por el suelo y decoradoSiguiente:
Última modificación: miércoles 21 de mayo de 2008 11:32:54
Fecha de creación: lunes 28 de abril de 2008 16:27:05
Categorías: