Inform e Glulx/Inform e ancora Inform/Il tempo

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Il tempo[modifica]

Andiamo ora avanti con la gestione del tempo tramite l’orologio interno di Inform. Per attivarlo occorre inserire, all’inizio del listato, l’istruzione Statusline time:

Statusline time;
Constant Story "RUINS";
Constant Headline
.
.
.

In questo modo, il valore del tempo appare automaticamente sulla status line. Dobbiamo anche decidere a che ora farlo partire, inserendo nella funzione Initialise l’istruzione Settime secondo la seguente formula:

SetTime (60 x [ore] + [minuti], [avanzamento]);

Se vogliamo ad esempio far sì che Ruins inizi alle 8:00 del mattino, il calcolo da fare è quindi 60 x 8 per un totale di 480:

 [ Initialise;
     TitlePage();
     location = Forest;
     Settime (480, 1);
     .
     .
     .

come d’altra parte la stessa statusline conferma:

Il parametro avanzamento stabilisce, come dice il nome stesso, di quanti minuti il tempo deve avanzare per ogni mossa effettuata dal giocatore (in questo esempio avanza di un minuto per ogni mossa effettuata). Volendo invece inizializzare la status line con questo parametro:

 [DrawStatusLine width;
     StatusLineHeight(1); 
     width = ScreenWidth(); if (width == 0) width = 80;
     MoveCursor(1, 1); spaces width;
     MoveCursor(1, 2); 
     if (location == thedark) {
          print (name) location;
     }
     else {
           FindVisibilityLevels();
           if (visibility_ceiling == location)
               print (name) location;
           else
               print (The) visibility_ceiling;
     }
     
     width = width - 15;
     MoveCursor(1, width); print (string) TIME__TX;
     LanguageTimeOfDay(sline1, sline2);
     MainWindow();
 ];

ecco quello che si deve fare. Se vogliamo invece fare in modo che a una data ora si verifichi un certo evento, basta testare la variabile di libreria the_time all’ora desiderata:

 [ Initialise;
         TitlePage();
         location = Forest;
         move map to player;
         move sodium_lamp to player;
         move dictionary to player;
         Settime (480, 1);
         Startdaemon (Timerdaemon);
         .
         .
         .
      ];
 
 Object Timerdaemon
   with  daemon [;          
            if (the_time == 485) {
              steps.rubble_filled = false;
              print "Improvvisamente, vieni distratto dal volo di un 
                     macao sopra la tua testa che sembra quasi
                     un'esplosione nel sole. Il battito delle sue ali 
                     @`e quasi assordante, e delle pietre crollano una 
                     sull'altra.^";
              StopDaemon(self);
            } 
         ];

Il test viene effettuato all’interno del daemon Timerdaemon. Il valore della variabile di libreria the_time è il tempo stesso che, come abbiamo già detto, s'incrementa di uno a ogni mossa effettuata dal giocatore:

Il Grande Altopiano
I tuoi appunti menzionano qualcosa circa questa bassa scarpata di calcare, ma la foresta pluviale ne ha rivendicato il possesso. Cupi ulivi crescono ovunque, e una pioggia appena smessa riempie l'aria con una calda nebbia bagnata.
La "Struttura 10" è un cumulo di materiali da costruzione, che una volta avrebbero potuto costituire una piramide sepolcrale, ma della quale ora nulla rimane, eccetto alcuni gradini scolpiti nella nuda roccia che portano giù, nell'oscurità.

Un fungo macchiato cresce dalla terra fradicia, su un gambo lungo.

La tua cassa d'imballaggio giace qui, pronta per contenere eventuali scoperte di alto valore culturale da riportare alla civiltà.

>giù
Le macerie ostruiscono il passaggio dopo appena pochi passi.

>z
Il tempo passa.

>z
Il tempo passa.

>z
Il tempo passa.

>z
Il tempo passa.
Improvvisamente, vieni distratto dal volo di un macao sopra la tua testa che sembra quasi un'esplosione nel sole. Il battito delle sue ali è quasi assordante, e delle pietre crollano una sull'altra.

>giù

La Sala Quadrata
Sei in una sala di pietra oscura e profonda, larga circa dieci metri. Un raggio di sole, proveniente dalla cima della scalinata, la illumina diffusamente, ma le ombre del livello più basso rivelano dei passaggi verso est e sud, che conducono verso la più profonda oscurità del Tempio. A nord, una stretta e illuminata fenditura nella roccia funge da entrata

Delle iscrizioni scolpite riempiono le pareti, il pavimento e il soffitto.

>

Alle 8:05 (dopo cioè cinque mosse), l’entrata della piramide sepolcrale si libera da sola grazie al daemon, indipendentemente da quello che il giocatore sta facendo. Ma non è finita: il valore del tempo può essere visualizzato anche durante il gioco, come accade nel seguente esempio:

 Statusline time;
 Constant Story "RUINS";
 Constant Headline
 .
 .
 .
 Object  tiny_claws "suono di piccoli artigli" thedark...
 
 Object orologio "orologio"
   with name 'orologio' 'ora',
        description [;
        print "Un orologio da polso a carbone che segna le ore ",
               the_time/60, ":"; 
        if ((the_time%60) < 10) print "0";
        print the_time%60, ".^";
        ],
 has worn;
 
 [ Initialise;
         TitlePage();
         location = Forest;
         move map to player;
         move sodium_lamp to player;
         move dictionary to player;
         move orologio to player;
         Settime (480, 1);
         Startdaemon (Timerdaemon);
           .
           .
           .

Tutte le volte che il giocatore esamina l’orologio, Inform stampa a video l’ora[1]:

Il Grande Altopiano
I tuoi appunti menzionano qualcosa circa questa bassa scarpata di calcare, ma la foresta pluviale ne ha rivendicato il possesso. Cupi ulivi crescono ovunque, e una pioggia appena smessa riempie l'aria con una calda nebbia bagnata.
La "Struttura 10" è un cumulo di materiali da costruzione, che una volta avrebbero potuto costituire una piramide sepolcrale, ma della quale ora nulla rimane, eccetto alcuni gradini scolpiti nella nuda roccia che portano giù, nell'oscurità.

Un fungo macchiato cresce dalla terra fradicia, su un gambo lungo.

La tua cassa d'imballaggio giace qui, pronta per contenere eventuali scoperte di alto valore culturale da riportare alla civiltà.

>i
Stai portando:
  un orologio (indossato)
  un dizionario maya di Waldeck
  una lampada al sodio
  la mappa di Quintana Roo

>esamina l'orologio
Un orologio da polso a carbone che segna le ore 8:01.

>z
Il tempo passa.

>esamina l'orologio
Un orologio da polso a carbone che segna le ore 8:03.

L’attributo worn fa sì che l’orologio sia già indossato dal giocatore (come potete facilmente vedere dall’elenco dell’inventario). Inoltre, per evitare che l’ora venga visualizzata anche sulla statusline basta inizializzare quest’ultima eliminando le istruzioni width = width – 15, MoveCursor (1, width); print (string) TIME__TX e LanguageTimeOfDay(sline1, sline2) dalla funzione DrawStatusLine. Se invece si vuole visualizzare solo l’ora (come in Flamel di Francesco Cordella), basta eliminare l’istruzione print (string) TIME__TX lasciando inalterato tutto il resto. Se si vuole infine cambiare la parola Tempo in Ora basta sostituire l’istruzione print (string) TIME__TX con print "Ora: ".

Note[modifica]

  1. Cliccate qui per scaricare i listati di questi esercizi (i file 5.04_1.inf, 5.04_2.inf, 5.04_3.inf, 5.04_4.inf, 5.04_5.inf e 5.04_6.inf).