SPAC
Portada > Webzine > Sección objetiva > A. técnicos > Cursillo práctico de Inform 7 - (IV)

Cursillo práctico de Inform 7 - (IV)

Conectando habitaciones - Nivel: Novato

Martes 11 de marzo de 2008, por Sarganar


Conectando habitaciones

brujulaEl ejemplo que estamos viendo solo tiene una habitación. No es difícil añadir otras más, basta con crear nuevos elementos del tipo room y conectarlos entre sí (es decir, indicar qué habitación está en qué dirección respecto a otra). Por ejemplo, hagamos que, desde la celda principal, si caminamos hacia el sur, lleguemos a otra celda secundaria. Esto exigirá crear la nueva celda, conectar entre sí las dos celdas y reescribir la descripción de la primera, para indicar la posibilidad de ir hacia el sur. La definición de estas dos habitaciones (celdas) sería como sigue [1]:


[La Celda principal]
The Celda is a room. The printed name is "En medio de ningún sitio".
  The description is "No recuerdas cómo has llegado aqui, una habitación
  de paredes metálicas y lisas. Aunque no puedes ver ninguna fuente de
  luz, el lugar no está oscuro. Hacia el sur hay un pasadizo."

[El Cubiculo]
The Celda2 is south of the Celda. The printed name is "Cubículo".
  The description is "Estás en un cubículo de techo bajo. La única salida está al norte, por donde has entrado."

Observa cómo lo hice. Basta añadir las descripciones de la nueva habitación indicando la conexión con “is south of the”. Inform mapea correctamente las dos habitaciones y esto funciona bien para todas las direcciones, incluidas up y down (y hasta outside/inside)

Modifica tu código de ejemplo y compila. (nota: puedes usar el código de ejemplo del artículo anterior del cursillo) Explora tu aventura. Ve al sur.

Ahora, dirígete a Index>>World. Lo que ves allí es la ubicación inicial de las cosas, más el mapeado del juego.

Por cierto, como has incluido en tu código la definición del Cubiculo inmediatamente después de la Celda, entonces todos los objetos que vienen después terminan colocándose en el Cubiculo. ¿Te diste cuenta? Para evitar esto, debes definir el Cubiculo luego de todas las definiciones de los objetos destinados a la Celda. Esto es así porque definimos los objetos ubicándolos implícitamente en la última habitación definida (ej: A cupula de cristal is here.) Pero hay que decir que la ubicación también puede definirse explícitamente. (ej: A cupula de cristal is in Celda.)

Observa asimismo que podríamos hacer mapeados "retorcidos", en el sentido de que si el jugador va al sur desde la Celda principal llega a la Celda2, pero nada nos obliga a permitirle volver a la Celda si a continuación va al norte, es decir, si quisiéramos podemos hacer que la salida de Celda2 hacia Celda esté al este o hacia arriba (lo cual no sería muy justo para el jugador, pero Inform nos lo permite de todas formas):


North of the Celda2 is nowhere. [quitar bidireccionalidad]
The Celda is up of the Celda2.

Es decir, primero debes quitar la bidireccionalidad y luego completar el mapeo segun tus designios. Vuelve a revisar Index>>World y verás cómo cambió el mapeado. Aprenderás más de ello a partir del capítulo Things: Rooms and the map (del manual en línea).

Si el jugador intenta caminar en una dirección, digamos por ejemplo hacia el este, la librería verificará la existencia del mapeo a dicha dirección (east) y si es así, moverá al jugador a la habitación correspondiente. Si no hay conexión hacia el este mostrará el mensaje "No puedes ir por ahí".

Este mensaje por defecto puede cambiarse por otro usando reglas para la acción going. Hay dos posibilidades:

    • Definir una regla para la acción going nowhere, cuyo contenido es un mensaje entre comillas. Si el jugador intenta ir por una dirección que no está definida en ese momento (no hay mapeo por allí), pero existe esta regla, la librería mostrará ese texto en vez de "No puedes ir por ahí".
    • Definir el mensaje para la acción going en una dirección específica. Por ejemplo, si existe una regla que imprima texto para la acción going east, Inform mostrará ese texto y no moverá al jugador. Elegante.

Usemos estos dos métodos en nuestro ejemplo. Por ejemplo, en la Celda2 podemos usar going nowhere para recordarle al jugador que la única salida es el norte. En la Celda inicial podemos añadir una pared de cristal que inicialmente el jugador no ve, hasta que intenta caminar hacia ella. El código sería entonces:


Instead of going north in Celda, say "Ouch! ¿Qué es esto? Lo que habías tomado por ausencia de pared es en realidad un muro de cristal transparente. ¡No puedes salir!"
Instead of going nowhere from Celda2, say "Te he dicho que no hay más salidas."

Y pueden ir en cualquier parte del código. En Index>>Rules podrás verlas agregadas en el rulebook Instead of. Vamos, no seas tímido y búscalas. Aprenderás más de ello en el capítulo sobre Basic Actions: Going from, going to

Código para las salidas

exitPodemos ir incluso más lejos. Como hemos visto, las salidas de una habitación pueden mapearse a otra habitación o bien asociarse a un regla going para imprimir cadenas de texto (mensajes). Pero lo bueno viene ahora: usando reglas going, se puede realizar una serie de averiguaciones antes de decidir a dónde va a parar el jugador si toma esa dirección. Por ejemplo, podríamos plantear una salida que lleve a un lugar diferente cada vez, o bien que no deje pasar al jugador hasta que haya completado cierta tarea, etc. ¿Qué tal Pascual? Vamos a utilizar estas posibilidades para darle un final al juego. El jugador podrá salir de la Celda si usa el diamante para abrir (cortar) una puerta en la pared norte (la pared de cristal). Además, sólo podrá salir si la alarma no está sonando. Si logra ambas cosas el juego habrá terminado con éxito. Vamos a quitar de en medio el papel y el bolígrafo que ya no pintan gran cosa en este juego, y en su lugar vamos a poner un diamante falso dentro de una caja en la Celda2. Si el jugador intenta usar el diamante falso para cortar la pared, no funcionará. En vez de eso lo que tiene que hacer es usarlo para dar el "cambiazo" por el diamante bueno que hay en la cúpula. En resumen, el juego-rompecabezas consiste en: ir al sur para encontrar la caja, abrirla para encontrar el diamante falso, volver al norte, abrir la cúpula, sacar el diamante auténtico, meter el falso en la cúpula para que la alarma deje de sonar y usar el diamante auténtico para abrir una puerta en la pared norte. No ganará el premio a mejor puzzle de los Hispanos, pero servirá. Por otro lado es probable que al jugador se le ocurra usar el diamante para cortar la pared, pero ¿qué verbos intentará? Debemos prever las posibles órdenes del jugador para admitir todo lo que denote que está intentando la idea correcta. Por ejemplo "CORTAR PARED CON DIAMANTE" es lo que esperaríamos, pero también deberíamos admitir "CORTAR PARED" si el jugador tiene el diamante, o bien "CORTAR CRISTAL" o bien "ROMPER PARED" o "ROMPER CRISTAL" si tiene el diamante. El verbo ROMPER causa la acción Attacking (por tanto una regla para Attacking es lo que hay que programar).

Para que el jugador pueda referirse a un "CRISTAL" o "PARED" necesitaremos definir este objeto. Ahora bien si lo definimos como hemos hecho con la caja o la cúpula, aparecería listado entre los contenidos de la habitación como: "Puedes ver una pared de cristal". No queremos que aparezca así, por lo que hay que decir a Inform que este objeto sea "oculto" o “escenario” (esto significa que no lo mencione, pero que permita al jugador actuar sobre él). Por otro lado la cúpula se menciona en la habitación de una forma bastante "fea", es decir: "Puedes ver una cúpula de cristal (que está cerrada) (en la que ves un diamante)". Para cambiar la forma en que Inform la describe tenemos dos opciones: mencionarla nosotros mismos en la descripción de la habitación y después decirle a inform que es "oculta" para que no la mencione de nuevo, o bien usar descriptores más inteligentes que decidan el texto a imprimir según la cúpula este abierta o cerrada. Todos estos conceptos se ponen en juego en el listado del capítulo siguiente, con el cual cerraremos este primer volumen del cursillo básico. Pero antes de ello, intenta avanzar tu mismo en el código, juega, prueba, investiga, compila y recompila.

Pregunta (en el foro).

Veremos que tan inteligente eres…

>>Anterior: El uso del tiempo y escenas >>Siguiente: Un (mini) juego completo

Notas

[1] Imágen Brújula: Corbis - Royalty Free

2 Comentarios


Seguir la vida del sitio  RSS 2.0: Artículos, Comentarios | Mapa del sitio | SPIP
CC Some rights reserved El contenido está disponible bajo los términos de Atribuir - Compartir bajo la misma licencia 3.0 ó 2.5 de Creative Commons.