Inform e Glulx/Inform e ancora Inform/Su e giù con l'ascensore: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Gian BOT (discussione | contributi)
m Bot: sostituzione tag obsoleti
Gian BOT (discussione | contributi)
Riga 2:
La gestione di un ascensore è un altro "classico" delle avventure testuali. Ecco allora come funziona l’esempio da me proposto:
 
<pre>Ascensore
{| style="width:100%;" class="wikitable"
Un semplice esempio che gestisce un ascensore a quattro piani
|<code>Ascensore<br>
di Vincenzo Scarpa
Un semplice esempio che gestisce un ascensore a quattro piani<br>
 
di Vincenzo Scarpa<br><br>
Versione 1 -- Numero di serie 050704<br>
Inform v6.30 -- Libreria 6/11 &nbsp;--&nbsp; Infit v2.5 &nbsp;&nbsp;&nbsp;S<br><br>
 
Piano terra<br>
Sei al pianoPiano terra.<br><br>
Sei al piano terra.
Puoi vedere delle porte scorrevoli qui.<br><br>
 
></code>
Puoi vedere delle porte scorrevoli qui.
|}
 
>
</pre>
 
All’inizio abbiamo davanti a noi delle porte scorrevoli. Naturalmente, occorre aprirle per entrare poi nella cabina:
 
<pre>>esamina le porte
{| style="width:100%;" class="wikitable"
C'è un pulsante accanto alle porte.
|<code>>esamina le porte<br>
 
C'è un pulsante accanto alle porte.<br><br>
>premi pulsante<br>
Le porte si aprono silenziosamente.<br><br>
 
>entra<br><br>
>entra
Cabina dell'ascensore<br>
 
Sei nella cabina dell'ascensore.<br><br>
Cabina dell'ascensore
Puoi vedere un pannello di controllo con quattro tasti numerati da zero a tre.<br><br>
Sei nella cabina dell'ascensore.
></code>
 
|}
Puoi vedere un pannello di controllo con quattro tasti numerati da zero a tre.
 
>
</pre>
 
Eccoci dunque dentro la cabina del nostro ascensore. Se non soffrite di claustrofobia, potete allora decidere a quale piano andare premendo l’apposito pulsante:
 
<pre>>premi 2
{| style="width:100%;" class="wikitable"
Le porte si chiudono e la cabina si mette in movimento.
|<code>>premi 2<br>
Improvvisamente, le porte si aprono di nuovo.
Le porte si chiudono e la cabina si mette in movimento.<br>
 
Improvvisamente, le porte si aprono di nuovo.<br><br>
>esci<br>
Non appena esci dall'ascensore, le porte scorrevoli si chiudono silenziosamente alle tue spalle.<br><br>
 
Secondo piano<br>
Sei al secondoSecondo piano.<br><br>
Sei al secondo piano.
Puoi vedere delle porte scorrevoli qui.<br><br>
 
></code>
Puoi vedere delle porte scorrevoli qui.
|}
 
>
</pre>
 
Una volta arrivati a destinazione, potete uscire dalla cabina quando volete, ricordandovi però di riaprire le porte se dovete usarla di nuovo:
 
<pre>>entra
{| style="width:100%;" class="wikitable"
Le porte sono ancora chiuse: credi forse di essere un fantasma?
|<code>>entra<br>
 
Le porte sono ancora chiuse: credi forse di essere un fantasma?<br><br>
>premi il pulsante<br>
Le porte si aprono silenziosamente.<br><br>
 
>entra<br><br>
>entra
Cabina dell'ascensore<br>
 
Sei nella cabina dell'ascensore.<br><br>
Cabina dell'ascensore
Puoi vedere un pannello di controllo con quattro tasti numerati da zero a tre.<br><br>
Sei nella cabina dell'ascensore.
></code>
 
|}
Puoi vedere un pannello di controllo con quattro tasti numerati da zero a tre.
 
>
</pre>
 
A questo punto, il suo utilizzo dovrebbe ormai essere abbastanza chiaro. Occorre però ancora notare che, se il giocatore preme il tasto corrispondente al piano su cui si trova l’ascensore, non accade nulla:
 
<pre>>premi 2
{| style="width:100%;" class="wikitable"
Non accade nulla.
|<code>>premi 2<br>
 
Non accade nulla.<br><br>
>
></code>
</pre>
|}
 
come d’altra parte avviene in tutti gli ascensori che si rispettino. Per quanto riguarda invece il codice, occorre fare alcune considerazioni. Iniziamo dalla funzione <code>Muovi_cabina</code>:
Line 112 ⟶ 126:
[[Immagine:Inform_e_Glulx-514.gif|centre|235 px|]]
 
dove gli oggetti Y e Z appartengono all’oggetto X (e sono di conseguenza i '''child''' di X), mentre quest’ultimo è il '''parent''' di Y e Z. L’oggetto J è il '''sibling''' di Z (e non appartiene a X) ma anche ''parent'' di K e così via.<br>
 
[[Immagine:Inform e Glulx-sp.gif|centre|435 px|]]
Line 128 ⟶ 142:
tutto sembra essere a posto. Tuttavia, quando il giocatore preme il pulsante 1:
 
<pre>Cabina dell'ascensore
{| style="width:100%;" class="wikitable"
|<code>CabinaSei nella cabina dell'ascensore<br>.
 
Sei nella cabina dell'ascensore.<br><br>
Puoi vedere un pannello di controllo con tre tasti numerati come zero, uno e due.<br><br>
 
>premi 1<br>
>premi 1
(il pannello di controllo)<br>
(il pannello di controllo)
È fisso al suo posto.<br><br>
È fisso al suo posto.
></code>
 
|}
>
</pre>
 
Inform assegna il nome <code>1</code> al <code>pannello di controllo</code> anziché all’oggetto <code>Pulsante_1</code>. Questo bug, che non so se imputare a Inform stesso o a Infit, è possibile evitarlo con un po’ d’astuzia. Iniziamo a esaminare l’oggetto <code>Pannello_controllo</code>:
Line 165 ⟶ 181:
Agendo in questo modo, l’ascensore si può spostare al primo piano:
 
<pre>Cabina dell'ascensore
{| style="width:100%;" class="wikitable"
|<code>CabinaSei nella cabina dell'ascensore<br>.
 
Sei nella cabina dell'ascensore.<br><br>
Puoi vedere un pannello di controllo con quattro tasti numerati da zero a tre.<br><br>
 
>premi 1<br>
>premi 1
(il pannello di controllo)<br>
(il pannello di controllo)
Le porte si chiudono e la cabina si mette in movimento.<br>
Le porte si chiudono e la cabina si mette in movimento.
Improvvisamente, le porte si aprono di nuovo.<br><br>
Improvvisamente, le porte si aprono di nuovo.
></code>
 
|}
>
</pre>
 
Come potete però vedere, prima che l’ascensore si sposti viene anche stampato il nome dell’oggetto, che non è ovviamente il pannello di controllo. Occorre allora fare una seconda modifica:
Line 193 ⟶ 211:
Cambiando il nome dell’oggetto come <code>secondo pulsante</code>, abbiamo risolto anche il secondo problema:
 
<pre>Cabina dell'ascensore
{| style="width:100%;" class="wikitable"
|<code>CabinaSei nella cabina dell'ascensore<br>.
 
Sei nella cabina dell'ascensore.<br><br>
Puoi vedere un pannello di controllo con quattro tasti numerati da zero a tre.<br><br>
 
>premi 1<br>
>premi 1
(il secondo pulsante)<br>
(il secondo pulsante)
Le porte si chiudono e la cabina si mette in movimento.<br>
Le porte si chiudono e la cabina si mette in movimento.
Improvvisamente, le porte si aprono di nuovo.<br><br>
Improvvisamente, le porte si aprono di nuovo.
></code>
 
|}
>
</pre>
 
Rimane tuttavia un altro problema; se il giocatore prova a premere il pannello di controllo:
 
<pre>Cabina dell'ascensore
{| style="width:100%;" class="wikitable"
|<code>CabinaSei nella cabina dell'ascensore<br>.
 
Sei nella cabina dell'ascensore.<br><br>
Puoi vedere un pannello di controllo con quattro tasti numerati da zero a tre.<br><br>
 
>premi pannello<br>
>premi pannello
Le porte si chiudono e la cabina si mette in movimento.<br>
Le porte si chiudono e la cabina si mette in movimento.
Improvvisamente, le porte si aprono di nuovo.<br><br>
Improvvisamente, le porte si aprono di nuovo.
></code>
 
|}
>
</pre>
 
Inform continua a eseguire il codice relativo all’azione <code>Push</code> associata (la stessa, cioè, dell’oggetto <code>Pulsante_1</code>). Per risolvere questo terzo problema, bisogna ricorrere a una soluzione drastica:
Line 234 ⟶ 256:
Utilizzando la proprietà <code>parse_name</code> in questo modo, "obbligo" Inform a ignorare totalmente i nomi "<code>pannello</code>" e "<code>controllo</code>":
 
<pre>Cabina dell'ascensore
{| style="width:100%;" class="wikitable"
|<code>CabinaSei nella cabina dell'ascensore<br>.
 
Sei nella cabina dell'ascensore.<br><br>
Puoi vedere un pannello di controllo con quattro tasti numerati da zero a tre.<br><br>
 
>premi il pannello<br>
>premi il pannello
Non vedi nulla del genere.<br><br>
Non vedi nulla del genere.
>premi 1<br>
 
(il secondo pulsante)<br>
>premi 1
Le porte si chiudono e la cabina si mette in movimento.<br>
(il secondo pulsante)
Improvvisamente, le porte si aprono di nuovo.<br><br>
Le porte si chiudono e la cabina si mette in movimento.
>esci<br>
Improvvisamente, le porte si aprono di nuovo.

>esci
Non appena esci dall'ascensore, le porte scorrevoli si chiudono silenziosamente alle tue spalle.<br><br>
 
Primo piano<br>
Sei al primoPrimo piano.<br><br>
Sei al primo piano.
Puoi vedere delle porte scorrevoli qui.<br><br>
 
></code>
Puoi vedere delle porte scorrevoli qui.
|}
 
>
</pre>
 
Certo, la risposta di sistema non è delle migliori (il pannello di controllo infatti esiste, nonostante Inform affermi il contrario), ma d’altra parte non si può sempre avere tutto<ref>Cliccate [http://www.vincenzoscarpa.it/inform/manuale/Capitolo5_esercizi.zip qui] per scaricare il listato di questo esercizio (il file '''5.07.inf''').</ref>.