Creare Videogiochi - Game Developer
Far comunicare VB e DB - Versione stampabile

+- Creare Videogiochi - Game Developer (https://www.making-videogames.net/giochi)
+-- Forum: Programmazione (https://www.making-videogames.net/giochi/Forum-Programmazione)
+--- Forum: Visual Basic, Visual Basic.Net (https://www.making-videogames.net/giochi/Forum-Visual-Basic-Visual-Basic-Net)
+--- Discussione: Far comunicare VB e DB (/thread-Far-comunicare-VB-e-DB)

Pagine: 1 2


Far comunicare VB e DB - Jonathan Archer - 08-01-2011

Ciao ragazzi ho un problemone. HO un bel progetto in corso in cui era previsto che Dark Basic Pro e Visual Basic 2005 Express Edition comunichino tramite file... Qual'é il problema?

Dark Basic scrive su file:
- Integer
- Byte
- Float
- Word
- String etc etc

Visual Basic scrive invece:
- Byte
- String

E dunque siccome necessariamente io devo scrivere su file numero superiori a 255 (dimensione di un byte) sono rimasto bloccato. Come faccio?


RE: Far comunicare VB e DB - x4ndr3a - 08-01-2011

non ce solo float e word. Con byte si comunica quando scrivi la memoria di un processo però sono cose complesse
e integer quando si riferisce ad un valore numerico (scusate il doppio post)
prova ad usare un integer


RE: Far comunicare VB e DB - Jonathan Archer - 08-01-2011

E' questo il problema che non posso scrivere un integer ma solo byte e stringhe infatti i comandi sono solo questi:
My.Computer.FileSystem.WriteAllBytes("Directory", byte, True)
My.Computer.FileSystem.WriteAllText("Directory", Stringa, True)

Falso se si deve sovrascrivere ma in questo caso dovrei fare tutti in un file. Magari qualche esempio potrebbe essere d'aiuto :\


RE: Far comunicare VB e DB - NecroRayder - 08-01-2011

(08-01-2011, 12:40 PM)Jonathan Archer Ha scritto: E' questo il problema che non posso scrivere un integer ma solo byte e stringhe infatti i comandi sono solo questi:
My.Computer.FileSystem.WriteAllBytes("Directory", byte, True)
My.Computer.FileSystem.WriteAllText("Directory", Stringa, True)

Falso se si deve sovrascrivere ma in questo caso dovrei fare tutti in un file. Magari qualche esempio potrebbe essere d'aiuto :\

scusa ho visto il post però ancora non mi è chiaro quello che vuoi fare...il tuo intento quale sarebbe?? puoi specificare meglio???


RE: Far comunicare VB e DB - Jonathan Archer - 08-01-2011

Certamente. Volevo far comunicare VB e DB tramite file. Per esempio:
Voglio trasmettere un valore di 1000 da VB a DB
Tuttavia com VB il massimo che si può scrivere in file é un Byte ossia 255.

Lo stesso vale al contrario se DB deve dare per esempio un valore Float a VB ma non saprei come fare


RE: Far comunicare VB e DB - NecroRayder - 08-01-2011

(08-01-2011, 01:28 PM)Jonathan Archer Ha scritto: Certamente. Volevo far comunicare VB e DB tramite file. Per esempio:
Voglio trasmettere un valore di 1000 da VB a DB
Tuttavia com VB il massimo che si può scrivere in file é un Byte ossia 255.

Lo stesso vale al contrario se DB deve dare per esempio un valore Float a VB ma non saprei come fare

se ho cpt...vorresti fare quello k voglio fare anche io e cioè metti per esempio che nel gioco il giocatore sale al lv 17...allora nel programma di vb dovresti essere in grado di vedere il tuo livello diciamo...sbaglio??? se è sbagliato ti chiedo scusa xD


RE: Far comunicare VB e DB - Sweet Vengeance - 08-01-2011

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)"

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$ Smile 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 "=" Wink
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



RE: Far comunicare VB e DB - Jonathan Archer - 08-01-2011

Non credevo che l'argomento fosse cosi' complicato... ma c'è un problemino ^^ Io non sono mai andato daccordo con i comandi di funzione e tantomeno sono riuscito a combinarlo col comando Include# quindi dovresti spiegarmi prima quelli xD


RE: Far comunicare VB e DB - Sweet Vengeance - 08-01-2011

E' semplice Smile Non preoccuparti per include#, l'editor fà tutto Wink Aggiungi un nuovo file al progetto (cliccando con il tasto destro sull'elemento Project nel Solution Explorer e fai "Add a new item". Ti farà salvare un file, salvalo nella cartellla del codice sorgente del programma e chiamalo "GestioneFile.dba" e poi salva. Adesso vedrai che avrai 2 file: uno scritto in grassetto che sarebbe il file di avvio del programma detto "Main File" e l'altro, GestioneFile.dba. Facendo così, il codice contenuto in GestioneFile.dba verrà aggiunto alla fine del Main File durante la fase di compilazione. Questo ti permette di tenere il codice sorgente pulito e non incasinato. Inoltre puoi separare codici specifici per file così da orientarti anche meglio. Non puoi dichiarare variabili in cima ai file che non sono il Main File, quindi gli altri possono contenere solamente funzioni e routine Smile

Copia nel file "GestioneFile.dba" (doppio click sul'elemento nel solution explorer) il codice di prima. Adesso puoi usare quelle funzioni nel Main File (e non solo Wink).

Una funzione non è altro che un normale comando, si differenzia tra i comandi base per l'inserimento dei parametri e per il nome: non può avere spazi nel nome e i parametri devono essere messi tra le parentesi tonde. Si differenziano dalle routine (che in dark basic pro sarebbero i blocchi di codice richiamati tramite il comando gosub) per la possibiltà di avere un valore di ritorno che può essere assegnato ad una variabile ad esempio. Per scriverle è semplice, si utilizza la semplice struttura:
Codice:
function nome_funzione<$ se stringa>(parametri)
    // codice
endfunction <valore_di_ritorno>
Quello compreso tra le parentesi angolari indica che è una cosa opzionale. Nel caso la funzione deve ritornare una stringa bisogna inserire il $ alla fine del nome della funzione.

Un'esempio semplice di funzione: wrapangle a 180° Smile
[spoiler]
La funzione nativa di Dark Basic "wrapangle" ci permette di riportare un valore numerico in un angolo. Esempio:
Codice:
a# = wrapangle(725)
a# adesso è uguale a 5, poichè per ottenere 725 un angolo deve fare 2 giri completi da 360 (quindi 720) e aggiungere 5° gradi.
[/spoiler]
Codice:
function wrapangle180(angolo#)
   a# = angolo
   while a# > 180
     a# = 180 - a#
   endwhile
endfunction a#
Adesso vediamo come richiamarla Smile Come abbiamo detto prima, non si mettono spazi e servono le parentesi tonde per racchiudere i parametri:
Codice:
#ax = 869
a# = wrapangle180(a#)
Adesso a# contiene il valore restituito dalla funzione Smile Le funzioni sono molto utili quando bisogna eseguire operazioni specifiche su determinati valori dati in input. Ma anche se dobbiamo solamente eseguire operazioni semplici che modificano valori. Esempio: scriviamo una funzione che data la velocità frontale (velz) e la velocità orizzontale (velx) ci muova un oggetto (index_oggetto).
Codice:
function muovi_oggetto(index_oggetto,velz,velx)
      move object index_oggetto, velz
      move object left index_oggetto, velx
endfunction

Ecco una piccola spiegazione sulle funzioni Smile


RE: Far comunicare VB e DB - Jonathan Archer - 08-01-2011

Dunque ricapitoliamo:
Function NomeFunzione(Parametri)
// Codice
Endfunction (Parametro che restituisce opzionale)

Su Funzione possiamo inserire parametri che verranno riportati e possibilmente utilizzati nella funzione stessa
Quando la funzione termina si può far restituire un valore che é stato precedentemente modificato in modo da poterlo usare nel Main Project.

Giusto?


RE: Far comunicare VB e DB - Sweet Vengeance - 08-01-2011

Esatto Smile Le varie funzioni che sopra ti ho scritto servono per cercare e tagliare parti di testo da una stringa e ritornare i valori trovati Smile


RE: Far comunicare VB e DB - Jonathan Archer - 08-01-2011

Bene... Ora dovrei riunire un pò tutto quello che ho capito per metterlo in pratica xD So che sono uno scocciatore ma se ti chiedessi di postarmi un esempio di cooperazione tra questi due programmi cosi' da poter analizzare un codice che sicuramente é ben montato ti seccheresti? xD


RE: Far comunicare VB e DB - Sweet Vengeance - 08-01-2011

Posso farti solamente il progetto per Dark Basic perchè ho VB.net 2010, e con il 2005 non riusciresti ad aprire il progetto.. Smile


RE: Far comunicare VB e DB - Jonathan Archer - 08-01-2011

Ti sarei lo stesso grato ^^ Intanto sto provando le funzioni prendendo esempio da te e finalmente ne ho capito il funzionamento *o*

PS: Io ho VB2010 anche però quando faccio setup non succede niente ._.


RE: Far comunicare VB e DB - Sweet Vengeance - 08-01-2011

Ecco qui l'esempio (allegato) Smile Non fà altro che caricare dei dati dai 3 file: test1.txt
test2.txt
test3.txt

Se vedi nel codice sorgente ho scritto un pò di analisi (a scuola mi hanno fatto prendere il vizio di documentare il codice quando devo rilasciarlo e quindi commento e scrivo).

Se apri il file test3.txt puoi vedere che ci sono 2 parametri in più: startx e starty. Prova ad inserirli anche dentro test1.txt e test2.txt e poi avvia il programma, vedrai che li carica Wink


RE: Far comunicare VB e DB - Jonathan Archer - 08-01-2011

Ok parto analizzando tutto! Nel frattempo avresti qualche consiglio per far partire VB2010? Ho XP SP3 ma non succede un ben niente, l'applicazione si autokilla (lo vedo sul task)

[SPOILER]E' incredibile come la Microsoft sia in grado di rilasciare un programma che sia buggato già dall'installazione e leggo online che non sono l'unico -.-[/SPOILER]
Ho già quelche dubbio su dei comandi che non ho mai usato (e a dire il vero non ho capito bene a che servono). Te li metto in grassetto:

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$



nome$ = KeyValue$( contenuto_file$, "nome", "[valore non inserito]" )
modello$ = KeyValue$( contenuto_file$, "modello", "[valore non inserito]" )
attacco# = val( KeyValue$( contenuto_file$, "attacco", "-1" ) )
difesa# = val( KeyValue$( contenuto_file$, "difesa", "-1" ) )
alto = val( KeyValue$( contenuto_file$, "alto", "1" ) )
startx# = val( KeyValue$( contenuto_file$, "startx", "0" ) )
starty# = val( KeyValue$( contenuto_file$, "starty", "0" ) )


RE: Far comunicare VB e DB - Sweet Vengeance - 08-01-2011

Allora Smile nella maggior parte dei casi, quando sono comandi nativi (quindi in blu) basta spostarti sopra con il cursore e premere F1 per aprire la guida, dovrebbe aprirti la documentazione su quei comandi Smile

left$(stringa$,lunghezza)
Come da nome, prende X (dove X è uguale a lunghezza) caratteri da stringa$ partendo da sinistra Smile

val(stringa$)
Converte la stringa in un numero Smile

KeyValue$
E' una funzione non nativa ma che è stata definita dentro GestioneFile.dba, prova a guardare Smile Ad ogni modo prendere come parametri un testo (non vuoto e ben formattato altrimenti crasha l'app), il nome di un parametro, un valore di default Smile il testo deve essere formattato con il seguente schema:
Codice:
nome_valore=valore
nv2=valore
nome_variabile=valore
Quindi nel testo che gli si passa bisogna inserire il nome di un parametro seguito dal segno "=" (senza spazi ne a destra ne a sinistra) e il valore del parametro. Se ci sono più parametri, vanno inseriti su più righe. Smile Il secondo parametro è il nome del parametro da cercare. La funzione restituisce il valore letto (quindi dopo il segno "=" affianco al nome del parametro nel testo). Bisogna specificare un 3° parametro come valore di default, nel caso il testo non contenga il parametro che si ricerca. Smile

Per VS2010: che OS hai?


RE: Far comunicare VB e DB - Sweet Vengeance - 08-01-2011

Allora Smile nella maggior parte dei casi, quando sono comandi nativi (quindi in blu) basta spostarti sopra con il cursore e premere F1 per aprire la guida, dovrebbe aprirti la documentazione su quei comandi Smile

left$(stringa$,lunghezza)
Come da nome, prende X (dove X è uguale a lunghezza) caratteri da stringa$ partendo da sinistra Smile

val(stringa$)
Converte la stringa in un numero Smile

KeyValue$
E' una funzione non nativa ma che è stata definita dentro GestioneFile.dba, prova a guardare Smile Ad ogni modo prendere come parametri un testo (non vuoto e ben formattato altrimenti crasha l'app), il nome di un parametro, un valore di default Smile il testo deve essere formattato con il seguente schema:
Codice:
nome_valore=valore
nv2=valore
nome_variabile=valore
Quindi nel testo che gli si passa bisogna inserire il nome di un parametro seguito dal segno "=" (senza spazi ne a destra ne a sinistra) e il valore del parametro. Se ci sono più parametri, vanno inseriti su più righe. Smile Il secondo parametro è il nome del parametro da cercare. La funzione restituisce il valore letto (quindi dopo il segno "=" affianco al nome del parametro nel testo). Bisogna specificare un 3° parametro come valore di default, nel caso il testo non contenga il parametro che si ricerca. Smile

Per VS2010: che OS hai?


RE: Far comunicare VB e DB - x4ndr3a - 08-01-2011

(08-01-2011, 05:15 PM)Sweet Vengeance Ha scritto: Ecco qui l'esempio (allegato) Smile Non fà altro che caricare dei dati dai 3 file: test1.txt
test2.txt
test3.txt

Se vedi nel codice sorgente ho scritto un pò di analisi (a scuola mi hanno fatto prendere il vizio di documentare il codice quando devo rilasciarlo e quindi commento e scrivo).

Se apri il file test3.txt puoi vedere che ci sono 2 parametri in più: startx e starty. Prova ad inserirli anche dentro test1.txt e test2.txt e poi avvia il programma, vedrai che li carica Wink

Azz... a scuola vi fanno studiare il VisualBasic?


RE: Far comunicare VB e DB - Sweet Vengeance - 08-01-2011

No Smile Però sono al 4° anno di un ITIS e quindi faccio programmazione. Al momento faccio Java e C++ Wink Tutti gli altri linguaggio (Visual Basic 6, VB.Net e C#, MySQL, Ruby[anche se ormai non lo ricordo proprio più]) li ho fatti da solo Smile


RE: Far comunicare VB e DB - Sweet Vengeance - 08-01-2011

No Smile Però sono al 4° anno di un ITIS e quindi faccio programmazione. Al momento faccio Java e C++ Wink Tutti gli altri linguaggio (Visual Basic 6, VB.Net e C#, MySQL, Ruby[anche se ormai non lo ricordo proprio più]) li ho fatti da solo Smile


RE: Far comunicare VB e DB - Jonathan Archer - 08-01-2011

Left$, Right$ e Val sono comandi utilissimi! L'ho appena provato e funge Smile

Lower$ invece a che serve ^^

Ho Windows XP SP3 con Net Framework 3.5 appena messo


RE: Far comunicare VB e DB - Sweet Vengeance - 08-01-2011

Vedi se questo può esserti utile: http://blogs.msdn.com/b/psiman/archive/2010/03/02/installing-visual-studio-2010-rc1-on-xp-sp3.aspx
Vedi se questo può esserti utile: http://blogs.msdn.com/b/psiman/archive/2010/03/02/installing-visual-studio-2010-rc1-on-xp-sp3.aspx


RE: Far comunicare VB e DB - Jonathan Archer - 08-01-2011

Niente da fare... non da segni di vita. Ma non andiamo Off Topic, d'altronde come questa lezione pomeridiana che mi hai fatto penso di aver risolto i miei problemi, per ora xD

D'altronde VB2005 va più che bene per quello che devo fare ^^

Vediamo se incontro ancora problemi con qualcosa. Ti faccio sapere Smile


RE: Far comunicare VB e DB - Sweet Vengeance - 08-01-2011

A disposizione Wink


RE: Far comunicare VB e DB - Jonathan Archer - 08-01-2011

Dimenticavo... ovviamente grazie 1000! Mi hai risparmiato non solo un esaurimento nervoso ma anche uno sconfortante abbandono del progetto Big Grin


RE: Far comunicare VB e DB - NecroRayder - 08-01-2011

mi dispiace di non esserti stato d'aiuto jonathan Sad però ringrazio tutti e 2 perchè grazie al vostro aiuto anche il mio proggetto sta avanzando Tongue


RE: Far comunicare VB e DB - Jonathan Archer - 09-01-2011

Non ti preoccupare Smile Siamo qui per imparare

Come potrei fare in modo che un ListBox possa mostrare come opzioni i file presente in una cartella specifica? Devo usare necessariamente il database?


RE: Far comunicare VB e DB - NecroRayder - 09-01-2011

(09-01-2011, 10:00 AM)Jonathan Archer Ha scritto: Non ti preoccupare Smile Siamo qui per imparare

Come potrei fare in modo che un ListBox possa mostrare come opzioni i file presente in una cartella specifica? Devo usare necessariamente il database?

Ecco qui un esempio di quello che vuoi fare xD però non usa una listbox bensì una filelistbox...come puoi vedere,comunque e molto semplice xD
http://hotfile.com/dl/95445061/10096f0/Esempio_FileListBox.rar.html

PS.spero di esserti stato d'aiuto Smile


RE: Far comunicare VB e DB - Jonathan Archer - 09-01-2011

Certo che mi sei stato utile! Big Grin Anche se il file é di VB6 e quindi me l'ha dovuto convertire Wink Ma funge alla perfezione!

A che servono i comandi:
Option Strict Off
Option Explicit On
?