Inform e Glulx/Inform e ancora Inform/I colori
I colori
[modifica | modifica sorgente]Per quanto riguarda la gestione dei colori, l’istruzione SetColour
per la selezione del colore del testo e dello sfondo richiede, nel suo utilizzo, certe attenzioni particolari. Il primo "cambio di colore" deve avvenire all’interno della funzione Initialise
, anche se in effetti questa regola non è esclusiva poiché quest’istruzione può essere usata in un punto qualsiasi del listato. Tuttavia, per essere completamente sicuri che avvenga il cambio di colore almeno una volta, è meglio seguire la regola sopra citata:
[ Initialise; print "Vuoi supportare i colori (s/n)? "; if (yesorno()) clr_on = 1; else clr_on = 0;
SetColour(9,2); ClearScreen(); TitlePage(); location = Forest; . . .
Affinché l’istruzione SetColour
abbia effetto, occorre impostare a 1
la variabile di libreria clr_on
. Dal momento però, che non è detto che tutti gli interpreti supportino correttamente i colori (non bisogna mai dimenticare che Inform è linguaggio multipiattaforma - palmari compresi), e meglio far sì che Inform chieda prima al giocatore se desidera o no il loro supporto all’inizio del gioco; se quest’ultimo risponde alla domanda premendo i tasti s
e invio
, i colori vengono attivati (la variabile di libreria clr_on
viene cioè posta uguale a 1
), altrimenti (se il giocatore preme cioè i tasti n
e invio
) rimangono attivi quelli di default (la variabile di libreria clr_on
vale 0
e vengono di conseguenza ignorate da Inform tutte le istruzioni relative ad essi)[1]. In Inform, inoltre, a ogni colore corrispondono un numero e una costante, come mostrato nella seguente tabella:
|
I due valori assegnati all’istruzione SetColour
rappresentano rispettivamente il colore del testo (il 9
o CLR_WHITE
) e dello sfondo (il 2
o CLR_BLACK
); non è difficile, a questo punto, capire che il numero nove rappresenta il colore bianco e il numero due il colore nero. Volendo poi cambiare il colore di una o più parole, ecco cosa si deve fare:
[ TitlePage; ClearScreen(); print "^^^^^^^^^^^^^"; style bold; font off; SetColour(3,2); Centre("RUINS"); style underline; print "^^"; SetColour(5,2); Centre("[Premi SPAZIO per iniziare.]"); SetColour(9,2); print "^^"; font on; box "Ma l'alligatore non stava scavando il fondo della buca" "Che avrebbe dovuto essere la sua tomba" "Piuttosto era lui che stava scavando la propria buca" "Come riparo per se stesso" "" "-- dal Popol Vuh"; KeyCharPrimitive(); ClearScreen(); ];
ottenendo così il seguente risultato:
Per cambiare il colore del testo della descrizione di un oggetto occorre modificare la proprietà description
nel seguente modo:
Object Forest "Il Grande Altopiano" with description [; SetColour(4,2,2); print "I tuoi appunti menzionano qualcosa circa questa bassa "; SetColour(5,2,2); print "scarpata di calcare, ma la foresta pluviale ne ha "; SetColour(9,2,2); print "rivendicato il possesso. Cupi ulivi Crescono ovunque, e una pioggia appena smessa riempie l'aria con una calda nebbia bagnata.^ La ~Struttura 10~ @`e 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@`u, nell'oscurit@`a."; ], d_to steps, in_to steps, . . .
Il risultato potete vederlo nella figura che segue:
Partendo dal presupposto che i colori di default siano il bianco per il testo e il nero per lo sfondo, all’interno della proprietà description
dell’oggetto interessato si richiama una o più volte l’istruzione SetColour
mantenendo il colore dello sfondo di default (2) e cambiando invece il colore del testo (in questo caso prima 4 e poi 5), ripristinando poi il tutto al bianco e al nero (evitando così che il testo che segue resti in giallo). Quando si lavora con i colori, occorre quindi definire sempre quelli di default all’interno della funzione Initialise
. Il terzo numero (il 2), presente in entrambe le istruzioni, dice a Inform che il cambio di colore deve riguardare solo la finestra principale. Usando invece il numero 1, il cambio di colore avviene solo nella status line; se invece non si mette nulla, il cambio di colore avviene per entrambe (la status line e la finestra principale).
Un altro utilizzo abbastanza comune dei colori nelle avventure testuali, è quello di cambiare il colore dello sfondo e del testo al cambio di locazione o di sezione. Ecco allora una possibile implementazione:
Object Square_Chamber "La Sala Quadrata" with name... description... s_to [; Changecolor(Corridor); return Corridor; ], . . .
Se il giocatore si trova nella Sala Quadrata
e si dirige verso sud, viene effettuata la chiamata alla funzione Changecolor
che cambia il colore del testo da bianco a giallo e il colore dello sfondo da nero a blu:
. . . [ DeathMessage...
[Changecolor object; if (object == Corridor) SetColour(CLR_YELLOW,CLR_BLUE); if (object == Square_Chamber) SetColour(CLR_WHITE,CLR_BLACK); if (clr_on == 1) ClearScreen(); ];
Quando il giocatore torna indietro verso la Sala Quadrata
, viene effettuata una seconda chiamata alla funzione Changecolor
che ripristina i colori di default:
Object Corridor "Corridoio in pendenza" with description "Un corridoio basso e squadrato va da nord verso sud, inclinandosi verso la fine.", n_to [; Changecolor(Square_Chamber); return Square_Chamber; ], s_to StoneDoor;
L’istruzione ClearScreen
, si rende necessaria nella funzione Changecolor
perché viene cambiato anche il colore dello sfondo (a condizione, ovviamente, che i colori siano attivi). Se dobbiamo invece cambiare solo il colore del testo, occorre allora riscrivere la funzione Changecolor
nel seguente modo:
[Changecolor object; if (object == Corridor) SetColour(CLR_YELLOW,CLR_BLACK,2); if (object == Square_Chamber) SetColour(CLR_WHITE,CLR_BLACK,2); ];
Eliminando l’istruzione ClearScreen
e mantenendo il nero come colore di sfondo, il problema è risolto; provare per credere...[2]
Note
[modifica | modifica sorgente]- ↑ L’istruzione
yesorno
risponde solo alle letteres
(osi
) en
(ono
). Se si vogliono usare anche le altre, occorre rifarsi all’istruzioneReadChar
, da me creata e descritta nel capitolo 3. - ↑ Cliccate qui per scaricare i listati di questi esercizi (i file 5.04_1.inf, 5.04_2.inf, 5.04_3.inf e 5.04_4.inf).