Non si deve però scrivere del codice HTML direttamente nella funzione che descrive la pagina, ma lo si deve produrre impiegando la funzione testo(). Dato che ciò può causare confusione, vediamo in questo capitolo alcuni esempi.
Per altri tipi di decorazione o impaginazione, come il disegno di fondo, l'intestazione e il piè di pagina, Idra fornisce apposite funzioni per semplificare il lavoro dell'autore.
Infine, si può personalizzare l'aspetto d'insieme della finestra stessa e delle sue suddivisioni (frame) agendo sui file HTML che la producono.
La pagina descritta da questa funzione apparirà più o meno così:function Nevaio() { titolo("Neve fresca!") testo("Meglio stare in ") testo('<font size="-2">silenzio</font>') //più piccolo testo(" per evitare una ") testo('<font size="+1">valanga</font>') //più grande testo(".") continua(Ghiacciaio) }
Meglio stare in silenzio per evitare una valanga. |
Da notare l'uso degli apici singoli ( ' ) al posto delle virgolette ( " ) per le stringhe che a loro volta contengono virgolette, come "+1". Volendo si possono usare apici singoli per tutte le stringhe passate alla funzione testo() (cioè messe tra le sue parentesi) per non confondersi.
La prima riga riduce la dimensione del testo, la seconda mostra la parola "silenzio" e la terza rimette tutto a posto com'era prima, tornando alla dimensione precedente dei caratteri; da notare, anche qui, l'uso degli apici per la stringa che contiene virgolette (la prima).testo('<font size="-2">') testo("silenzio") testo("</font>")
Questa suddivisione non è per nulla obbligatoria, ma serve solo per leggibilità; si può anche fare il contrario, cioè unire testo normale e testo modificato (con le istruzioni HTML) in una stessa stringa:
Il risultato sarà comunque identico a quello ottenibile con chiamate separate alla funzione testo():testo('Parla <font size="+2">forte</font>, non ti sento!')
Parla forte, non ti sento! |
<b> (grassetto)
</b> (fine grassetto)
<i> (corsivo)
</i> (fine corsivo)
<tt> (spaziatura costante)
</tt> (fine spaziatura costante)
<center> (centrato)
</center> (fine centratura)
<hr> (separatore a riga orizzontale)
Gli esperti di HTML potranno impiegare anche istruzioni più complesse, come le tavole (<table>) per suddividere la pagina in più colonne o riquadri distinti, come nell'esempio del capitolo 6, facendo però attenzione a non impiegare istruzioni non-standard riconosciute solo da uno specifico browser (es. Internet Explorer o Netscape).
Sono invece da evitare i link, cioè le istruzioni HTML che iniziano con <a href> e che consentono al lettore di fare clic sul testo evidenziato: essi interferirebbero infatti col meccanismo usato da Idra per il cambio di pagina, rendendo impossibile il proseguimento della lettura o uscendo del tutto da Idra.
il cui effetto è:testo('Se vedi un semaforo <font color="#ff0000">rosso</font>, frena.')
Se vedi un semaforo rosso, frena. |
Il colore è definito in RGB (rosso, verde, blu) con sei cifre esadecimali, due per ciascun colore. In pratica, per garantire la massima compatibilità con diversi browser, sistemi operativi e impostazioni video (specie nel caso di 256 colori), conviene usare solo questi valori per ciascuna coppia di cifre:
00 (colore assente)
33
66
99
cc
ff (colore al massimo)
Quindi #ff0000 significa: il massimo di rosso, niente verde e niente blu. Ecco qualche esempio di colori validi, tra i numerosi possibili:
e il loro effetto (togliamo qui il fondino giallo per non fare confusione):testo('<font color="#ff0000">Rosso</font>, ') testo('<font color="#00ff00">Verde</font>, ') testo('<font color="#0000ff">Blu</font>, ') testo('<font color="#ffff00">Giallo = rosso + verde</font>, ') testo('<font color="#ff00ff">Magenta = rosso + blu</font>, ') testo('<font color="#00ffff">Ciano = verde + blu</font>, ') testo('<font color="#660000">Rosso scuro</font>, ') testo('<font color="#666600">Ocra = giallo scuro</font>, ') testo('<font color="#999999">Grigio medio</font>, ') testo('<font color="#000000">Nero</font>.')
Rosso, Verde, Blu, Giallo = rosso + verde, Magenta = rosso + blu, Ciano = verde + blu, Rosso scuro, Ocra = giallo scuro, Grigio medio, Nero. |
Come si può facilmente vedere, non tutti i colori sono ben leggibili su fondo bianco; tra breve vedremo come modificare il colore di fondo della pagina.
In questo caso, avendo specificato l'opzione <center>, l'immagine sarà centrata rispetto ai bordi della pagina:titolo("Per Giove!") testo('<center><img src="Giove.jpg"></center>') continua(Saturno)
|
È preferibile usare immagini JPEG (di solito indicate con estensione .jpg), oppure PNG (.png), tenendo presente per queste ultime che alcune versioni precedenti dei browser possono richidere un plug-in (modulo aggiuntivo) per mostrarle.
Le immagini GIF (.gif) vanno invece evitate in quanto il relativo algoritmo di compressione è coperto da brevetto ed è quindi in contrasto con lo spirito FSF-GPL (ossia "open source") della distribuzione di Idra. A maggior ragione vanno evitati i BMP di Windows o altri formati non disponibili su tutti i computer.
È bene inoltre aggiungere a ciascuna immagine una scritta alternativa che verrà mostrata nel caso che l'immagine stessa non possa essere mostrata, ad esempio per effetto di una scelta nelle preferenze del browser; questa scritta può anche consentire la lettura ai non vedenti che impiegano un sintetizzatore vocale.
Per introdurre la scritta si aggiunge un alt="scritta" nell'istruzione HTML che crea l'immagine; l'esempio precedente diventa quindi:
Con alcuni browser e sistemi operativi, la scritta indicata con alt= verrà mostrata anche portando il puntatore del mouse sopra l'immagine e lasciandolo fermo per qualche istante.titolo("Per Giove!") testo('<center><img src="Giove.jpg" alt="Giove"></center>') continua(Saturno)
Avendo usato rinvio() anziché scelta(), le immagini verranno inserite all'interno del testo, in questo modo:titolo("Pilota automatico") testo("Preferisci andare su un satellite ben caldo come ") rinvio('<img src="Io.jpg" alt="Io">', Io) testo(" oppure su uno gelido come ") rinvio('<img src="Ganimede.jpg" alt="Ganimede">', Ganimede) testo(" o semplicemente tornare a ") rinvio("casa", Terra) testo("?")
Preferisci andare su un satellite ben caldo come
oppure su uno gelido come
o semplicemente tornare a casa? |
Usando le tecniche di programmazione illustrate nel capitolo 5, le immagini raffigurate si possono anche cambiare a seconda del valore delle variabili di gioco, come accade con le normali scelte.
Normalmente le immagini attive sono circondate da una cornice rettangolare più o meno colorata; se quest'ultima risultasse fastidiosa la si può eliminare aggiungendo border=0 nell'istruzione che le crea, in questo modo:
Un'immagine così definita non verrà in alcun modo evidenziata quando il puntatore del mouse vi passa sopra, ma quest'ultimo cambierà forma (tipicamente in una manina) per inidcare che un clic in quel punto avrebbe un effetto.rinvio('<img src="Ganimede.jpg" alt="Ganimede" border=0>', Ganimede)
Si tratta di aggiungere una nuova funzione OpzioniPagina() all'inizio del file gioco.js, ad esempio dopo la funzione Inizia() già presente, in questo modo:
Il colore desiderato è ovviamente quello definito dalle sei cifre, come nel caso già visto del colore di carattere; il resto può essere copiato pari pari (la riga che inizia con // è, come sempre, un semplice commento). Il risultato sarà che tutte le pagine avranno uno sfondo come questo:// Opzioni della pagina: sfondo ciano pallido function OpzioniPagina(pag) { return 'bgcolor="#ccffff"' }
Questa pagina ha uno sfondo ciano pallido. |
Per definire un colore di fondo diverso a seconda della pagina presentata (o delle condizioni di gioco) occorre un minimo di programmazione JavaScript; l'argomento è trattato più avanti nel manuale.
Un'ultima nota: i browser possono essere impostati in modo da non mostrare il colore di fondo richiesto; in tali condizioni alcune scritte potrebbero non essere leggibili, come ad esempio dei caratteri gialli previsti per un fondo nero. In questo caso è bene almeno indicare il possibile problema nella documentazione del racconto-gioco.
text="#ccff00" (colore del testo per tutta la pagina)
link="#00ff66" (colore dei link, cioè delle scelte)
background="b.jpg" (immagine da usare come sfondo)
L'immagine indicata in quest'ultimo esempio verrà usata per tassellare la pagina, ripetendola come in un pavimento a piastrelle; se ad esempio nella directory Dati si trova un file grafico cielo.jpg contenente questa immagine (qui mostrata su fondo grigio per evidenziarla):
|
e nel file gioco.js vi è questa funzione:
le pagine avranno questo aspetto:function OpzioniPagina(pag) { return 'background="cielo.jpg"' }
Suona un insistente segnale d'allarme: gli strumenti della cabina indicano che la pressione dell'ossigeno sta scendendo senza apparente motivo.
Sei a 4,723 anni luce dalla più vicina stazione stellare che ti potrebbe inviare soccorsi: riparare il guasto al più presto è la tua unica possibilità di sopravvivenza. |
Il colore dell'immagine è volutamente molto pallido: ciò è consigliabile per non disturbare la lettura del testo contenuto nelle pagine; l'effetto va sempre valutato osservando la pagina a pieno schermo e non, come in questo manuale, circondata da spazio bianco.
Come notato più sopra, è consigliabile usare immagini JPEG o PNG evitando le GIF o, peggio ancora, formati specifici di un certo sistema operativo.
In questo caso sono definiti sia l'immagine di fondo che il colore dei link, ossia quello delle scelte disponibili al giocatore (inclusi i rinvii incorporati nel testo).function OpzioniPagina(pag) { return 'background="cielo.jpg" link="#00ff66"' }
Già nel file gioco.js fornito nella cartella Dati dentro la cartella Base vi è una semplice funzione Intestazione(); essa ha il compito di lasciare un po' di spazio prima dell'inizio del testo:
Questa funzione può essere modificata per aggiungere, ad esempio, un'immagine decorativa in cima a ciascuna pagina; anche in questo caso con l'uso della programmazione JavaScript si possono ottenere intestazioni differenti, in base alla specifica pagina o al contenuto delle variabili di gioco.// All'inizio di ogni pagina: fa una riga di stacco function Intestazione(pag) { testo("<br>") }
La funzione reciproca PiePagina() viene eseguita, se esiste, al termine di ciascuna pagina; può essere usata ad esempio per mostrare informazioni sull'autore del racconto (anche se queste ultime trovano normalmnte posto nell'apposita pagina Info(), come illustrato nel capitolo 2):
Le pagine avrebbero dunque un aspetto di questo genere:// Alla fine di ogni pagina: separatore e informazioni function PiePagina(pag) { testo("<hr>") testo('<font size="-2">Tempesta, un racconto-gioco di Gigi Bombarda</font>') }
I quarantadue cannoni del galeone vomitano bordate di fuoco sul vascello nemico, che per un istante rimane invisible, coperto da una spessa nube di fumo. Tempesta, un racconto-gioco di Gigi Bombarda
|
In questo caso il testo cambia a seconda della pagina, ma il piè di pagina rimane sempre uguale; un esempio di impiego utile del piè di pagina consiste nell'elenco degli oggetti posseduti dal lettore, o comunque di altre informazioni utili, con un minimo di programmazione in JavaScript.
|
La suddivisione è definita nel file Racconto.html, nella linea:
in cui il numero 95 indica la larghezza in pixel del frame di controllo, dove appaiono i comandi (ricomincia, salva, riprendi, ecc.); la si può modificare a piacere, ricordando comunque che alcuni lettori potrebbero impiegare una finestra più piccola di quella usata dall'autore; è bene quindi non allargare troppo quest'area.<frameset cols="95,*" border=0>
Nello stesso file Racconto.html si possono aggiungere altri frame per motivi estetici o, più banalmente, modificare il titolo della finestra cambiando il contenuto della riga:
Il frame di lettura è completamente controllato da Idra, come illustrato in precedenza. Il colore del frame di controllo si può invece cambiare nel relativo file ctrl.html, modificando il valore di bgcolor nella riga:<title>Un racconto-gioco</title>
I colori di link e di vlink si riferiscono rispettivamente ai link normali e a quelli visitati, cioè già usati in precedenza; anch'essi sono naturalmente modificabili, in modo da adattarli al colore di fondo impostato. È meglio impostare in entrambi lo stesso valore, per evitare sgradevoli effetti estetici.<body bgcolor="#cc9966" link="#003300" vlink="#003300" onLoad="gioca()">
Sempre in ctrl.html si possono cambiare le scritte, ad esempio per modificare il riferimento a "gioco" nel link che richiama la pagina di informazioni:
In sostanza, con un po' di esperienza di HTML l'aspetto di un lavoro creato con Idra è ampiamente personalizzabile.<a href="javascript:parent.ctrl.focus();Informazioni()">Informazioni sul gioco</a><br> <br>
«-- Precedente | 1 | 2 | 3 | 4 | 5 | 6 | 7 | A | B | Indice | Successivo --» |