Vai al contenuto

Inform e Glulx/Le basi di Inform/Le direttive

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Le direttive

[modifica | modifica sorgente]

Come 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 riga for (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 riga for (i=4...)) nell’ambiente Glulx[1] (testabile, volendo, come #IfDef TARGET_GLULX;);
  • l’istruzione #EndIf è sempre associata a ogni istruzione #IfDef perché chiude il ciclo if 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.

  1. 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.