Holz,Nahrung,gold... in einer datei speicher
Übersicht

FWeinbehemals "ich"Betreff: Holz,Nahrung,gold... in einer datei speicher |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also ich möchte in einer Datei die Rohstoffe eines spielers speichern. In dem Spiel soll es möglich sein mehrere Speicherstände zu haben, wie ist das zu machen.
Danke für Antwort |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
Onlinehilfe->Dateifunktionen(read.../write...) | ||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
Artemis |
![]() Antworten mit Zitat ![]() |
---|---|---|
ql:ReadFile, ql:writefile, ql:openfile, ql:readbyte, ql:writebyte, ql:readstring, ql:writestring, ql:readint, ql:writeint, ql:readfloat, ql:writefloat, ql:readline, ql:writeline. ![]() |
||
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja die kenne ich aber ich habe ein proble ich weiß den spielernamen
und die rohstoffe ich speicher das ganze dann so: SpielerName1000,1000,1000 Nun zu meinem poroblem ich lade mir mit Readline die Ganze zeile herein und mit instr suche ich dann nach dem namen wenn dieser Vorhanden ist soll der eintrag gelöschtwerden und mit dem neuen ersetzt werden und da ist mein problem das ersetzen wie soll ich das machen. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Indem du die ganze datei einlädst, die zeile änderst die du ändern möchtest (zb indem du alle Zeilen in einem Array speicherst) und dann die Datei wieder schreibst.
Du kannst nicht selektiv daten ersetzen, da B3D keinen sequentiellen Dateizugriff unterstützt. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
nach dem laden das file wieder schließen, dann neu öffnen vor dem speichern und er beginnt am anfang und du kannst dieder rein schreiben.
sollte es irgendwo im file stehen, musst du mit seekfile die position angeben, an der er schreiben soll |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
Florian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dreamora hat Folgendes geschrieben: Du kannst nicht selektiv daten ersetzen, da B3D keinen sequentiellen Dateizugriff unterstützt. Du kennst dich ja mit sequentiellem Dateizugriff besonders gut so Na wie heißt dieser Dateizugriffsart? Code: [AUSKLAPPEN] DateiNr=Readfile("Text.txt") While not(eof(DateiNr)) Zeile$=Readline$(DateiNr) wend CloseFile DateiNr Hier wird Zeile für Zeile die Datei gelesen. Beim sequentiellen zugriff werden die Datensätze fortlauft geschrieben oder gelesen. MfG Florian |
||
Das große BlitzBasic Community Tutorial
Stackmaschine 2.0 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hat keinen bestimmten Namen, zumindest kenne ich keinen.
Und ja, beim sequentiellen Datezugriff existieren in der Datei nur Blöcke fester länge (zb 1000 Byte), unabhängig davon, wieviele Daten wirklich in dem Block stehen. Dadurch kann man dynamisch Daten überschreiben ohne das es nachfolgende Daten überschreibt etc. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Hip Teen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Dadurch kann man dynamisch Daten überschreiben ohne das es nachfolgende Daten überschreibt etc.
Sowas geht doch in BB, oder? Mit SeekFile an die Position, die man überschreiben will, und per Writebyte soviele Bytes überschreiben, wie man will. Wenn ich mich recht erinnere werden die nachfolgenden Bytes dadurch nicht beeinträchtigt. |
||
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger" |
Florian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dreamora hat Folgendes geschrieben: Hat keinen bestimmten Namen, zumindest kenne ich keinen.
Und ja, beim sequentiellen Datezugriff existieren in der Datei nur Blöcke fester länge (zb 1000 Byte), unabhängig davon, wieviele Daten wirklich in dem Block stehen. Dadurch kann man dynamisch Daten überschreiben ohne das es nachfolgende Daten überschreibt etc. Beim sequentiellen Dateizugriff können Blöcke eine unterschiedliche länge haben, deshalb kann man die Datensätze nur fortlaufend lesen ober schreiben. Random-Dateien haben Datensätze gleicher Länge, deshalb kann man zu jeder Zeit auf einen beliebigen Datensatz zugreifen. MfG Florian |
||
Das große BlitzBasic Community Tutorial
Stackmaschine 2.0 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Flo hat natürlich recht. Verwechslung meinerseits. ![]() Was das schreiben betrifft: Dachte Blitz hat einen Datenstream der Datei (darum auch Seek)? Sprich wenn man mitten drin ein Byte schreibt wird das Byte an der Stelle ersetzt und nicht der Stream erweitert an der Position. Aber vielleicht nutze ich auch schon zu lange BM etc ... |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Warum denn immer so kompliziert? Es reicht doch völlig, die ganze Datei einfach neu zu erstellen.
Und wenn du schon die alte Datei extra vorher einlesen möchtest, um sie zu ändern (was ja gar nicht nötig ist), würde es reichen, Zeile für Zeile in ein String-Array einzulesen. Dann loopt man eben durch das Array, findet die gewünschte Zeile, ersetzt diese und speichert das ganze Array wieder ab (alte Datei überschreiben). Ist doch kein Problem. Um ganz gezielt Fragmente inerhalb eines Strings zu extrahieren, würde ich die gute alte Str_Explode benutzen: Code: [AUSKLAPPEN] ;---------------------------------------------------
; EXTRACT SECTIONS OF A STRING ; SECTION = FRAGMENT TO RETURN (0 - ...) -1 FOR LAST ;--------------------------------------------------- Function Str_Explode$(txt$, divider$, section%) Local i%, char$, sec%, tmp$, sections% ; COUNT FRAGMENTS For i = 1 To Len(txt$) If Mid(txt$,i,1) = divider$ Then sections = sections + 1 Next ; RETURN LAST FRAGMENT? If section = -1 Then section = sections For i% = 1 To Len(txt$) char$ = Mid(txt$,i,1) If char$ = divider$ Then sec = sec + 1 : i = i + 1 : char$ = Mid(txt$,i,1) If sec = section Then tmp$ = tmp$ + char$ Next Return tmp$ End Function ![]() Code: [AUSKLAPPEN] zeile$ = ReadLine(File) ; "Spielername|5004|400|3002"
name$ = Str_Explode(zeile$,"|",0) gold$ = Str_Explode(zeile$,"|",1) silber$ = Str_Explode(zeile$,"|",2) erz$ = Str_Explode(zeile$,"|",3) ![]() |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die Funktion ist nicht schlecht aber ich weis nicht wie du das mit dem Dim Feld meinest wie soll ich jede zeile dort hienein speichern oder wass meist du damit
Ach ja danke für die vielen Antworten |
||
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Fangen wir doch mal so an: musst du unbedingt die alte Datei voher öffnen, einlesen, verändern und wieder abspeichern -oder reicht es nicht, einfach die Datei vom Spiel aus komplett neu zu schreiben? Im Normalfall genügt doch letzteres. | ||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
![]() |
Toby |
![]() Antworten mit Zitat ![]() |
---|---|---|
x-pressive hat Folgendes geschrieben: Fangen wir doch mal so an: musst du unbedingt die alte Datei voher öffnen, einlesen, verändern und wieder abspeichern -oder reicht es nicht, einfach die Datei vom Spiel aus komplett neu zu schreiben? Im Normalfall genügt doch letzteres.
Eben, ich weiß zwar nicht, ob das jetzt hier passt. Aber warum machst dus nicht einfach so: Code: [AUSKLAPPEN] datei=WriteFile("blabla.sav") WriteString$(datei,spielername$) WriteInt(datei,holz) WriteInt(datei,nahrung) WriteInt(datei,gold) CloseFile datei und auslesen mit: Code: [AUSKLAPPEN] datei=ReadFile("blabla.sav") spielername$=ReadString$(datei) holz=ReadInt(datei) nahrung=ReadInt(datei) gold=ReadInt(datei) CloseFile datei |
||
Member of
Terra Multimedia |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
habs hinbekommen
Danke x-pressiv Für dise split engine |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group