Ad esempio, supponiamo che la variabile v.carb contenga un valore numerico che indica il carburante rimasto; lo si può mostrare in questo modo:
Il numero effettivamente mostrato dipenderà naturalmente dal contenuto della variabile v.carb, che a sua volta potrà essere conseguenza di precedenti azioni (ad esempio l'aver fatto rifornimento o meno):function Riserva() { titolo("In riserva") testo("Nel serbatoio sono rimasti solo ") testo(v.carb) testo(" kg di cherosene!") continua(Volo3) }
Nel serbatoio sono rimasti solo 23 kg di cherosene! |
Una comoda abbreviazione è consentita dal fatto che la funzione testo() accetta più argomenti (stringhe o valori) separati da virgole; lo stesso effetto sopra illustrato si può quindi ottenere più comodamente così:
function Riserva() { titolo("In riserva") testo("Nel serbatoio sono rimasti solo ", v.carb, " kg di cherosene!") continua(Volo3) }
In questo caso la condizione, che va racchiusa tra parentesi, è la variabile v.oro: se essa vale 1 (vera) le istruzioni fra parentesi graffe verranno eseguite, se invece vale 0 (falsa) non verranno eseguite. Se quindi v.oro è a zero, si leggerà:testo("Un ponticello di corda") if (v.oro) { testo(", che non ha l'aria di reggere il peso dei sacchi colmi di pepite,") } testo(" attraversa il profondo crepaccio.")
Un ponticello di corda attraversa il profondo crepaccio. |
Nel caso invece che l'avventuriero abbia trovato l'oro, e quindi la variabile v.oro contenga 1 (o comunque un valore diverso da zero), la pagina mostrerà:
Un ponticello di corda, che non ha l'aria di reggere il peso dei sacchi colmi di pepite, attraversa il profondo crepaccio. |
Ovviamente una sola delle due possibilità si potrà verificare, a seconda del valore contenuto nella variabile v.cassetta; si possono mettere anche più alternative:testo("La cassetta di sicurezza si direbbe ") if (v.cassetta) { testo("aperta.") } else { testo("chiusa.") }
Anche in questo caso, una sola delle istruzioni alternative verrà eseguita; se ad esempio la variabile v.veloc contiene 63, nella pagine apparirà:testo("Il vigile, esaminati i documenti, dice:<br>") if (v.veloc > 90) { testo("- Le devo ritirare la patente.") } else if (v.veloc > 50) { testo("- Fanno 173.200, concilia?") } else { testo("- Vada pure, ma badi che la tengo d'occhio.") }
Il vigile, esaminati i documenti, dice: - Fanno 173.200, concilia? |
Le parentesi graffe non sarebbero strettamente obbligatorie nel caso di una singola istruzione (come in questi esempi), ma consigliamo di metterle ugualmente per evitare errori; il tutto può anche stare su una singola riga, benché l'uso di righe separate faciliti la lettura.
Notiamo infine che le alternative con if ed else si potrebbero usare anche per le scelte, in modo da mostrarle o meno a seconda del valore di una variabile:
Tuttavia è in questo caso inutile ricorrere a JavaScript; basta infatti usare il meccanismo predefinito descritto nel capitolo 3, in questo modo:if (v.paracadute) { scelta("Ti butti", Pag28) } else { scelta("Tenti un atterraggio di fortuna", Pag46) }
L'istruzione if è comunque utile nel caso che si impieghino i rinvii nel testo, con l'apposita funzione rinvio(), anziché le scelte separate con la funzione scelta() (vedi capitolo 3). La si può inoltre usare anche per far apparire diverse immagini a seconda del valore contenuto in una variabile.scelta(v.paracadute, "Ti butti", Pag28) scelta(! v.paracadute, "Tenti un atterraggio di fortuna", Pag46)
Si possono mettere, al posto del nome della pagina, una o più istruzioni JavaScript da eseguire, ossia a tutti gli effetti un pezzo di programma collegato a quella specifica scelta:scelta("Entri nel cunicolo", Pag77)
Vi sono in questo caso due istruzioni, separate da un punto e virgola, che verranno eseguite l'una dopo l'altra:scelta("Entri nel cunicolo", "v.cunic = 1; vai(Pag77)")
In questo caso, avendo aperte le virgolette, non si può scrivere semplicemente il nome della pagina desiderata, cioè Pag77, ma occorre usare esplicitamente l'apposita funzione vai(), altrimenti il meccanismo non potrà funzioanre..v.cunic = 1 //cambia il valore della variabile v.cunic vai(Pag77) //va alla pagina descritta dalla funzione Pag77()
Le istruzioni incorporate nelle scelte vengono eseguite quando il lettore fa clic sulla scelta stessa, cioè nel passaggio tra una pagina e l'altra: esse non possono quindi scrivere nella pagina, ad esempio con la funzione testo(): ciò non avrebbe senso, in quanto la pagina vecchia è già stata completata e quella nuova non esiste ancora.
Se la variabile v.accesa contiene zero, verranno mostrate la prima e la terza scelta ma non la seconda:scelta(! v.accesa, "Accendi la luce", "v.accesa = 1; aggiorna()") scelta(v.accesa, "Spegni la luce", "v.accesa = 0; aggiorna()") scelta("Entri nel laboratorio", Lab)
|
Facendo clic sulla prima scelta, cioè "Accendi la luce", verranno eseguite le due istruzioni:
La prima cambia il valore contenuto nella variabile v.accesa, la seconda fa presentare nuovamente la stessa pagina; essendo però cambiate le condizioni, in questo caso appunto il valore di v.accesa, le scelte mostrate saranno diverse:v.accesa = 1 aggiorna()
|
In pratica la funzione aggiorna() è come vai(), con l'unica differenza che non va a un'altra pagina ma presenta nuovamente il contenuto della pagina corrente, adeguandolo ai nuovi valori delle variabili; la si deve usare in tutti i casi in cui qualcosa venga cambiato come effetto del clic su una scelta o su un rinvio.
In questo caso c'è un potenziale errore nell'istruzione:function Anello() { titolo("Scoperta") testo("Complimenti, hai trovato il quarto dei 7 anelli perduti!") v.punti += 20; // guadagna 20 punti --- attenzione! --- ... }
Se infatti una delle scelte contenesse l'istruzione aggiorna(), alla variabile v.punti verrebbe aggiunto 20 ogni volta che la pagina fosse riscritta, il che non è ovviamente il comportamento desiderato. A questo problema ci sono varie soluzioni, la più semplice delle quali consiste nell'assegnare i punti nella scelta che porta a questa pagina, così:v.punti += 20 //(v.punti = v.punti + 20)
In questo caso la pagina Anello() non contiene alcuna istruzione che aumenta i punti, quindi può essere rieseguita senza problemi. Una tecnica più complessa, utile in altre situazioni, è quella di usare una variabile per evitare di rieseguire delle istruzioni:scelta("Decidi di aprire il piccolo scrigno", "v.punti += 20; vai(Anello)")
Le istruzioni tra parentesi graffe verranno eseguite una sola volta, indipendentemente dal numero di riscritture della pagina, perché alla prima esecuzione la variabile v.trovatoAnello viene impostata a 1 e impedisce (per mezzo della if) una successiva riesecuzione delle stesse istruzioni.if (! v.trovatoAnello) { v.punti += 20 v.trovatoAnello = 1 }
Ad esempio, ecco un possibile sistema per scegliere tra due pagine con uguale probabilità:v.prob = dado(100) //numero compreso tra 1 e 100
Il lettore vedrà in ogni caso sempre la stessa pagina:testo("Anche se non sei sicuro di farcela, prendi la rincorsa e salti.") continua(dado() > 3, AltraSponda, Annega)
Anche se non sei sicuro di farcela, prendi la rincorsa e salti. |
Se però il numero estratto dalla funzione dado() sarà maggiore di 3 (cioè 4, 5 o 6) un clic su "Continua" porterà alla pagina AltraSponda(), mentre in caso contrario (1, 2 o 3) porterà alla pagina Annega(). La probabilità di raggiungere l'una o l'altra pagina sarà quindi in questo caso del 50%.
Una curiosità: il dado, o più tecnicamente lo stato del generatore di numeri pseudocasuali, viene salvato insieme al gioco: non funziona quindi il trucco di salvare e riprendere per vedere "se stavolta andrà meglio".
«-- Precedente | 1 | 2 | 3 | 4 | 5 | 6 | 7 | A | B | Indice | Successivo --» |