![]() | ![]() | ![]() | Listado automático de salidas |
![]() |
Si el programador pone al principio del programa (antes de
cualquier otro include) la línea siguiente:
Entonces el jugador podrá usar el verbo "Salidas" (o su abreviatura "x") y el juego responderá con la lista de salidas "obvias" que hay en esa habitación, es decir, la respuesta podría ser algo así:
El programador no necesita escribir código alguno. La librería se ocupa de examinar el objeto "habitación" en el que se halla el jugador y comprobar si tiene algo definido en sus propiedades al_n, al_s, etc. De hecho es más inteligente que esto ya que usa el objeto brújula para ver cuáles son las direcciones creadas en el juego, para el caso especial de que el programador haya redefinido estas direcciones, como en los ejercicios 6 ó 7 antes vistos. Ahora bien ¿cómo sabe la librería qué salidas tiene una habitación? La respuesta es que primero tiene que determinar qué tipo de información ha puesto el programador en una dirección dada, digamos por ejemplo al_n. Puede encontrarse uno de los siguientes casos:
Este último caso puede ser controvertido. La mayoría de las veces la suposición de la librería es correcta: hay una salida, sólo que tal vez el jugador no puede pasar aún por ella (por ejemplo, una puerta estrecha por la que no puede pasar si lleva un objeto). No obstante ¿es correcto que la salida aparezca listada si el jugador pone "salidas"? La respuesta depende del juego. Si es una salida que se menciona en la descripción no hay nada malo en que el jugador vea esta salida con el comando "salidas", aún cuando no pueda atravesarla. Pero si se trataba de una salida "secreta" que no se desvela hasta más adelante (ej: una pared deslizante, que se abre con un mecanismo adecuado), entonces no debe mencionarse esa salida aunque el jugador escriba "salidas". Evidentemente la librería no sabe de qué va el juego. Lo único que puede saber es que en esa dirección hay una rutina y que por tanto esa dirección llevará a algún sitio alguna vez. Para ayudar a la librería con estos casos excepcionales, se le puede dar a la habitación una propiedad llamada salidas. Si esta propiedad existe en la habitación, la librería la llamará repetidas veces (una para cada dirección de la brújula), como si le preguntara "¿Debo decirle al jugador si hay salida en esta dirección?". La respuesta de la rutina será una de las siguientes:
Así, por ejemplo, imaginemos una habitación que tiene una salida normal en el lado sur y una pared deslizante en el lado norte. La pared está abierta si el objeto mecanismo_secreto tiene la propiedad encendido (que obtendrá cuando el jugador active este mecanismo de la forma apropiada, esto formaría parte del código de ese objeto). La propiedad al_n deberá ser una rutina que compruebe ese mecanismo. La definición de la habitación podría ser esta:
El problema con la definición anterior es que al_n es una rutina y por tanto la librería mostrará esa salida si el jugador lo pide. Algo así:
Lo deseable sería que la salida norte no fuera mencionada a menos que el mecanismo haya sido activado. Para lograr esto hay que darle a la habitación la propiedad salidas. Basta añadir lo siguiente entre las propiedades (por ejemplo, delante de la línea que dice has luz):
Observar que recibe un parámetro llamado direc (podemos llamarlo como queramos), y que comprobamos si direc es igual a al_n (si no lo es, retorna 0, indicando que la librería debe averiguar por su método habitual si hay salida o no). Pero para el caso especial del norte, queremos decidir nosotros, y la decisión depende de si el mecanismo fue activado o no. Si lo fue retornamos 3 ("Sí, muestrala") y si no, retornamos 2 ("No, no la muestres"). También podríamos haber escrito nosotros la palabra "norte" o similar en el caso de que el mecanismo estuviera activado, y retornar 1 para que la librería no lo imprima. El return 0 podría haberse omitido, ya que de todas formas cuando la rutina llegara a su fin retornaría false. Por tanto otra forma alternativa de lo anterior sería:
Observa que la cadena "norte" hace que ese texto sea impreso y además retorna true. Podríamos haber aprovechado para poner algo diferente a "norte", como por ejemplo "norte a través de la pared deslizante", o "hueco norte", etc. Recuerda que para que el comando "Salidas" esté presente, debes definir la constante ADMITIR_COMANDO_SALIDAS. De lo contrario el jugador no podrá usar ese verbo. Esta es una característica de InformATE que no existía en la librería original inglesa. |
![]() | ![]() | ![]() | Listado automático de salidas |