|
|
 |
|
 |
Foto sfondi vari temi |
 |
Foto sfondi Italia |
 |
Foto sfondi Europa |
 |
Foto sfondi Mondo |
|
La scelta di usare il linguaggio stesso
(cioè JavaScript) per definire il contenuto delle pagine e
le operazioni sulle variabili di gioco semplifica sia il
programma che il lavoro dell'autore.
L'alternativa, consistente nel definire un 'linguaggio
autore', avrebbe comportato molto lavoro per un guadagno
quantomeno dubbio; inoltre la precedente esperienza col
Modulo Base mi aveva convinto della validità di
un'impostazione ibrida di questo genere.
Ciasuna pagina del racconto diventa quindi una funzione
JavaScript che disegna la pagina in un apposito frame, con
la semplice aggiunta del meccanismo per passare da
una pagina all'altra. I semplici link HTML non bastano,
perché un clic su una scelta può anche comportare
l'esecuzione di una serie di istruzioni.
|
|
Con riferimento al codice nel file
idra.js, le
funzioni rinvio() e scelta() ricordano
quindi nell'array scelte[] l'azione desiderata
(salto a una pagina, o istruzioni da eseguire) e
predispongono un link HTML che, in risposta a un clic,
chiami la funzione eseguiScelta() passandole il
numero dell'azione corrispondente. Tralasciando un problema
che vedremo tra breve, un clic su una scelta ha come effetto
l'esecuzione di: |
eseguiScelta(4) |
|
La eseguiScelta() consulta
scelte[4] che contiene l'azione richiesta e, con
l'aiuto della esegui(), ne esamina il tipo:
se è una pagina la presenta usando la consueta vai(),
altrimenti la considera codice da eseguire con la funzione
eval() tipica dei linguaggi dinamici, che
interpreta le istruzioni contenute in una stringa, ad
esempio:
|
eval("lire += 1000; vai(Edicola)") |
|
L'unica complicazione in questo semplice ma
efficiente meccanismo è causata dal pulsante "Indietro" del
browser: se infatti il lettore potesse tornare indietro a
piacimento, sarebbe impossibile garantire il corretto
funzionamento del racconto-gioco (si dovrebbe memorizzare a
ogni passo lo stato delle variabili per poterlo in
seguito ripristinare, cosa impossibile a causa dei limiti di
spazio nei salvataggi su disco). |
|
Per evitare che il tutto possa finire in uno stato
imprevisto a causa di queste operazioni, a ciascuna
presentazione di pagina è assegnato un identificatore
(idPagina), un semplice numero progressivo che
viene anche scritto nei link dalle funzioni rinvio()
e scelta(); in questo modo: |
eseguiScelta(23:4) |
|
In caso di clic, la eseguiScelta() verifica per
prima cosa che l'identificatore del link su cui il lettore
ha fatto clic (23 nell'esempio) coincida con quello
della pagina corrente. Se ciò non avviene, significa che la
pagina rappresentata sul video non è quella creata da Idra,
tpicamente perché il lettore ha premuto "Indietro" sul
browser, per cui viene presentato un messaggio di errore e
poi viene chiamata la funzione ridisegna() per
mostrare nuovamente al lettore la pagina corretta. |
| |