******************************************************************
LA PORTA ITALIANA
(tratto dall'articolo sulla programmazione in Inform di Giancarlo 
Niccolai, apparsi sul numero 2 di Terra d'IF)
http://www.robertograssi.net/at/terradif.asp
*******************************************************************

Un importante prerequisito: questi articoli sono riservati a coloro che già 
conoscono le basi della programmazione inform. Per i principianti di Inform 
consigliamo i seguenti siti:

	Guida a Inform per Principianti (GIP):
	http://www.inform-italia.org/docs/gip/
	Un manuale su Inform:
	http://www.casalengo.it/vscarpa/inform/manuale/


La porta italiana

Nelle lingue anglosassoni, l'azione di aprire un oggetto chiuso a chiave è percepita
come composta da "due" azioni ben distinte e separate.

La prima è quella di ruotare la chiave per sbloccare il meccanismo, detta unlock, e la
seconda è quella di aprire fisicamente l'oggetto. Questo è valido anche per l'azione
inversa: chiudere un oggetto a chiave è percepito come l'atto di chiudere l'oggetto, e
quindi di bloccarlo in modo che non possa essere aperto con l'azione lock.
La semantica italiana di "aprire" e "chiudere" a chiave o "con la chiave" include
entrambe le azioni.

Modificare la libreria in modo che possa gestire la semantica italiana nei confronti di
queste azioni può essere sconsigliabile. Nell'ipotesi di dover tradurre un'avventura
straniera, o di dover un giorno tradurre una propria avventura in un'altra lingua,
questo comporterebbe una notevole difficoltà, non tanto per il cambiamento della
libreria in se', quanto nel fatto che il codice del gioco si baserebbe sull'assunto che le
porte e gli oggetti chiusi a chiave si comporterebbero in un certo modo, con il rischio
di dover pesantemente modificare molti oggetti importanti.


Una piccola classe ci permette di ovviare a questa situazione. La classe fa questo
lavoro: se il giocatore chiede di "chiudere con una chiave" un certo oggetto o una
porta, la classe genera le azioni Close e Lock in sequenza, e solo se l'oggetto non è già
chiuso. Allo stesso modo, se il giocatore vuole aprire un oggetto usando una certa
chiave, la classe provvederà prima ad eseguire un Unlock e poi un Open a meno che
l'oggetto non sia già aperto.
Il giocatore potrà indifferentemente usare i verbi "sblocca" e "blocca" per usare una
chiave su un oggetto e verificare se è possibile "girarla", oppure usare direttamente
l'azione composta che consiste nell'aprire o chiudere un oggetto "a chiave".


	Class PortaItaliana
	with
	before [;
		Lock:
		if (self has open )
		give self ~open;
		rfalse;
	],
	after [;
		Unlock: give self open;
	];


Questa soluzione si adatta alla libreria Infit, che genera un'azione unlock se il giocatore
chiede di aprire un oggetto con una determinata chiave o lock se chiede di chiudere
un oggetto a chiave.



