Newsgroup: it.comp.giochi.avventure.testuali
Titolo: MAC: bug per blocchi annidati...

Mi sembra di aver trovato un bug del MAC
quando ha a che fare con blocchi annidati
di tipo {+} e {} .
Infatti le seguenti righe dovrebbero stampare
uno dei messaggi 1, 2 e 3 scelti ciascuno col 33%
di probabilità:
if <condizione>
{+
  if random 33 100
   {
    message 1
   }
  if random 50 100
   {
    message 2
   }
  message 3
}
Mentre facendola eseguire stampa uno o più messaggi, come se proseguisse da
un blocco al successivo, invece
di fermarsi come imporrebbe il blocco esterno {+}.
E' abbastanza facile rimediare, basta inserire un halt alla fine di ciascun
blocco interno, in modo che termini per forza; oppure introdurre un flag che
consenta di capire se si è già entrati in un blocco oppure no. Comunque l'ho
segnalato, se a Paolo va di dargli un'occhiata...
(Ovviamente i blocchi con una sola istruzione sono superflui, era solo un
esempio semplice per mostrare il problema dei blocchi annidati, infatti il
blocco {+} funziona benissimo, da solo!)
Ciao
Andrea

 }
Se vuoi ottenere quello che dici questa e' la sintassi corretta:
if <condizione>
{+
	{+
	if random 33 100
	then message 1
	if random 33 100
	then message 2
	if random 33 100
	then message 3
	}
}
Rob
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 }
Ciao a tutti, sono nuovo e sto facendo un po' di pratica con MAC.
Io ho avuto esattamente lo stesso problema, sempre utilizzando "if" con
"random":
{+
if random 1 5
then set colpo 5 message 7
if random 1 4
then set colpo 4 message 7
if random 1 3
then set colpo 3 message 7
if random 1 2
then set colpo 2 message 7
set colpo 1 message 7
}
il message di debug è: "#7,Colpo: %colpo%."
Il risultato è del tipo:
Colpo: 3.
Colpo: 2.
Colpo: 1.
mentre dovrebbe stampare un messaggio solo.
Nel mio caso ho risolto aggiungendo un "break" alla fine di ogni
istruzione.
Ciao
Davide
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 mentre dovrebbe stampare un messaggio solo.
Forse ho capito: sei nella sezione [Events] vero? (La domanda vale anche 
per Andrea).
In effetti avete ragione, anche nella sezione [Events] l'esecuzione del 
blocco {+ dovrebbe finire dopo il primo comando valido.
Questo non succede, dovrei modificarlo, ma potrei creare dei problemi di 
compatibilita' con file .mac creati con versioni precedenti. Comunque la 
metto nella todo list. E magari metto una nota nel manuale.
bye
-- 
Paolo Lucchesi
email: plucchesi(at)tin(dot)it
home page: 
http://www.paololucchesi.it
"Tempus Edax Rerum"

 bye
Grazie


 }
Perché hai messo un doppio blocco {+ ?
Così sono due blocchi annidati inutili: fra l'uno e l'altro non c'è nulla...
Occhio poi che i random non vanno bene: è' possibile che non venga stampato
nulla (se nessun random passa il test)
e inoltre le prob. non sono tutte uguali:
il primo ha il 33%, il secondo ha il 33% del 66% (perché deve fallire il
primo e poi entrare nel secondo).
Ciao
Andrea

"Davide Centurione" <davidecent@_NOSPAM_tiscali.it> ha scritto nel messaggio
news:bj7cf5$e2u$1...@news.newsland.it...

E' vero, l'ho notato anch'io: oltre agli annidamenti, il bug è tale che
anche un blocco {+} non preceduto da condizioni esegue tutto quello che
trova, come un blocco {}.
Ciao
Andrea

 per Andrea).
No, anche nelle [Actions] fa lo stesso effetto, ma solo se i blocchi sono
annidati:
if cond
{+
  if cond1
    {
     ...
     ...
    }
  if cond2
    {
     ...
     ...
    }
}
Questo valuta sia cond1 che cond2.
Se invece il contenuto dei blocchi interni lo faccio
stare su una sola riga, togliendo quindi i blocchi e mettendo "then" al loro
posto, tutto funziona bene...
Ciao
Andrea