Newsgroup: it.comp.giochi.avventure.testuali
Titolo: LAT news :-)

Ciao a tutti!
Lo sviluppo del LAT è più lento di quanto mi aspettassi, in quanto più vado avanti e più cose mi viene 
voglia di aggiungere (ma questo credo sia normale). 
Il lavoro poi "limita" i miei sforzi.
Per il resto direi che fra poco dovrebbe vedere la luce la versione (sempre di sviluppo) 0.0.4.
Le ultime modifiche apportate sono:
-Gestione degli articoli: dichiarando una parola se ne specifica l'articolo   
 (es. OROLOGIO - LO). Successivamente su un eventuale oggetto identificato 
 da questo vocabolo è possibile avere la sua DescrizioneMinima() composta da 
 articolo + testo + aggettivo (se c'è).
 Nel caso dell'orologio il metodo restituisce "L'OROLOGIO" (e se fosse   
 giallo "L'OROLOGIO GIALLO").
-Aggiunto salvataggio e ripristino di una situzione.
-Tolti i metodi Ordina() dalle collezioni, adesso ogni aggiunta di un nuovo 
 vocabolo, oggetto, luogo...avviene già ordinata (prima le entità venivano 
 ordinate una volta terminato il caricamento).
-Scritte routine generiche: APRI X, CHIUDI X, METTI X DENTRO Y, PRENDI X DA  
 Y, più altre che non ricordo... :-)
-Aggiunta classe Log: permette in ogni punto dell'avventura di scrivere su 
 file. Gestiti i livelli INFO, AVVISO ed ERRORE. Impostando il livello di 
 debug vengono scritte solo le righe uguali o superiori a quel livello.
-Migliorata gestione sinonimi: per creare un sinonimo basta puntare alla 
 parola della quale si intende creare un sinonimo ed eseguire il metodo 
 Sinonimo(Testo). Aggiunto metodo Principale() al Vocabolo per risalire
 alla parola principale da un suo sinonimo.
-Aggiunti metodi alla Mappa: ScriviArea() permette di scrivere un messaggio 
 solo se l'oggetto "bersaglio" del messaggio si trova in un raggio x da un 
 luogo (considerato origine del messaggio). Questo serve per i rumori (ma 
 anche per altro, credo).
 Nell'esempio che uso per sviluppare ho creato una finestra che sbatte in 
 una stanza e volevo che il suo rumore si sentisse anche fuori dalla stanza.
 Ecco cosa ho scritto dopo aver sviluppato la ScriviArea:
 
    |  #La finestra sbatte:
    |  c = map.Cerca("CAMERA")        #Cerca il luogo dove è la finestra
    |  d = map.Distanza(c, map.Cerca(ego.CodiceLuogo))     #Calcola la distanza tra la camera ed ego
    |  if d.Distanza() == 0:
    |    map.ScriviArea("La finestra sbatte rumorosamente.",True,0,c,ego)  #Ego è nella stanza.
    |  else:    
    |    map.ScriviArea("Senti un rumore provenire da "+d.DirAP,True,2,c,ego)  #Messaggio se ego è vicino alla stanza
    |  me.Pausa(Rnd(1,4))        #Mette in pausa la sequenza \
    |             per un numero di turni che va da 1 a 4 casuale. 
 
 La routine scrive in un raggio di 0 il primo messaggio (solo se ego è nella 
 stanza, quindi) ed il secondo se ego è in un raggio di due luoghi. 
 Torna utile anche per gli oggetti in movimento. Ecco un gatto che si muove 
 per la casa (usando una sequenza):
    |  o = ogg.Cerca("GATTO")  #Cerca il gatto
    |  o.CodiceLuogo="CAMERETTA" #Sposta il gatto
    |  map.ScriviArea("Un gatto entra dal corridoio",True,0,map.Cerca(o.CodiceLuogo),ego)
    |  map.ScriviArea("Un gatto si dirige ad ovest ed entra in una porta.",True,0,map.Cerca("CORR01"),ego)
    |  me.Pausa(1)
 
 In questo caso ego (che è il player) vedrà uno o l'altro messaggio (o nessuno) 
 a seconda della sua posizione.
-Aggiunti metodi ad ogni Oggetto: OggettiVisibili() restituisce la lista 
 degli oggetti che l'Oggetto può raggiungere (oggetti nella stanza, oggetti  
 posseduti, ed oggetti contenuti in contenitori aperti).
-Aggiunta classe Output: servirà per gestire colori, font ed effetti. Per 
 ora non fa quasi nulla, ma almeno l'ho inserita nel "minestrone"! :-)
-Aggiunta funzione generale Doc(): genera una documentazione minima delle classi e dei
 metodi partendo dal codice. Permette anche di salvarla su file.
 Diciamo che genera una sorta di reference guide leggendo i metodi direttamente
 dal sorgente. 
Prima di arrivare alla versione 0.0.5 (che dovrebbe essere la prima scaricabile) mancano
un po' di cose.
Le più importanti sono:
-Gestione di array di oggetti identici (ora se creo 10 fiammiferi uguali vengono
 trattati come 10 oggetti differenti).
-Possibilità per ogni oggetto di eseguire azioni. Ora solo ego può eseguire azioni.
-Output separato per ogni oggetto (sia per il punto prima che per un eventuale multiplayer).
-Gestione di variabili nelle frasi inserite dall'utente (es. ASPETTA 5 MINUTI)
Vabbè, basta così. :-)
Grazie dell'attenzione.
Ciaooooo
Sakya

Ciao a tutti!
Volevo solo aggiungere di non spaventarvi per la sintassi che forse è un po'
scomoda. Credo che prima o poi mi inventerò una meta-sintassi che il LAT
compilerà facendo diventare il sorgente LAT uno script python.
Tante cose potrebbero semplificarsi.
Ad esempio la definizione di un vocabolo in LAT è:
    v = Vocabolo()
    v.Testo = "GUARDA"
    v.Codice = 100
    v.Ignorato = False
    voc.Aggiungi(v)
Ma interpretando il sorgente non è difficile farlo diventare qualche cosa
tipo:
   def Vocabolo(100):
     Testo = "GUARDA"
     Ignorato = False
che mi sembra molto più comodo. :-)
Ciaooo
Sakya



Ciao sakya.
Mi sembra che tu stia facendo un ottimo lavoro, con grande impegno e
abilità.
Ora è un po' troppo presto per fare valutazioni di merito e per dare
consigli; continua così e tienici informati.
A presto,  :-)
PaoloM

 continua così e tienici informati.
Non mancherò di certo.
Ciaooo
Sakya