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

Cursillo práctico de Inform 7 (I)

Manos a la Obra - Nivel: Novato

Lunes 21 de enero de 2008, por Sarganar


¿Primera vez que te acercas a Inform? El objetivo de este cursillo es que desde el primer momento se produzcan resultados tangibles, sin perderse en explicaciones preliminares, aunque después nos diluyamos en explicaciones posteriores [1]. Lo primero es lograr algo que funcione, después se explicará cómo funciona. Prepara algo de café y un clima favorable a la asimilación….

Ingredientes

Es altamente recomendable que sigas todos los pasos sobre un ordenador real, sobre la práctica. Comencemos:

1 - Necesitarás:

I7icons Inform 7
Descarga el instalador de la versión de Inform 7 soportada por INFSP. Puedes elegir entre las versiones Mac, Windows y Linux (Fedora, Ubuntu y un par más).
book INFSP7
Incluye:
    • La Spanish Extension, que permite a I7 entender español.
    • Otras extensiones útiles.
    • Documentación.

Para todo ello, consulta la página de INFSP.

2 - ¿Ya tienes el instalador de I7? Ejecútalo para instalar Inform 7 en tu disco duro. Si ya tienes una versión de I7 previamente instalada, no hay problema, instala arriba. Fíjate que, además de instalarse en el directorio destino; I7 mete información crucial en "Mis documentos", donde se alojarán los proyectos (aventuras) y extensiones que no vienen por defecto.

3 - Con la Spanish Extension vamos a hacer que I7 hable español.

    • Descomprime el pack INFSP7 en un directorio temporal. Tienes documetación y un par de ejemplos de aventuras. Y lo más importante: La extensión Spanish.i7x.

4 - Arranca I7. Ahora debes instalar la extensión "Spanish". Desde el IDE, haz File>> Install Extension y elije ’Spanish.i7x’ del directorio ’\Extensiones\’ del paquete INFSP7. Esto es imprescindible, pues este fichero por sí sólo es la localización al español de I7. Para todas las aventuras que hagas en español, será necesario que incluyas la ’Spanish’ en el código. Sino, I7 compila para inglés.

Manos a la obra

Un ejemplo simple para empezar

Nuestra labor inicial (somos autores) es crear un mundo lleno de lugares y objetos y colocar al jugador en él. A partir de ahí, el jugador es libre de intentar lo que se le ocurra con esos objetos, y nuestro programa debe ser capaz de dar una respuesta adecuada a cada cosa que le apetezca escribir al jugador. ¿A todas? Bueno, je je, a muchas de ellas. Esto es mucho trabajo, pero por suerte Inform 7 (I7) realiza gran parte del mismo. Vamos a empezar directamente con un ejemplo. Nuestro mundo inicial constará de un solo lugar en el cual hay tan solo tres objetos: una caja cerrada (que tiene dentro un papel) y un bolígrafo (inicialmente en posesión del jugador). La primera versión del juego se va a limitar a crear estos objetos y ponerlos en el lugar adecuado (es decir, el papel dentro de la caja, el bolígrafo "dentro" del jugador, y todo ello dentro de la habitación). Arranca I7, y verás la ventana de bienvenida (Welcome to I7) que te preguntara qué quieres hacer (la pantalla inicial puede variar según la versión de I7 que hayas instalado): splash

Selecciona “Start new Project”, elije el lugar (directorio) donde I7 guardará el proyecto, el nombre y autor. Con esa información, I7 creará una carpeta de nombre “Mi proyecto.inform” y meterá allí toda la información interna del juego. En posteriores sesiones, puedes cargar ese proyecto con File>>Open Project.... Para obtener una visión general de I7 y su IDE (entorno de tabajo), puedes consultar el artículo “Un acercamiento a Inform 7”. Copia lo siguiente en la pestaña Source:


"Cursillo" by Sarganar

Include Spanish by Sebastian Arg.

The story headline is "Un ejemplo práctico paso a paso,"

When play begins, say "Bienvenido al...[line break]".  [ Mensaje inicial]

[Los lugares]
The Celda is a room. The printed name is "En medio de ningún sitio".
  The description is "No recuerdas cómo has llegado aquí, una habitación
  de paredes metálicas y lisas. Aunque no puedes ver ninguna fuente de
  luz, el lugar no está oscuro."

[Los objetos]
A caja is here. It is a container, openable, closed and female.

The papel is in the caja.

The player carry a boligrafo.
Understand "boli" as boligrafo.

Vamos, compílalo con Go! (F5).

¿Ningún problema? Bien! Fíjate en la pestaña Game. En ella podemos leer cosas que habíamos escrito en Source, como por ejemplo "En medio de ningún sitio", que aparece en la barra de título, o la descripción del lugar, que empieza con "No recuerdas cómo has llegado..."


Bienvenido al...

Cursillo
Un ejemplo práctico paso a paso, por Sarganar
Release 1 / Serial number 080511 / Inform 7 build 5T18 (I6/v6.31 lib 6/12N) SD

En medio de ningún sitio
No recuerdas cómo has llegado aquí, una habitación de paredes metálicas y lisas. Aunque no puedes ver ninguna fuente de luz, el lugar no está oscuro.

Puedes ver una caja (cerrada).

>

Una forma un poco inusual de programar, ¿no crees? Así es como se describe el modelo de mundo de tu juego, con frases en un inglés simplón que el parser de I7 ‘traducirá’ a código máquina. La versatilidad ‘lingüística’ es más bien limitadilla, pero una vez que aprendas a programar la cosa va rápido como rata por tirante. También debes saber que existe Inform 6, donde la programación es la típica programación de objetos de todos los días. Ok, veamos cómo empieza nuestro código:


"Cursillo" by Sarganar

Include Spanish by Sebastian Arg.

The story headline is "Un ejemplo práctico paso a paso,"

When play begins, say "Bienvenido al...[line break]".  [ Mensaje inicial]

La primer línea describe el nombre del juego y su autor. Siempre debes incluirla. Es parte de los Headings de I7, por lo que la siguiente línea debe estar en blanco. Opcionalmente puedes no incluir el autor:

"Cursillo"

Por lo que no se mencionará al autor en el inicio del juego.

La segunda línea le indica a I7 que ‘incluya una extensión llamada “Spanish” cuyo autor es Sebastian Arg’. Las extensiones son librerías extras que amplían las funcionalidades de I7. En esta caso, con la Spanish, I7 puede hablar y entender español. The story headline is…. describe la sinopsis del juego, una costumbre popular en ficción interactiva. Es parte de los datos bibliográficos e I7 también la mostrará en la pantalla inicial.

When play begins,... es una regla (rule) muy usada (junto con When play ends,) para hacer cosas apenas inicia el juego. Generalmente se utiliza para mostrar algún texto introductorio, como en este caso. Ya veremos más sobre rules y phrases. Sin embargo aparecen más cosas que no habíamos puesto en nuestras descripciones. Por ejemplo, la frase "Puedes ver una caja (cerrada)". En nuestro programa no aparece esa frase, ¿quién la ha escrito? La respuesta es "La librería". La librería es algo que se añade a tu programa para completar todo lo que tú no has programado. De hecho, en nuestro juego nos hemos limitado a poner una caja allí, pero no hemos "explicado" a inform qué ha de ocurrir si el jugador intenta abrir la caja, o si intenta darle una patada. ¿Qué pasaría si el jugador intentara esas cosas? Veámoslo:


>abre caja
Abres la caja, descubriendo un papel.

>patea la caja
La violencia no es la solución.

¡Sorprendente! Aparecen más frases que no habíamos escrito nosotros (aunque sí que le habíamos dicho a Inform que pusiera el papel dentro de la caja). Sigamos experimentando:


>INVENTARIO
Llevas:
 un boligrafo

>EXAMINA CAJA
En la caja ves un papel.

>PON BOLIGRAFO EN LA CAJA
Metes el boligrafo dentro de la caja.

>EXAMINA CAJA
En la caja ves un boligrafo y un papel.

>CIERRA CAJA
Cierras la caja.

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

>MIRA DEBAJO DE LA CAJA
No ves nada interesante.

>SACUDE CAJA
No la tienes.

>COGELA
Cogida.

>SACUDELA
Te sientes ridículo agitando la caja.

>COGE PAPEL
No veo eso que dices.

>ABRE CAJA
Abres la caja, descubriendo un boligrafo y un papel.

>COGE PAPEL
Cogido.

>COGE BOLI
Cogido.

>EXAMINA CAJA
La caja está vacía.

>METE EL PAPEL DENTRO DEL BOLIGRAFO
No se pueden meter cosas dentro del boligrafo.

>METE EL PAPEL DENTRO DE LA CAJA
Metes el papel dentro de la caja.

¿Has visto qué complejidad y variedad de situaciones hemos logrado sin necesidad de programar nada? La librería sabe qué hacer ante ciertas acciones del jugador. De hecho conoce una increíble variedad de verbos y tiene una respuesta adecuada para cada uno, aunque la respuesta depende del tipo de objeto sobre el que se apliquen. Por ejemplo, nos deja meter cosas dentro de la caja, pero no nos deja meter el papel en el bolígrafo. También nos deja abrir la caja, pero no nos dejaría abrir el bolígrafo o el papel ¿cómo sabe la librería qué respuesta es la más adecuada en cada caso?

Sencillamente porque en la definición de los objetos se lo hemos dicho. Observa la definición de la caja:

A caja is here. It is a container, openable, closed and female.

Estas dos oraciones son afirmaciones (también llamadas descripciones), usadas para describir el mundo inicial (el estado de las cosas al arrancar el juego). La primera declara la existencia de un objeto llamado caja y su lugar al comenzar el juego: here, o sea ‘aquí’. I7 asume que se está refiriendo al último lugar (localidad) declarado: La Celda. Puedes ver la ubicación inicial de las cosas del juego en la pestaña Index>>World. Muy útil, ¿verdad?

También es válido decir:

A caja is in the Celda.

Ahora bien, luego tenemos:

It is a container, openable, closed and female.

Con It is… , I7 asume que se está refiriendo al objeto declarado en la afirmación anterior (caja). Luego le dices a I7 que la caja será un contenedor, que estará cerrada y que será femenina. Es decir, le estas diciendo el tipo de objeto (container), más un conjunto de adjetivos que lo caracterizan (openable, closed, female). Dirígete a Index>Kinds y verás de lo que hablo.

Allí puedes ver las clases que trae I7 de fábrica y que tu puedes usar al crear tus objetos. Las básicas son room, thing, direction y region. De allí se deriva todo. Nuestra caja pertenece a la clase container. ¿La encontraste? Entre corchetes te muestra la cantidad de containers que tiene tu juego. Haz clic en la lupita y te mandará a la definición de la clase:


container, a kind of thing (plural containers)
Represents something into which portable things can be put, such as a teachest or a handbag. Something with a really large immobile interior, such as the Albert Hall, had better be a room instead.
Usually opaque not transparent, open not closed, unopenable not openable, unlocked not locked.
Usually not enterable, lockable.
Can have carrying capacity (a number).

Lo primero que te dice es que deriva de la clase thing. Luego brinda algo de información y sugerencias de uso. Después se listan los adjetivos de la clase, por defecto un container será abierto (open) y opaco (no pueden verse las cosas dentro), sin posibilidad o mecanismo de abrir-cerrar (unopenable), sin traba (unlocked) y sin posibilidad de cerrojo (not lockable). O sea una caja sin tapa. Observa que también te muestra el adjetivo opuesto (closed, openable, etc), para que también puedas usarlo en tu código. El resto de los adjetivos los hereda de su clase madre: thing. Échales un vistazo.

“Can have carrying capacity” te dice que puede contener cosas. Esta carrying capacity es una propiedad y puede contener valores numéricos (según cómo lo definas, pueden ser numéricos, de texto, etc.)

Bueno, estos adjetivos, propiedades y reglas, son los que I7 usa para modelar el comportamiento del mundo y las respuestas que te dará el juego. ¿Entiendes? Tu también puedes definir tus propios adjetivos y demás, pero eso es tema más avanzado. En todo momento tienes la ayuda en línea que puedes usar y explorar. Vamos, no te quedes esperando! Así yo aprendí muchas cosas.

Ahora bien, volvamos a nuestro ejemplo: queremos una caja con tapa y que esté cerrada:

It is a container, openable, closed and female.

"Container" indica que se pueden meter cosas dentro. "Female" es para que la librería sepa que cuando te refieres a la caja debe responder "Cogida", en lugar de "Cogido", por ejemplo. "Openable" que se puede abrir y cerrar. Por último “Closed” indica que inicialmente está cerrada. Como vimos, closed es el opuesto a open.

Por otra parte el papel y el bolígrafo no tienen esa línea que especifican mas características, lo cual significa que no tienen todas esas propiedades que tenía la caja. En particular no son "femeninos" (por tanto son masculinos), no son recipientes o containers (no se puede meter cosas en ellos) y no son abribles (rechazarán el verbo ABRIR y CERRAR). Toman los valores por defecto de la clase a la que pertenecen: thing (si no le dices qué son, I7 asume que son things).

The papel is in the caja.

Allí mencionas al nuevo objeto (el papel) y le dices donde está (in the caja). Pudieras haber empezado la oración con “A papel is…” , es lo mismo.

The player carry a boligrafo.

Una bonita forma de decir que al comenzar el juego, un bolígrafo estará en el inventario del jugador. Creo que te vas dando cuenta de la importancia de los verbos en la descripción del mundo. Ya hemos usado is, carry…. Pero hay más. Incluso se pueden crear nuevos verbos. Puedes verlos en Index>>Phrases>>Table of verbs . Pero a no confundirse, son verbos para el código de programación (tu pestaña Source), no para el prompt del jugador (el juego compilado). Como hemos visto, estos verbos se usan en las afirmaciones.

En general una afirmación está compuesta por.


A caja        is in           the Celda        .
descripción   parte-verbo  descripción    punto-final

Por último tenemos

Understand "boli" as boligrafo.

Aquí se define un sinónimo para bolígrafo (e inform lo agregará a su diccionario o vocabulario interno). Así, el juego entenderá cuando el jugador escriba EXAMINA BOLIGRAFO o EXAMINA BOLI. (Nota: Cuando introduces a los nuevos objetos en tu código, NUNCA uses acentos (cajón) u otros signos raros (eñes, etc). Esto es porque antes que nada inform le quita los acentos (y eñes) a las palabras escritas por el jugador. Y entonces no coincidirán con las palabras del diccionario del juego, haciendo esos objetos inaccesibles.) Sigue experimentando tú mismo. ¿Qué otras cosas harías como jugador? Probablemente tratarías de leer el papel o de escribir en él con el bolígrafo. Además tratarías de examinar todo lo que se menciona en el juego, y por supuesto tratarías de abandonar esta habitación en dirección Norte, Sur, Este u Oeste. Aquí nos topamos con las limitaciones de este mini-juego: la habitación no puede abandonarse, los objetos no tienen "nada especial", no comprende el verbo escribir y no nos deja hacer algunas acciones obvias (como romper el papel, por ejemplo). Esto se debe a que no hemos programado nada aún. La librería sabe manejar algunas situaciones que son válidas para el caso general, pero si en algún caso particular queremos que un objeto se comporte de forma diferente a la prevista por la librería, habrá que programarlo. Esta es la filosofía de diseño de Inform: sólo hay que programar las excepciones a la regla general y dejar que la librería se ocupe de todo lo demás. La librería ya sabe que dentro de un recipiente se pueden meter cosas, sólo debemos programar las excepciones (es decir, que cierto objeto no pueda meterse dentro de cierto recipiente, o bien que cuando se haga eso ocurra algo especial). En el capítulo siguiente trataremos eso. De momento vamos a ver qué más puede hacerse sin programar mucho más código aún.

Mejorando las descripciones

Podemos mejorar las descripciones de los objetos, de modo que ante la orden EXAMINAR no responda el insulso "No observas nada especial". Para ello basta añadir una descripción a cada objeto. Es recomendable escribir, todo lo relacionado con un objeto en un mismo párrafo, para que sea fácil al programador ver todo el texto relacionado con ese objeto. En cierta forma, escribir un juego es como escribir con oraciones sencillas (en spanglish) las características más importantes del mundo del juego. Ya hemos visto cómo en la caja aparecen una serie de palabras (femenino recipiente abrible ...) que no son sino características especiales de este objeto, llamadas atributos o adjetivos (en el help de I7 también los verás como either/or properties por sus características de si/no o ‘bipolaridad’). La librería permite EXAMINAR cualquier objeto del juego, pero por defecto producirá la respuesta "No observas nada especial". Excepto en el caso de la caja, para la cual, por ser un recipiente, en lugar de decir eso nos dice el contenido (siempre que esté abierta). Si queremos que diga otra cosa, debemos asignar una descripción al objeto. Para esto basta añadir algo como lo siguiente:


The papel is in the caja.
   The description is "El papel dice 'Tonto el que lo lea'."

(NOTA: El signo apóstrofe cuando aparece dentro de una cadena de texto, se convertirá en unas comillas cuando sea impreso. Además, en cualquier cadena de texto que se use en una afirmación, si termina con un signo de puntuación de cierre (punto, admiración o pregunta) no hace falta cerrar la afirmación con punto final).

The description is… está hablando de una propiedad del papel: description. Y en general, esa es la sintaxis para setear las propiedades en I7. Para ser más específicos, podríamos decir:

   The description of the papel is "El papel dice 'Tonto el que lo lea'."

Pero como en el código ya venimos hablando de la caja, I7 asume correctamente The description is…

Esta descripción aparecerá si el jugador intenta los verbos EXAMINA o LEE con el papel. De la misma forma puedes asignar una descripción al boligrafo o a la caja. Pero atención, si hacemos una descripción para la caja, entonces la librería abandonará su regla por defecto según la cual mostraba los contenidos de la caja, para mostrar en cambio nuestra descripción. Es decir, si pones:


A caja is here. It is a container, openable, closed and female.
   The description is "Es una caja de cartón, de aspecto endeble."

Cuando el jugador ponga EXAMINAR CAJA ya no recibirá el mensaje "No puedes ver lo que hay dentro de la caja porque está cerrada", sino que recibirá la respuesta "Es una caja de cartón de aspecto endeble". E incluso si la caja está abierta, la librería ya no dirá "En la caja hay un papel", sino nuestra descripción. Si el jugador quisiera ver lo que hay dentro de la caja, ya no bastaría EXAMINAR CAJA, sino que debería poner MIRA DENTRO DE LA CAJA, o MIRA EN LA CAJA o BUSCA EN LA CAJA. Por supuesto estas son las reglas de la librería, las cuales no son inamovibles. Si queremos otra cosa, la programaremos como una variante del caso general.

Vaya! Estuvo bien por ahora. En el siguiente artículo pasaremos a mayores.

Hasta la próxima!

>>Siguiente: Complicando las cosas: sobre las acciones

Notas

[1] Este cursillo está basado en uno similar ideado por Zak para informATE. Gracias Zak!

7 Comentarios

  • Introducción a Inform 7

    22 de enero de 2008 06:52

    http://en.wikibooks.org/wiki/Beginner’s_Guide_to_Interactive_Fiction_with_Inform_7/Getting_Started_with_Info rm_7

    Me recuerda a este ejemplo, el cual me fué de gran utilidad a la hora de programar la aventura de la Minicomp.

    Me gusta mucho la iniciativa ¿habrá más entregas?

    • Introducción a Inform 7 22 de enero de 2008 08:16, por Sarganar
      El cursillo de Zak tenia 5 ’entregas’. Estoy adaptando el resto.
      • Introducción a Inform 7 22 de enero de 2008 11:05, por planseldon
        Muy interesante. De momento parece adcuado para programadores torpes. Esperamos la continuación.
        • Introducción a Inform 7 9 de abril de 2008 22:31, por JB

          No me doy por aludido, pero lo de llamarme ´torpe´ sin conocerme, asi, de forma gratuita, pues no se ... ¿Te querian cuando eras pequeño?

          En fin, que no me parece una buena "tarjeta de presentación". Ya supongo que no era tu intención ...

          Un detalle: The story headline is “Un ejemplo práctico paso a paso,”. [FALTA UN PUNTO LA PRIMERA VEZ QUE ESTA FRASE APARECE]

          • Introducción a Inform 7 10 de abril de 2008 04:51, por Jack Daniels
            Se llamaba torpe a sí mismo, porque Planseldon es un programador torpe reconocido. ;)
  • Introducción a Inform 7

    22 de enero de 2008 13:38, por Mapache

    Estupendo!!

    Es lo que se echaba de menos en I7...

    Un único pero...

    Bienvenido al...

    Cursillo Un ejemplo práctico paso a paso, escrito por Sarganar. Release 1 / Serial number 071220 / Inform 7 build 5J39 (I6/v6.31 lib 6/11N) SD

    En medio de ningún sitio No recuerdas cómo has llegado aquí, una habitación de paredes metálicas y lisas. Aunque no puedes ver ninguna fuente de luz, el lugar no está oscuro.

    Puedes ver una caja (cerrada) y una cúpula de cristal (cerrada) (en la que ves un diamante).

    ¿una cúpula de cristal con un diamante?

    Me parece que ha fallado el cortapega...

    Saludetes


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.