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

Cursillo práctico de Inform 7 (V)

Un (mini) juego completo - Nivel: Novato

Domingo 20 de abril de 2008, por Sarganar


Un (mini) juego completo

Señoras y señores, he aquí el salto cuántico.

Como broche de oro de este cursillo básico (primer volumen) a continuación tienes el fichero completo que crea el mini-juego-puzzle propuesto en la entrega anterior. Léelo con detenimiento. Todo lo que se escribe [entre corchetes] es un comentario que Inform ignorará, pero que sirve para explicar un poco más el programa a sus alegres lectores. Siéntete libre de modificarlo y experimentar con él. Aún podrían mejorarse algunas cosas (por ejemplo, el mensaje cuando intenta atravesar la pared sólo debería aparecer la primera vez que se intenta, y las veces restantes mejor poner otra cosa como "No gracias, ya me he llevado un golpe"), y falta por manejar asuntos como la puntuación (que siempre es cero en este juego) o el añadir nuevos verbos a los que ya vienen en la librería (por ejemplo, el verbo "HACER" no es comprendido y es posible que el jugador intente "HACER PUERTA EN PARED"). Además de esto, nuestro juego no tiene ningún personaje con el cual interactuar (salvo el guardia que aparece debido a la alarma, pero este ni siquiera existe en términos del juego). Todos estos temas serán objeto de futuros artículos (que con el cheque ya he podido pagar mis vacaciones y tengo las maletas listas).

Helo aquí:


"Cursillo Mini Juego"

[ Bienvenido al ejemplo del Cursillo Basico.
  Relajate y lee el codigo, tratando de imaginarte qué es lo que hace
  cada instrucción. Si amerita, en algunas porciones se han puesto las
  referencias al manual (luego de la palabra R) donde se dan más detalles.
  Usa la búsqueda (F3) para saltar a ellas o cualquier otra porción que no entiendas. ]


Include Spanish by Sebastian Arg.

The story headline is "Un ejemplo práctico paso a paso, escrito por Sarganar." [R: Bibliographic data]

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

[ Siempre describir la habitacion cuando se llegue a ella]
Use full-length room descriptions. [R: Use options]


[*** LA CELDA INICIAL Y LOS OBJETOS QUE CONTIENE ***]

The Celda is a room. The printed name is "En medio de ningún sitio".
  The description is "Estás en una especie de celda de paredes metálicas y
   lisas. Hacia el norte no hay pared y fuera puedes ver un paisaje
   soleado. Hacia el sur hay un pasadizo."

[ La salida norte: Se debe examinar si el objeto puerta de cristal
        está cortado o no antes de decidir si el jugador puede
        pasar. Además, se debe mirar si el objeto cúpula ha
        disparado la alarma para ver si el jugador ha ganado
        o todavía no puede salir. ]

  Instead of going north in the Celda: [R:Going from, going to]
        if the pared is cortada begin;
                say  "Cruzas la puerta que tú mismo has creado en el muro
                       de cristal y sales al exterior triunfante.";
                end the game in victory;[R:When play ends]
        otherwise;
                 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!";
        end if.

  Instead of going north in the Celda during Alarma:
        if the pared is cortada then say  "No puedes salir con esa alarma sonando.
         Te cogerían enseguida. Y te cogerán de todos modos si no la haces callar pronto.".


[Los objetos]

A cupula de cristal is here. The printed name is "cúpula de cristal".
   The description is "[if open]Está abierta.[otherwise]Examinando con
     detenimiento la cúpula descubres una especie de juntura. Parece
     una tapa que podría abrirse." [esto se muestra ante la orden EXAMINAR, segun la
        cupula esté abierta o cerrada.R: Devices and descriptions]
   It is container, openable, closed and female.
   It is fixed in place and transparent.
   Understand "tapa" as cupula.

   [ Lo siguiente es una 'Activity' para modificar la descripción de la cupula
       mientras se describe la habitacion. ]
   Rule for printing room description details of cupula: [R:printing room description details]
      if the cupula is open begin;
          say " con la tapa abierta, ubicada en el centro de la habitación";
      otherwise if the diamante autentico is in the cupula;
          say " en cuyo interior refulge un increíble diamante" ;
      end if;
      omit contents in listing. [evitar el listado automatico del contenido]

   Instead of attacking or cutting the cupula, say "No es necesaria una acción
        tan drástica. La cúpula tiene una tapa."

A diamante autentico is in the cupula.
   The description is "Tiene un brillo casi cegador, que no parece explicable
         por las leyes de la óptica."
   Understand "diamante increible/luminoso/autentico/refulgente/cegador/brillante" as diamante autentico.
   Instead of attacking the diamante autentico, say "No podría, es muy duro."
   Does the player mean doing something with the diamante autentico: it is likely. [para forzar la ambiguedad diamante autentico/falso inclinando la balanza al autentico. R:Does the player mean]

   Instead of examining the diamante autentico when the noun is inside the cupula, say "El diamante reposa sobre un cojín de terciopelo."


[ Lo siguiente avisa al jugador del puzzle resuelto con el texto:
  "Consigues sacar [the noun] sin disparar la alarma."
 Para ello primero debe verificar la accion taking para ver si se está sacando
 algo de la cupula (poniendo la variable flagHolder a 1).
 Luego de que la acción tiene lugar (flagHolder nos dice si se ejecutó o no
 sobre la cupula), revisa si la cupula ya quedó vacía (aun pueden quedar más cosas).]

 Definition: A container is empty if it does not contain something.

 The flagHolder is a number that varies.

 Check an actor taking something inside the cupula:
     change flagHolder to 1.

  After taking something during Entire Game :
      if flagHolder is 1 begin;
          if the cupula is not empty begin;
         say "Consigues sacar [the noun] sin disparar la alarma.";
          otherwise;
         continue the action;
          end if;
          change flagHolder to 0;
     otherwise;
        continue the action;
      end if.      


[ La pared de cristal (oculta, no se menciona
 en la descripción de la habitación)
 Tiene una propiedad "cortada/lisa'' que hemos inventado para este
 objeto en particular. Ya que la librería no conoce esta propiedad
 debemos programar nosotros cómo cambia con las acciones del jugador
 El valor inicial es "lisa". Cambiará a "cortada" cuando
 el jugador haga la acción correcta.]

The pared de cristal is here.
   The description is "La pared norte es de un cristal tan transparente que
           en un primer momento pensaste que no había pared."
   The pared can be lisa or cortada. The pared is lisa.[definicion de propiedad nueva]
   It is female and scenery.
   Understand "rectangulo", "puerta", "muro" as pared.

  Cutting it with is an action applying to one thing and one carried thing.
  Understand "corta [something] con/usando [something preferably held]" as cutting it with.
  Understand "rompe [something] con/usando [something preferably held]" as cutting it with.
 
  Instead of cutting the pared with something (called herramientita):
        if the herramientita is a diamante autentico begin;
                if the pared is lisa begin;[uso de propiedad nueva]  
                  say "Usando el diamante cortas limpiamente un rectángulo en forma de puerta.";
                  now the pared is cortada;
                 end if;       
        otherwise if the herramientita is a diamante falso;
                  say "Intentas cortar el cristal usando el diamante rayado,
           pero sólo logras rayarlo más. No creo que este diamante
           sea auténtico...";
        otherwise;
                  say "El cristal de la pared es demasiado resistente y no
       tienes herramienta para cortarlo.";
        end if.

[ Esto genera la acción de ir al norte.
 Está aqui por si el jugador pone
 ENTRA EN RECTANGULO o ATRAVIESA CRISTAL...
 PASA POR PUERTA...]
   Instead of exiting when the player is in the Celda:
        try going north.
   Instead of entering the pared:
        try going north.


[ Escenas ]
  Alarma is a recurring scene. Alarma begins when the cupula is empty.
  Alarma ends happily when the cupula is not empty.
  Alarma ends sadly when the time since Alarma began is 4 minutes.

  When Alarma begins:
           change contador to 0;
        if the noun is something, say "Al sacar [the noun] de la cúpula una alarma
         empieza a sonar en algún lugar del exterior."

  When Alarma ends happily:
        say "Ufff. La alarma ha parado. Creo que nadie la ha escuchado."

  When Alarma ends sadly:
        end the game saying  "Súbitamente un rayo de luz vertical
       aparece en la estancia y
       se ensancha hasta convertirse en un cilindro. Cuando el
       resplandor se apaga ves que en su lugar ha aparecido un
       guardia con equipamiento anti-disturbios. 'Hmm' dice, 'Te
       crees muy listo ¿eh? Me has sacado de la siesta con esa
       maldita alarma y eso es algo que no perdono.'"

  The contador is a number that varies.[definicion de variable numerica]
[ ** Se ejecuta cada turno, si Alarma está activada: ]
 Every turn during Alarma:
        increase contador by 1;
        if contador is 2, say "La alarma sigue sonando fuera. Acabará por atraer a alguien.";
        if contador is 3, say "Definitivamente, esa alarma te está poniendo muy
           nervioso. Mejor devolvías el diamante a su sitio.".



[*** LA SEGUNDA CELDA Y LOS OBJETOS QUE CONTIENE ****]

[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."
   Instead of going nowhere from Celda2, say "Te he dicho que no hay más salidas."



The diamante falso is here.The printed name is "diamante rayado".
   The description is "No brilla mucho porque su superficie está rayada. Hum
        ¿Un diamante rayado?"
   Understand "diamante rayado" as diamante falso.
   Instead of attacking the diamante falso, say "Es falso. Seguro que podría romperlo,
         pero ¿qué ganaría con ello?"

[Comandos de testeo]
Test me with "s / toma diamante / n / abre cupula / deja diamante rayado en cupula / toma diamante / rompe pared con diamante / sal".

Muy bien, agudiza tu parser y toma nota de algunos puntos:

* Existen algunos objetos que podrían causar ambigüedad. Por ejemplo si ambos diamantes están juntos y el jugador pone "Coge diamante" ¿a cuál se refiere? Y si el jugador pone "Rompe cristal" ¿se estará refiriendo a la cúpula o a la pared?

Juega un poco y descubre cómo resuelve inform estas ambigüedades. Observa que es necesario que demos diferentes adjetivos a cada diamante para que la ambigüedad pueda ser resuelta.

* Normalmente Inform aparta un párrafo para describirte los objetos que pueblan la habitación. Algo como:

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

Bien, la mayoría de nosotros ya nos acostumbramos a estas descripciones. Pero también podemos modificarlas a nuestro gusto, usando lo que I7 llama Activities. A diferencia de las Actions, las Activities no son tareas generadas por las órdenes del jugador (romper, atacar, mirar, ir al norte, etc); sino más bien se tratan de tareas internas que el sistema ejecuta mientras el juego transcurre. No duran más de un turno y solo tienen reglas Before, Rule for (una especie de Carry Out rule) y After. Algunas activities de fábrica que el sistema consulta mientras procesa el turno se encargan de decidir si una cosa de inventario se oculta o no, imprimir el nombre del objeto, listar el contenido de un objeto, construir la barra de status, imprimir la descripción de la habitación sin luz (Darkroom), etc. Podemos meternos con ellas y cambiarlas un poco. Por ejemplo, usando la ‘printing room description details of cupula’ le podemos decir a inform qué texto imprimir toda vez que se incluya la cúpula en la descripción de los objetos presentes.

Tienes todos los detalles en el capítulo sobre Activities del manual. Allí también encontrarás un listado y análisis de todas las actividades disponibles de fábrica.

* Se puede ‘desviar’ determinada acción para que termine generando una acción diferente, como en


        Instead of exiting when the player is in the Celda:
            try going north.

Hacemos eso con la frase try

* Existe un Rulebook muy chulo, llamado Every turn. Toda regla Every turn que creemos, será alojada en dicho rulebook y se ejecutará en cada turno de juego. Podemos usar esto para mostrar distintos mensajes según el tiempo que haya pasado desde la activación de la alarma.

Antes del timbre

¿Cómo ha estado eso? ¿Ahora tienen una mejor idea de lo que significa crear aventuras con Inform? ¡Excelente!

(alguien grita “No” al fondo, pero vamos!, no voy a admitirlo)

Ahora, quiero ver sus relatos interactivos en la zona de descargas del CAAD. Manos a la obra!

En caso contrario, sin importar en qué pliegues de la realidad estén escondidos, los encontraré...

(sarganar desaparece en una grieta del techo)

 [1]

>>Anterior: Conectando habitaciones

Notas

[1] Crédito Pin: Corbis.com Royalty Free

8 Comentarios

  • Cursillo práctico de Inform 7 (V)

    20 de abril de 2008 07:01, por Jenesis
    Un rematel excepcional par el cursillo.
    Enhorabuena Sargarnar y gracias por el trabajo realizado. :)
  • Cursillo práctico de Inform 7 (V)

    20 de abril de 2008 11:11, por Eliuk Blau

    Yo debo acusarme de no haber leído ninguno de los cursos completamente. Pero sí que puedo estar más que agradecido y darle mi "¡enhorabuena!" a Sarganar por el tiempo que le ha dedicado al cursillo porque sí me va a ser muy útil por estos tiempecillos. :D

    Ahora que me adentro en las entrañas este séptimo engendro.

    Saludos!

  • Cursillo práctico de Inform 7 (V)

    21 de abril de 2008 05:48
    Pronto vas a tener relatos con Inform 7 por mi parte, pero necesito testeo antes de publicar ¿te puedo pedir como tester? Así además de testeo me puedes ayudar un poco con el código...

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.