Inform e Glulx/Le basi di Inform/Le direttive
Le direttive
modificaCome in tutti i linguaggi di programmazione che si rispettino, anche in Inform sono presenti le direttive. Esse sono sostanzialmente delle istruzioni, inizianti tutte con il carattere #
, che vanno a influire sulla compilazione. Se apriamo il file Io.h
e osserviamo il contenuto dell’istruzione PrintStringArray
:
[ PrintStringArray the_array i; #IfDef TARGET_ZCODE; for (i=2: i<(the_array->1)+2: i++) print (char) the_array->i; #IfNot; for (i=4: i<=(the_array->3)+3: i++) print (char) the_array->i; #EndIf; ];
possiamo già da subito individuarne alcune:
- la riga
#IfDef TARGET_ZCODE;
dice a Inform di compilare il codice che segue (la rigafor (i=2...)
) solo se ci si trova "nell’ambiente" Z-code (se si sta, cioè, utilizzando il compilatore di Inform). Se così non è (l’istruzione#IfNot
) compila il restante codice (la rigafor (i=4...)
) nell’ambiente Glulx[1] (testabile, volendo, come#IfDef TARGET_GLULX;
); - l’istruzione
#EndIf
è sempre associata a ogni istruzione#IfDef
perché chiude il cicloif
aperto da quest’ultima;
Le altre direttive che Inform mette a disposizione sono #IfnDef <nome>
(che compila il codice che segue se nome
non è stato definito), #Iftrue <condizione>
(che compila il codice che segue solo se la condizione a cui fa riferimento è vera) e #Iffalse <condizione>
(come la precedente solo che la condizione a cui fa riferimento deve essere falsa).
La funzione ChangeStringArray
, funziona così com’è solo sotto Inform. Ecco allora, sulla base di quanto abbiamo appena visto, come fare in modo che funzioni anche sotto Glulx:
[ ChangeStringArray the_array i; #IfDef TARGET_ZCODE; for (i=2: i<(the_array->1)+2: i++) { if (the_array->i == 'a' or 's') the_array->i = random('e', 'i', 'u'); } #IfNot; for (i=4: i<=(the_array->3)+3: i++) { if (the_array->i == 'a' or 's') the_array->i = random('e', 'i', 'u'); } #EndIf; ];
Naturalmente l’istruzione #IfNot
non è obbligatoria. Se volessimo per assurdo fare in modo che questa funzione venisse compilata solo in ambiente Inform, basterebbe attuare la seguente modifica:
[ ChangeStringArray the_array i; #IfDef TARGET_ZCODE; for (i=2: i<(the_array->1)+2: i++) { if (the_array->i == 'a' or 's') the_array->i = random('e', 'i', 'u'); } #EndIf; ];
e la funzione così definita verrebbe del tutto ignorata in ambiente Glulx.
Note
modifica- ↑ Glulx (pienamente supportato da Infit e da Jif) è un linguaggio di programmazione, scritto dal grande Andrew Plotkin, che risulta essere perfettamente compatibile con Inform (tanto da poter essere considerato a tutti gli effetti un’estensione di quest’ultimo) e offre la possibilità di creare delle avventure testuali grafiche e sonore eseguibili con il programma WinGlulxe. Ulteriori informazioni potete trovarle al capitolo 6.