Inform e Glulx/Inform e ancora Inform/Il tempo
Wikibooks, manuali e libri di testo liberi.
[modifica] Il tempo
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à. |
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à. |
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: ".
[modifica] Note
- ↑ 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).