08-01-2011, 02:15 PM
(Questo messaggio è stato modificato l'ultima volta il: 08-01-2011, 02:17 PM da Sweet Vengeance.)
Ti sbagli, è possibilissimo. Ricorda che con più byte è possibile salvare qualsiasi tipo di cosa riutilizzando la rappresentazione dei valori nella memoria (esempio: un intero è formato da 4 byte, basta ricalcolarci e scriverli). Però ti consiglio di evitare questo tipo di cose con DBP perchè diciamo che è un pò complesso per quanto riguarda la scrittura/lettura e quindi ti consiglio di fare tutto tramite stringhe. Eccoti il modulo che utilizzo io per DarkSv3Engine per leggere un file di testo (o qualsiasi file) riga per riga. Il separatore è "chr(13)+chr(10)"
Adesso per leggere il file richiami semplicemente la funzione LeggiFile$(nome del file). Il nome è relativo alla directory del gioco ovviamente.
puoi leggere i vari dati utilizzando la funzione KeyValue$ il primo parametro è il testo da cui leggere la variabile, il secondo è il nome della variabile e il terzo è il valore di default nel caso la variabile non sia stata descritta nel file. Stai attento però che questa funzione è pignola: non ammette spazi prima e dopo del "="
Per quanto riguarda il VB.net 2005 è semplice:
Supponendo di avere queste variabili che si modificano nell'editor:
Per il salvataggio farò semplicemente:
Codice:
Rem ***** Included Source File *****
REMSTART
------------------------------------------------------------
Autore: Sconosciuto.
Modulo: Entita.db
------------------------------------------------------------
Questo modulo contiene i metodi e le istruzioni standard
per la gestione delle stringhe.
------------------------------------------------------------
I comandi di questo modulo non hanno nessuna specifica perchè
prendono il nome dal tipo di azione che eseguono.
------------------------------------------------------------
REMEND
//------------------------------------------------------------
// Lettura di un testo da un file
// Autore: Mauro Leone
//------------------------------------------------------------
function LeggiFile$(filename$)
fileNum# = 1
result$ = ""
// Apre il file
open to read fileNum#, filename$
// Se è riuscito ad aprirlo...
if file open(fileNum#)=1
// ... leggilo fino alla fine
while file end(fileNum#)=0
newline$ = ""
read string fileNum#,newline$
// Se la riga letta non è una riga di commento o è una riga <= 2 caratteri
if left$(newline$,2) <> "//" and len(newline$) > 2
result$ = result$ + newline$ + chr$(13)+chr$(10)
endif
endwhile
endif
// Chiude il file
close file fileNum#
endfunction result$
//------------------------------------------------------------
// La funzione Replace
//------------------------------------------------------------
function Replace$(s$,c$,nc$)
for n=1 to len(s$)
tc$=mid$(s$,n)
if tc$=c$
tc$=nc$
endif
ns$=ns$+tc$
next
endfunction ns$
//------------------------------------------------------------
// La funzione Piece$ permette di prendere una parte della stringa.
// E' simile a split.
//------------------------------------------------------------
function Piece$(s$,entry,char$)
For n=1 To entry-1
p=instr(s$,char$)
If p
s$=Right$(s$,Len(s$)-p)
Else
exitfunction ""
EndIf
Next
p=Instr(s$,char$)
If p<1
Else
s$=Left$(s$,p-1)
EndIf
endfunction s$
//------------------------------------------------------------
// Lette un valore da un testo nel formato:
// findname$=valore
//------------------------------------------------------------
function KeyValue$(properties$,findname$,defaultvalue$)
findname$=lower$(findname$)
repeat
p=Instr(properties$,chr$(13)+chr$(10))
if p>0
keypair$=left$(properties$,p-1)
properties$=right$(properties$,len(properties$)-p-1)
else
keypair$=properties$
properties$=""
endif
p=instr(keypair$,"=")
if p=0
exitfunction ""
else
name$=left$(keypair$,p-1)
value$=right$(keypair$,len(keypair$)-p)
if lower$(name$)=findname$ then exitfunction value$
endif
until properties$=""
endfunction defaultvalue$
//------------------------------------------------------------
// Cerca la posizione di un stringa/carattere in una data stringa
//------------------------------------------------------------
function Instr(searchstring$,findstring$)
l1=len(searchstring$)
l2=len(findstring$)
dl=l1-l2
if dl<l then exitfunction 0
for n=0 to dl
endp=n+l2
s$=right$(searchstring$,l1-n)
s$=left$(s$,endp-n)
if s$=findstring$ then exitfunction n+1
next n
endfunction 0
Adesso per leggere il file richiami semplicemente la funzione LeggiFile$(nome del file). Il nome è relativo alla directory del gioco ovviamente.
Codice:
dati_giocatore$ = LeggiFile$("player1.def")
[code]
Adesso, supponendo che il file "player1.def" sia scritto così:
[code]
// ===============================
// File di definizione per il primo giocatore
// ===============================
modello=uomo.x
nome=Rick
attacco=15
difesa=12
puoi leggere i vari dati utilizzando la funzione KeyValue$ il primo parametro è il testo da cui leggere la variabile, il secondo è il nome della variabile e il terzo è il valore di default nel caso la variabile non sia stata descritta nel file. Stai attento però che questa funzione è pignola: non ammette spazi prima e dopo del "="
Codice:
// dati_giocatore$ è la variabile che contiene il testo letto
modello$ = KeyValue$(dati_giocatore$, "modello", "empty.x")
nome$ = KeyValue$(dati_giocatore$, "nome", "Giocatore1")
attacco# = val(KeyValue$(dati_giocatore$, "attacco", "10"))
difesa# = val(KeyValue$(dati_giocatore$, "difesa", "10"))
Per quanto riguarda il VB.net 2005 è semplice:
Supponendo di avere queste variabili che si modificano nell'editor:
Codice:
dim nome_modello as string = "uomo.x"
dim nome as string = "Rick"
dim att as integer = 15
dim dif as integer = 12
Per il salvataggio farò semplicemente:
Codice:
dim scrittore As StreamWriter = New StreamWriter("player1.txt")
scrittore.WriteLine("modello=" & nome_modello )
scrittore.WriteLine("nome=" & nome)
scrittore.WriteLine("attacco=" & att )
scrittore.WriteLine("difesa=" & dif)
scrittore.Close ' Non mi ricordo se è close il comando per chiudere lo stream in questo momento xD