inicio | documentación | contacto
Version para imprimir Imprimir
Inicio » Documentación » Objetos que se abren y objetos que se activan

Objetos que se abren y objetos que se activan

Ahora que ya hemos visto "nuevo concepto, flags y variables" vamos a descubrir y a utilizar los dos primeros flags que nos ofrece la librería para manipular los objetos y dotarles de estado. Para que un objeto se pueda abrir y cerrar, debemos activarle el flag abrible. Este flag nos permitirá que podamos usar ordenes como abrir objeto o cerrar objeto. Y para hacer que un objeto se pueda encender y apagar, activaremos el flag conmutable. Estos dos flags "marcan" el objeto con una característica y habilita en el modelo del mundo y la librería las reglas y comportamientos necesarios para que el jugador pueda manipular los objetos (es decir, para que el jugador pueda abrirlos y cerrarlos, encenderlos y apagarlos).

Todo esto nos lleva a otros dos nuevos flags: los flags que indican el estado. Si un objeto se puede abrir y cerrar, tiene que tener un flag que indique en que estado está (es decir, si está abierto o cerrado). Este flag es el flag abierto, el cual esta activado (vale true) cuando se ha abierto el objeto o desactivado (vale false) cuando está cerrado. El otro flag es encendido, que vale true cuando se ha encendido el objeto y false cuando se ha apagado. Estos flags cambian durante el juego cuando el jugador los manipula con las ordenes correspondientes, pero, además, sirven para definir el estado inicial del objeto cuando empieza la partida.

Flag abrible / abierto

Para crear un objeto que se puede abrir y cerrar, tan solo tenemos que añadir el flag abrible a la línea de flags dentro del objeto que vamos a crear, así:

flags 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 objeto 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, por lo tanto, su significado. Así, si el flag abierto significa que "está abierto", su negación significa que "está cerrado".

Un objeto cerrado:

flags abrible, not abierto

Otro objeto cerrado (usando la admiración en vez de not):

flags abrible, !abierto

Un objeto que se puede abrir y cerrar solamente tiene poca utilidad y es raro de encontrar (como un paraguas o un libro), ya que la mayoría de objetos que se abren y cierran suelen ser puertas o tapas de una caja donde guardar cosas dentro, y para hacer este tipo de objetos es necesario usar más flags.

Flag conmutable / encendido

Para crear un objeto que se puede encender y apagar, tan solo tenemos que añadir el flag conmutable a la línea de flags dentro del objeto que vamos a crear, así:

flags conmutable

Por defecto, todos los objetos están apagados a no ser que se indique lo contrario. Así que si queremos que el estado inicial de nuestro recipiente sea cerrado, debemos añadir encendido a la línea de flags:

flags conmutable, encendido

Ejemplo completo

En el siguiente ejemplo, creamos dos objetos: una radio que se puede encender y apagar, y un paraguas, que se puede abrir y cerrar.

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 que se encienden y apagan
*/
object Radio dentro:Habitacion
    nombre FS:radio
    flags conmutable
    def alMirar: "Una radio para oir música."
endobject

/**
* Objetos que se abren y se cierran
*/
object Paraguas dentro:Habitacion
    nombre MS:paraguas
    flags abrible, !abierto
    def alMirar: "Es un paraguas negro viejo, sirve para protegerte de la lluvia."
endobject

Archivo: system/repositorio/!7-1-Abrible y conmutable.k | Abrir el repositorio de ejemplos

Un salida posible 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 radio y una paraguas.

>> ex paraguas
Es un paraguas negro viejo, sirve para protegerte de la lluvia.

>> ex radio
Una radio para oir música.

>> abrir paraguas
Abres el paraguas.

>> encender radio
Enciendes la radio.

>> apagar radio
Apagas la radio.

Si apagamos un objeto apagado o cerramos un objeto cerrado, etc, el sistema nos avisará:

>> abrir paraguas
El paraguas ya está abierto.

>> apagar radio
La radio ya está apagada.

Si intentamos apagar o encender algo que no es conmutable, el sistema nos avisará. Lo mismo pasa si intentamos cerrar o abrir algo que no es abrible:

>> apagar paraguas
El paraguas no es algo que se pueda apagar.

>> cerrar radio
La radio no es algo que puedas cerrar.

En el caso de encender, sucede una cosa curiosa: dado que el objeto que queremos encender no es conmutable, el sistema cree que lo que intentamos hacer es quemarlo (prenderle fuego), así que lo interpreta de esa manera y responde el mensaje "Con esa peligrosa acción no lograrás nada." El verbo encender@tiene otros sinónimos que no son ambiguos: @activar para encender algo conmutable o quemar para prenderle fuego.

>> encender paraguas
Con esa peligrosa acción no lograrás nada.

>> activar paraguas
El paraguas no es algo que se pueda encender.

Otro sinónimo curioso es arrancar objeto, el cual si se usa con un objeto conmutable se interpreta como "encender" o "activar", pero si no es conmutable se toma como un gesto agresivo, como si intentáramos arrancarlo del suelo como una flor:

>> arrancar radio
La radio ya está encendida.

>> arrancar paraguas
¿Realmente es necesario?

Mostrando el estado automáticamente

Sin embargo, tenemos un pequeño problema: el jugador no puede saber si el paraguas esta abierto o cerrado o si la radio esta encendida o apagada, ya que en ningún momento se muestra su estado al examinarlos. Para arreglar esto, podemos añadir al texto de los métodos alMirar una llamada al método listaDeEstadosMensaje(), el cual nos devuelve un texto con todos los estados del objeto actual.

def alMirar: "El objeto está "+listaDeEstadosMensaje()+"."

Si modificamos el ejemplo anterior tal y como sigue:

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 que se encienden y apagan
*/
object Radio dentro:Habitacion
    nombre FS:radio
    flags conmutable
    def alMirar: "Una radio para oir música. Está "+listaDeEstadosMensaje()+"."
endobject

/**
* Objetos que se abren y se cierran
*/
object Paraguas dentro:Habitacion
    nombre MS:paraguas
    flags abrible, not abierto
    def alMirar: "Es un paraguas negro viejo, sirve para protegerte\
                  de la lluvia. Está "+listaDeEstadosMensaje()+"."
endobject

Archivo: system/repositorio/!7-2-Abrible y conmutable.k | Abrir el repositorio de ejemplos

Ahora al examinar cada objeto nos devuelve el estado:

>> ex paraguas
Es un paraguas negro viejo, sirve para protegerte de la lluvia. Está cerrado.

>> ex radio
Una radio para oir música. Esta apagada.

Resumen

Hemos aprendido 4 flags nuevos que permiten establecer el estado a los objetos (todos estos flags se pueden combinar):

Para abrir y cerrar

FlagDescripción
abribleMarca el objeto con la característica de que se puede abrir y cerrar.
abiertoEstado del objeto: está abierto.
not abierto o !abiertoEstado del objeto: está cerrado.

Pare encender y apagar

FlagDescripción
conmutableMarca el objeto con la característica de que se puede encender y apagar.
encendidoEstado del objeto: está encendido.
not encendido o !encendidoEstado del objeto: está apagado.

Y las ordenes necesarias para trabajar con ellos: abrir objeto y cerrar objeto; así como encender objeto (o activar) y apagar objeto, correspondientes a la accion Abrir, accion Cerrar, accion Encender y accion Apagar.

Para mostrar el estado de un objeto, se puede utilizar el método listaDeEstadosMensaje() dentro de alMirar:

def alMirar: "El objeto está "+listaDeEstadosMensaje()+"."
Última modificación: miércoles 21 de mayo de 2008 10:23:51
Fecha de creación: miércoles 14 de mayo de 2008 16:19:35
Categorías: