Newsgroup: it.comp.giochi.avventure.testuali
Titolo: [INFORM] Problemi con la porta illusoria...

Salve a tutti,
ho creato una porta illusoria da sostituire alla porta di pietra di
Ruins, come esempio di programmazione:
Object  -> StoneDoor "porta di pietra"
  with  name 'porta' 'massiccia' 'grande' 'pietra' 'gialla',
        initial
            "Il passaggio @`e bloccato da una massiccia porta di
pietra gialla.",
        description
            "@`E solo una grossa porta di pietra.",
  before [;
         Enter: self.vanish();    
  ],
  react_before [;
         Go: if (noun == s_obj) self.vanish();
  ],
  vanish [;
    remove self;
    print "Non appena la tocchi, la porta svanisce.^";
    PlayerTo(Shrine);
  ],
has female locked lockable door openable;
il problema è che, quando il giocatore va nella
Shrine (la sala del Tempio), Inform mi stampa
il messaggio "Non puoi andare in quella
direzione." :( 
C'è un modo per non farlo apparire?
Grazie e ciao da
Vincenzo

 C'è un modo per non farlo apparire?
Ti sei dimenticato un pò di cose: come il door_dir, il door_to e il
found_in.
con il found_in dici in quali stanze si trova la porta. Con il door_dir,
dici, in queste stanze quale direzione conduce alla porta. con il door_to
dici dove si trova la porta. L'oggetto andrebbe riscritto in questo modo:
Object  -> StoneDoor "porta di pietra"
  with  name 'porta' 'massiccia' 'grande' 'pietra' 'gialla',
        initial
            "Il passaggio @`e bloccato da una massiccia porta di
pietra gialla.",
        description
            "@`E solo una grossa porta di pietra.",
 
  found_in shrine temple,
  door_dir [;
    if ( location == shrine ) return n_obj;
    return s_obj;
  ],
  door_to  [;
    if ( location == shrine ) 
        return self.vanish();
    return shrine;
  ],
  vanish [;
    remove self;
    print "Non appena la tocchi, la porta svanisce.^";
    return Shrine;
  ],
has female locked lockable door openable;
Soprattutto, dubito che il before enter funzioni come pensi tu, dato che non
entri mai dentro la porta, che non è un oggetto entrabile (non lo so,
andrebbe provato ma mi pare...)
Puoi codificare un oggetto NON PORTA che fa quello che vuoi tu; rimuovi
l'attributo DOOR e ricordati di mettere rfalse:
Object  -> StoneDoor "porta di pietra"
  with  name 'porta' 'massiccia' 'grande' 'pietra' 'gialla',
        initial
            "Il passaggio @`e bloccato da una massiccia porta di
pietra gialla.",
        description
            "@`E solo una grossa porta di pietra.",
  before [;
         Enter: 
                self.vanish();    
                rfalse; ! non stampare messaggi di default!
  ],
  react_before [;
         Go: 
                if (noun == s_obj) { 
                        self.vanish(); 
                        rfalse; ! non stampare msg. default
                }
  ],
  vanish [;
    remove self;
    print "Non appena la tocchi, la porta svanisce.^";
    PlayerTo(Shrine);
  ],
has female locked lockable openable;
 
Giancarlo

 Vincenzo
La locazione in cui si trova la porta come č stata definita? Dovrebbe
esserci "s_to stonedoor", che va modificato in:
s_to [;if (stonedoor in location) return stonedoor;else return Shrine];
cosě quando rimuovi la porta si vede a sud la nuova destinazione.
Ciao
Andrea

.

Ah, ecco, tra le varie cose avevo fatto un po' di confusione qui
inserendo l'attributo door che non ci voleva. Comunque era proprio
questo l'oggetto che volevo creare. Grazie ancora...
Ciao da
Vincenzo

così quando rimuovi la porta si vede a sud la nuova destinazione.
In realtà mi sono spiegato male io. Il mio obiettivo era quello di
creare una NON PORTA che fungesse però da porta finta, e quindi
non ci vogliono door_dir, door_to, ecc., così come non ci vuole
l'attributo door che (chissa perché) ho messo.
Comunque, dai un'occhiata al messaggio di Giancarlo...
Grazie anche a te, comunque. :))
Ciao da
Vincenzo

 Ancora una volta, grazie mille... :))
Prego. Quando vuoi...
Giancarlo.

Prego. Quando vuoi...
Già che ci sono, ti chiedo ancora questo:
nel capitolo 2 del mio manuale, ho scritto questo:
a++ -->viene PRIMA assegnato il nuovo valore alla variabile e DOPO
viene incrementato di 1; 
++a -->	viene PRIMA incrementato di 1 il nuovo valore e DOPO viene
assegnato alla variabile; 
a-- --> viene PRIMA assegnato il nuovo valore alla variabile e DOPO
viene decrementato di 1;
--a --> viene PRIMA decrementato di 1 il nuovo valore e DOPO viene
assegnato alla variabile; 
Tuttavia, ho il sentore che ci sia qualcosa che non va in ciò che
affermo, soprattutto per --aa e ++aa; tu cosa ne pensi?


 affermo, soprattutto per --aa e ++aa; tu cosa ne pensi?
Mah... non e' che sia proprio sbagliato... e' che non e' molto chiaro. 
Forse dovresti scrivere che a++ e ++a hanno esattamente lo stesso 
effetto sulla variabile a, e la differenza sta solo nel valore delle 
espressioni (a++) e (++a).
bye
-- 
Paolo Lucchesi
email: 
pluc...@tin.it
homepage: 
http://www.paololucchesi.it
"Non viviamo in un mondo perfetto (per fortuna)"

 
Giustissimo. Ammettendo che a=4:
if ( ++a == 4 ) --> Falso (a diventa prima 5, poi viene verificato)
if ( a++ == 4 ) --> vero ( a diventa 5, ma il valore che viene confrontato è
4)
Giancarlo.