Newsgroup: it.comp.giochi.avventure.testuali
Titolo: [Inform] Love In The Elevator

 premi pulsante OPPURE > premi pulsanti
"quale pulsante vuoi premere?"
La mia paura è che con la prima soluzione il parser si impiccia
(confonde "tre", NAME dell' object "TERZO PULSANTE", 'parsando' quel
tre come una frase incompleta "prendi tre ... pulsanti-
carote-ecc.ecc...")
Che dite?
Grazie a todos

 Sto cercando di gestire le pulsantiere; qual'è il modo migliore?
io ho fatto qualcosa di molto simile nel mio WIP: un dial con sei 
posizioni che cambia la destinazione di un portale teletrasbordante. 
Ecco il codice, lo regalo a te e a tutti i potenziali interessati: tra 
l'altro è una delle poche cose che ho finito e testato :)
spero ci sia tutto, copio e incollo da varie locazioni... i punti di 
sospensione qua e là sono aggiunti adesso, eh!
ciao
S
*************************************
Constant DIAL_POSITIONS = 6;
! questa diventa la porta dell'ascensore
Object Portal "shimmering portal" Veldt
		with  name "door" "portal" "passage",
		      description [; print "It's a kind of weird portal of shimmering 
light. ...   ],
	              door_to  Room_PianoTerra ! cambia a seconda della 
posizione, scrivi quella iniziale
		      door_dir s_to, ! o quel che ti pare
                  before [; touch:
                                   "You finger passes through the 
shimmering barrier.";
                             open: "This is not a door, you can't open 
it at will!";
                             push: "You press your palms against the 
shimmering barrier and push. Without effort, your
                                         arms pass through. You stop 
just in time to avoid falling.";
                             attack: "Trying to destroy the portal is 
completely futile."; ],
		 has  static door open;
! questo è un dial, tu devi fare una pulsantiera... praticamente uguale. 
i pulsanti NON sono oggetti distinti
Object dial "Dial" console
         with name "dial",
              description [; print "The dial has ", DIAL_POSITIONS, " 
positions. Beside each one there is a tag
                                    scribbled with a  hasty hand. Now 
the dial points to a position marked as ";
                                    XDial (dial.state); ],
              before [; Turn, Set: "Use: ~Set dial to <tag number>~. 
There are ", DIAL_POSITIONS, " positions.";
                        SetTo: if ((second > 0) && (second <= 
DIAL_POSITIONS)) {
                                   self.state = second;
                                   print "You turn the dial, setting it 
to ";
                                   XDial (self.state);
                                   Set_Portal (self.state);
                                   return true; }
                                !else
                                print "You cannot, the legal positions 
go from 1 to ", DIAL_POSITIONS, "^";
                                return true; ],
              state 1,  !!!initial state: nel tuo caso quella che ho 
chiamato Room_PianoTerra
         has scenery;
! funzione per visualizzare lo stato corrente del dial
[ XDial s;
    switch (s) {
     1: "~1: The African Veldt~";
     2: "~2: Mysterious Ulthar~";
     3: "~3: Fantasy World~";
     4: "~4: Young Carl Gauss' Home~";
     5: "~5: Ye Olde Adventurous Castle~";
     6: "~6: Hellish Dungeon~"; }
];
! fa cambiare i setting del portale a seconda della posizione del dial
[ Set_Portal param temp;
       switch (param) {
       1: temp = Veldt_Later;
       2: temp = Outside_Ulthar;
       3: temp = Fantasy;
       4: temp = Gauss_Hill;
       5: temp = Moat;
       6: temp = Dungeon; }
       Portal.door_to = temp; ! hack per implementare lo switch...
];

Sto cercando di gestire le pulsantiere; qual'è il modo migliore?
Un esempio di come gestire una pulsantiera è contenuto nel listato in
inglese CIA, di pubblico dominio. Non so però se fa al caso tuo...
Saluti da
Vincenzo Scarpa
http://www.casalengo.it/vscarpa/inform/manuale

>      1: "~1: The African Veldt~";
Di Clarkiana memoria? :)
Grazie per l'aiuto ma credo di aver risolto con una parse name, la
quale si premura di capire quale tasto della pulsantiera ha voluto
indiccare il giocatore . Però, la parse_name, appunto, non può gestire
i numeri scritti a cifra --- dovrò intervenire a livello di token :(

Kyoba wrote:

Non l'ho testata bene, ma questa dovrebbe andare senza parse_name
Class pushbutton
   with before [;
       Push: "Hai premuto ", (the) self, ".";
   ],
   has scenery;
Object Ascensore "Un piccolo ascensore"
   with description
        "Sei in un piccolo ascensore",
        w_to Salone
   has light;
Object -> pulsantiera "pulsantiera"
   with name 'pulsantiera' 'pulsanti',
     description "Una pulsantiera con 3 pulsanti.",
   has static female;
pushbutton -> pulsante1 "primo pulsante"
     with name 'pulsante' 'uno' 'primo' '1//';
pushbutton -> pulsante2 "secondo pulsante"
     with name 'pulsante' 'due' 'secondo' '2//';
pushbutton -> pulsante3 "terzo pulsante"
     with name 'pulsante' 'tre' 'terzo' '3//';
bye
-- 
Paolo Lucchesi
email: plucchesi(at)tin(dot)it
home page: 
http://www.paololucchesi.it

 i numeri scritti a cifra --- dovrò intervenire a livello di token :(
ma che brutto hack! Molto meglio la mia soluzione :)

> ma che brutto hack! Molto meglio la mia soluzione :)
Narcisista che non sei altro!!! In realtà riguardando le risposte mi
sono accorto che non parsa bene i numeri perchè li definivo come
 name '4' 'quarto'
piuttosto che come
  name '4//' 'quarto'
Anche se adesso non posso provare perchè sono fuori città :/
Grazie comunque :*

 Narcisista che non sei altro!!!
no no, è proprio un precetto dell'ingegneria del software: una soluzione 
pesante, involuta e barocca è sempre preferibile :)