Inform e Glulx/Le basi di Inform/Le direttive

Wikibooks, manuali e libri di testo liberi.
Jump to navigation Jump to search

Le direttive[modifica]

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

Inform e Glulx-sp.gif

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]

  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.