Newsgroup: it.comp.giochi.avventure.testuali
Titolo: [INFORM] ...ma questo cavolo di switch???

salve a tutti, ho un problema di natura INFORMatica... volevo lavorare su una macchina da
eventualmente usare in una futura avventura e ho cominciata a svilupparla a parte nel mio
laboratorio (i.e. in un ambiente completamente separato). All'inizio ho scritto un
semplicissimo scheletro, e l'ho compilato senza problemi, ma non riesco a capire perché
non vuole funzionare. Mi spiego: ho definito un attributo (anzi, una *property* dato che
inform li chiama cosě) che indicasse lo stato corrente della macchina.
Ebbene, pur inizializzando lo stato a 1 (che sarebbe "idle"), appena parte l'esecuzione
(ed esamino la macchina) inspiegabilmente la var. 'stato' vale 76! Ovviamente lo switch
fallisce, come si appura facilmente usando l'etichetta DEFAULT dello switch. Non ho idea
di quale possa essere il problema.. qualcuno lo sa?
Ora incollo il codice (tutto, tanto č pochissimo) qui sotto. E' compilabile cosě com'č,
anche se non č che faccia molto :)
ciao
S
PS ovviamente č del tutto impossibile agire sulla variabile di stato... a maggior ragione
mi aspettavo che rimanesse fissa a 1!
---------------
Constant Story "Laboratory";
Constant Headline "^A virtual machine-building workbench^";
Include "Parser";
Include "VerbLib";
Include "Grammar";
Object Lab "Cramped Lab"
          with description "A simple, featureless lab.",
	  has light;
Object -> Machine "Strange-looking machine"
	    with name "machine" "strange" "weird",
	         stato 1,  ! 1==idle; 2==recording; 3==counting
	         description [; 
		 print "Debug: all'inizio il valore di 'stato' č ", stato, "^"; 
		 print "this is a truly weird piece of machinery. ";
			if (self hasnt on) "Now it's definitely off.";
			print  "The machine is currently ";
				  switch(stato)
				  {   1: print "turned on, but idle.";
				      2: print "recording.";
				      3: print "counting.";
				      default: print "*ERROR*"; }
			print " e ora il valore di 'stato' č ", stato, "^"; ],
		 has switchable;
[ Initialise;
location = Lab;
"^^^^^Days of researching, but now... a scientific discovery!^";
];

La cosa è più semplice di quanto si pensi e il problema è
presto risolto. Allora:
    Inform è un linguaggio ad oggetti quindi bisogna
    sostituire tutte le occorrenze di "stato" con "self.stato"
    (nelle routine, naturalmente e non nella definizione di
     proprietà).
HAPPY INFORMING
Giovanni
--
-------------------------------------------
GIOVANNI RICCARDI * TERRACINA (LT) * ITALY
EMAIL: 
compos...@tiscalinet.it
  ICQ: 40670340
-------------------------------------------
*******************************************
TAKE A LOOK TO MY OWN PROJECTS ON THE WEB
*******************************************
*         INFORM ITALIAN WEB SITE         *
*(a design system for Interactive Fiction)*
*                                         *
*        
http://inform.freeweb.org
        *
*******************************************
*******************************************
*         c o m p o s i z i o n i         *
*        digital  art & technology        *
*                                         *
*     
http://composizioni.freeweb.org
     *
*******************************************

 Giovanni
Può darsi che funzioni... ma se non ricordo male le proprietà funzionano
solo se si riferiscono a stringhe o routine. Quindi io in questo caso userei
una variabile generale (tipo StatoDellaMacchina).
Facci sapere Gaburri!
Ciao

 una variabile generale (tipo StatoDellaMacchina).
Funziona!! Lo provato e compilato prima di postare il msg.
Le proprietà possono riferirsi anche a valori numerici
(cfr. "Designer's Manual" paragrafo 3) senza problemi.


 Funziona!! Lo provato e compilato prima di postare il msg.
            ^^^^
            L'ho

 wrote in message
89pg9d$8gd$1...@lacerta.tiscalinet.it...

Ho provato! Hai ragione: funziona!
(scusa se ho dubitato)
Ciao

ok grazie a tutti... in effetti avevo pure letto di questo gadget, qualche mese
fa, e mi ero stupito che il compilatore richiedesse obbligatoriamente "self"
ogni volta (infatti sarebbe banale da parte sua "macroespandere" il riferimento
in assenza di ambiguità, come in questo caso). Poi ovviamente me ne sono
dimenticato... vabbe', pazienza, grazie lo stesso.
Se volete vi tengo informati del progresso della cosa, ma ho paura di rovinarvi
poi il gusto (sai che roba...) di giocarlo. Ditemi voi. Come prima cosa volevo
scrivere qualcosa di molto piccolo, compatto e basato sostanzialmente su un
puzzle molto complesso (quello appunto della macchina). La mia intenzione era di
proporre una piccola IF molto "tecnica", cioè senza concentrarmi sull'atmosfera
o lo stile di scrittura. 
Purtroppo sono costretto a scriverla in inglese, dato che interessa a qualche
mio amico d'oltreoceano... la versione italiana semmai seguirà dopo.
A dopo, ciao!
S


 o lo stile di scrittura.
Preferirei che non ci rovinassi la sorpresa!
Tra l'altro le avventure molto brevi, anche basate su un unico enigma, sono
sempre ben accette, e a me piacciono un sacco.
Vedi di non arenarti a metà!
Ciao

 dimenticato... vabbe', pazienza, grazie lo stesso.
La cosa non è poi così banale. Essendo *stato* una proprietà da te
dichiarata
all'inizio del codice, questa diventa una cosa "pubblica" cioè tutti gli
oggetti possono avere *stato*. Durante l'avventura protresti riferirti allo
stato dell'oggetto come "object.stato" per qualsiasi oggetto che ne è dotato
(if object provides stato) compreso l'oggetto corrente (self, appunto).


sempre ben accette, e a me piacciono un sacco.
Sai? Piacciono anche a me. Per esempio, un'avventura ambientata in una
casa con cinque stanze appena e un puzzle finale da risolvere mettendo
insieme una manciata di piccoli indovinelli - però curatissima nei
dettagli: mi piacerebbe un sacco :} Avventurarsi in ambienti ristretti
è bello perché memorizzi subito la mappa e il game diventa intrigante.
m@ttia
P r o g e t t o   L a z z a r o
Avventure Testuali per C64
http://lazzaro.vd1.net
I  F   I T A L I A
Tutto sulle Avventure Testuali
http://ifitalia.vd1.net

 (if object provides stato) compreso l'oggetto corrente (self, appunto).
sì, ma all'interno del codice dell'oggetto stesso, è chiaro (o per meglio dire,
dovrebbe esserlo) che mi sto riferendo all'oggetto corrente. Per dirla in modo
tecnico, è una questione di campo d'azione: la risoluzione dei nomi parte da
quello locale per poi eventualmente guardare quello globale (la cosa si ferma
qui, dato che inform non è a blocchi in questo senso, cioè non si possono
dichiarare oggetti all'interno di altri oggetti). Per riferirmi ad un altro
oggetto posso (potrei, dovrei) usare appunto la notazione puntata come dici tu.
Evidentemente per risparmiare tempo, spazio, fatica o chissà, G.Nelson ha deciso
di abolire anche questa minima divisione tra campi d'azione locale e globale.
Poco male, basta saperlo...
 
ciao!
S