Types Speichern?

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Raiden93

Betreff: Types Speichern?

BeitragSo, Feb 06, 2011 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey,
ich habe mich schon seit Tagen dafür interessiert wie ich einzelne Type Variablen in .dat speichern kann.

Mein Aktuelles Speicher System basiert nur auf normalen Variablen.
Code: [AUSKLAPPEN]
Function Speichern_Function()
   ;Daten Speichern
   Fileout = WriteFile ("Data/Save/Spielerdaten.dat")
   
   WriteInt Fileout,Move
   WriteInt Fileout,SpielerX
   WriteInt Fileout,SpielerY
   WriteInt Fileout,SpielerX_Draw
   WriteInt Fileout,SpielerY_Draw
   WriteInt Fileout,ScrollX
   WriteInt Fileout,ScrollY
   WriteInt Fileout,Gold
   WriteInt Fileout,Erfahrung
   WriteInt Fileout,Erfahrung_Max
   WriteInt Fileout,Spieler_Level
   WriteInt Fileout,Energie
   WriteInt Fileout,Energie_Max
   
   CloseFile Fileout
   
   ;Karte Speichern
   Karte$ = WriteFile("Data/maps/map"+Map_Level+".map")
   
   For MapX = 0 To 20
      For MapY = 0 To 20
         WriteInt(Karte$,map(MapX,MapY))
      Next
   Next
   
   CloseFile(Karte$)
End Function

Function Laden_Function()
   ;Daten Laden
   Filein = ReadFile ("Data/Save/Spielerdaten.dat")
   
   Move = ReadInt (Filein)
   SpielerX = ReadInt (Filein)
   SpielerY = ReadInt (Filein)
   SpielerX_Draw = ReadInt (Filein)
   SpielerY_Draw = ReadInt (Filein)
   ScrollX = ReadInt (Filein)
   ScrollY = ReadInt (Filein)
   Gold = ReadInt (Filein)
   Erfahrung = ReadInt (Filein)
   Erfahrung_Max = ReadInt (Filein)
   Spieler_Level = ReadInt (Filein)
   Energie = ReadInt (Filein)
   Energie_Max = ReadInt (Filein)
   
   CloseFile Filein
End Function

Xeres

Moderator

BeitragSo, Feb 06, 2011 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
...und etwa genauso speicherst du Types ab. Du Speicherst alle Felder in einer bestimmten Reihenfolge - Fertig!
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Raiden93

BeitragSo, Feb 06, 2011 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
werde ich mal ausprobieren aber das in einer eigenen data Very Happy

Ana

BeitragSo, Feb 06, 2011 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Grunde ist es so wie Xeres sagt, aber ein paar Kleinigkeiten könnte man dazu noch sagen,

z.B bietet es sich an, als erstes zuzählen wie viele Instanzen es von dem zu speichernden Type gibt und diese dann als erstes in die Datei schreiben. Damit hast du dann die Möglichkeit mit eine For - Each - Schleife so oft beim laden auszuführen und dann immer wieder die Function zum laden aufrufen, in der du dann jedes Feld über read... laden kannst.
Don't only practice your art,
but force your way into its secrets,
for it and knowledge
can raise human to divine

Raiden93

BeitragSo, Feb 06, 2011 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt und hi ana Very Happy.
Ich werde mich gleich mal mit befassen.

Weiteres folgt.......

Raiden93

BeitragSo, Feb 06, 2011 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Meine Funktion schaut nun so aus aber Schmiert total ab :/

Code: [AUSKLAPPEN]
Function Speichern_Function()
   ;Daten Speichern
   Fileout = WriteFile ("Data/Save/Spielerdaten.dat")
   
   WriteInt Fileout,Move
   WriteInt Fileout,SpielerX
   WriteInt Fileout,SpielerY
   WriteInt Fileout,SpielerX_Draw
   WriteInt Fileout,SpielerY_Draw
   WriteInt Fileout,ScrollX
   WriteInt Fileout,ScrollY
   WriteInt Fileout,Gold
   WriteInt Fileout,Erfahrung
   WriteInt Fileout,Erfahrung_Max
   WriteInt Fileout,Spieler_Level
   WriteInt Fileout,Energie
   WriteInt Fileout,Energie_Max
   
   CloseFile Fileout
   
   ;Karte Speichern
   Karte$ = WriteFile("Data/maps/map"+Map_Level+".map")
   
   For MapX = 0 To 20
      For MapY = 0 To 20
         WriteInt(Karte$,map(MapX,MapY))
      Next
   Next
   
   CloseFile(Karte$)
   
   ;Tiere Speichern
   Tieresave = WriteFile ("Data/Save/Tiere.dat")
   
   For Huhn.Huhntype = Each Huhntype
      WriteInt Tieresave,Huhn\X
      WriteInt Tieresave,Huhn\Y
      WriteInt Tieresave,Huhn\Erfahrung#
      WriteInt Tieresave,Huhn\Erfahrung_Max#
      WriteInt Tieresave,Huhn\Timer
      WriteInt Tieresave,Huhn\Einkommen
      WriteInt Tieresave,Huhn\Anzeige_Farbe
   Next
      
   CloseFile Tieresave
End Function

Function Laden_Function()
   ;Daten Laden
   Filein = ReadFile ("Data/Save/Spielerdaten.dat")
   
   Move = ReadInt (Filein)
   SpielerX = ReadInt (Filein)
   SpielerY = ReadInt (Filein)
   SpielerX_Draw = ReadInt (Filein)
   SpielerY_Draw = ReadInt (Filein)
   ScrollX = ReadInt (Filein)
   ScrollY = ReadInt (Filein)
   Gold = ReadInt (Filein)
   Erfahrung = ReadInt (Filein)
   Erfahrung_Max = ReadInt (Filein)
   Spieler_Level = ReadInt (Filein)
   Energie = ReadInt (Filein)
   Energie_Max = ReadInt (Filein)
   
   CloseFile Filein
   
   ;Tiere Laden
   Tiereload = ReadFile ("Data/Save/Tiere.dat")
   
   For Huhn.Huhntype = Each Huhntype
      Huhn\X = ReadInt (Tiereload)
      Huhn\Y = ReadInt (Tiereload)
      Huhn\Erfahrung# = ReadInt (Tiereload)
      Huhn\Erfahrung_Max# = ReadInt (Tiereload)
      Huhn\Timer = ReadInt (Tiereload)
      Huhn\Einkommen = ReadInt (Tiereload)
      Huhn\Anzeige_Farbe = ReadInt (Tiereload)
   Next
   
   CloseFile Tiereload
End Function

Xeres

Moderator

BeitragSo, Feb 06, 2011 22:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Karte$ = WriteFile
WriteFile gibt einen Int-handle zurück - besser man benutzt auch eins.
Code: [AUSKLAPPEN]
WriteInt Tieresave,Huhn\Erfahrung#
Float Variablen würde ich mit WriteFloat speichern (und laden).

In der Laderoutine macht eine For...each Schleife keinen Sinn, da ja keine Objekte existieren... du musst sie schon mit NEW erstellen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

BladeRunner

Moderator

BeitragSo, Feb 06, 2011 22:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Du speicherst (und lädst...) Floats mit WriteINT, das kann schonmal nicht gehen.
Deine Ladefunktion kann nicht wissen wieviele Hühner kommen, da Du diese Information nicht speicherst, und stattdessen versuchst nicht vorhandene Hühner durchzuiterieren und mit geladenen Werten zu befüllen.

Du solltest vielleicht etwas genauer lesen was Dir schon geschrieben wurde, denn Dir wurde schon geraten die Anzahl an Instanzen zu speichern und dann sooft einzuladen bis alle Instanzen erfasst wurden.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Raiden93

BeitragSo, Feb 06, 2011 23:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hoffe ich habe es halbwegs passend umgesetzt doch leider Funktioniert es nicht.
Code: [AUSKLAPPEN]
Function Speichern_Function()
   
   ;Daten Speichern
   Fileout = WriteFile ("Data/Save/Spielerdaten.dat")
   
   WriteInt Fileout,Huhn_Anzahl
   WriteInt Fileout,Move
   WriteInt Fileout,SpielerX
   WriteInt Fileout,SpielerY
   WriteInt Fileout,SpielerX_Draw
   WriteInt Fileout,SpielerY_Draw
   WriteInt Fileout,ScrollX
   WriteInt Fileout,ScrollY
   WriteInt Fileout,Gold
   WriteInt Fileout,Erfahrung#
   WriteInt Fileout,Erfahrung_Max#
   WriteInt Fileout,Spieler_Level
   WriteInt Fileout,Energie
   WriteInt Fileout,Energie_Max
   
   CloseFile Fileout
   
   ;Karte Speichern
   Karte$ = WriteFile("Data/maps/map"+Map_Level+".map")
   
   For MapX = 0 To 20
      For MapY = 0 To 20
         WriteInt(Karte$,map(MapX,MapY))
      Next
   Next
   
   CloseFile(Karte$)
   
   ;Tiere Speichern
   
   Tieresave = WriteFile ("Data/Save/Tiere.dat")
   
   For Huhn.Huhntype = Each Huhntype
      WriteInt Tieresave,Huhn\X
      WriteInt Tieresave,Huhn\Y
      WriteFloat Tieresave,Huhn\Erfahrung#
      WriteFloat Tieresave,Huhn\Erfahrung_Max#
      WriteInt Tieresave,Huhn\Timer
      WriteInt Tieresave,Huhn\Einkommen
      WriteInt Tieresave,Huhn\Anzeige_Farbe
   Next
      
   CloseFile Tieresave
End Function

Function Laden_Function()
   ;Daten Laden
   Filein = ReadFile ("Data/Save/Spielerdaten.dat")
   
   Huhn_Anzahl = ReadInt (Filein)
   Move = ReadInt (Filein)
   SpielerX = ReadInt (Filein)
   SpielerY = ReadInt (Filein)
   SpielerX_Draw = ReadInt (Filein)
   SpielerY_Draw = ReadInt (Filein)
   ScrollX = ReadInt (Filein)
   ScrollY = ReadInt (Filein)
   Gold = ReadInt (Filein)
   Erfahrung# = ReadFloat (Filein)
   Erfahrung_Max# = ReadFloat (Filein)
   Spieler_Level = ReadInt (Filein)
   Energie = ReadInt (Filein)
   Energie_Max = ReadInt (Filein)
   
   CloseFile Filein
   
   ;Tiere Laden
   Tiereload = ReadFile ("Data/Save/Tiere.dat")
   
   For i=1 To Huhn_Anzahl
      Huhn.Huhntype = New Huhntype
      Huhn\X = ReadInt (Tiereload)
      Huhn\Y = ReadInt (Tiereload)
      Huhn\Erfahrung# = ReadInt (Tiereload)
      Huhn\Erfahrung_Max# = ReadInt (Tiereload)
      Huhn\Timer = ReadInt (Tiereload)
      Huhn\Einkommen = ReadInt (Tiereload)
      Huhn\Anzeige_Farbe = ReadInt (Tiereload)
   Next
   
   CloseFile Tiereload
End Function

Xeres

Moderator

BeitragSo, Feb 06, 2011 23:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Raiden93 hat Folgendes geschrieben:
doch leider Funktioniert es nicht
Tja, schade...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Raiden93

BeitragSo, Feb 06, 2011 23:34
Antworten mit Zitat
Benutzer-Profile anzeigen
was sollte jetzt der Kommentar?

das wurgel

BeitragSo, Feb 06, 2011 23:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Code: [AUSKLAPPEN]
WriteInt Fileout,Erfahrung#
   WriteInt Fileout,Erfahrung_Max#

Du hast vergessen es in WriteFloat umzuändern. Wenn du einen mit WriteInt geschriebenen Wert mit ReadFloat ausließt kommt nur Müll raus, umgekehrt das gleiche.

Bei den Hühnern ist das gleiche Problem, nur umgekehrt.

Wie genau funktioniert es denn nicht? Hast du Mal geguckt ob der Wert in Huhn_Anzahl stimmt?
1 ist ungefähr 3

Raiden93

BeitragSo, Feb 06, 2011 23:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ahh jetzt habe ich es auch gesehen Very Happy habe was vertauscht ^^ danke

Xeres

Moderator

BeitragSo, Feb 06, 2011 23:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Raiden93 hat Folgendes geschrieben:
was sollte jetzt der Kommentar?
Es sollte sich mal langsam rumgesprochen haben, das "funzt nicht" und alle Variationen desselben keinem hier eine Hilfe bieten.
Fehlermeldungen, Beschreibungen von ist und soll Zustand - bitte. Ansonsten bleibt kaum mehr als Schulterzucken.
War aber nicht persönlich gemeint, sorry.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

MisterMaboo

BeitragMo, Feb 07, 2011 8:09
Antworten mit Zitat
Benutzer-Profile anzeigen
ich weiß ja nicht, was du mit deinen hühnern vorhast, aber wenn ihre anzahl variabel ist, solltest du auf jeden fall noch die anzahl abspeichern, bzw. laden und anhand dieser anzahl ebenso viele hühner erstellen, wie du vorher hattest.
Man is the information he carries

Raiden93

BeitragMo, Feb 07, 2011 11:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Speichern und Laden ist scheinbar jetzt gemeistert, ein großen dank an euch Smile

Jetzt habe ich nur noch ein kleines Problem, ich würde gerne wissen warum meine Ganzen Hühnertypes gelöscht werden und nicht nur das was ich möchte?
Code: [AUSKLAPPEN]
   ;Verkaufen
   If map(SpielerX-1,SpielerY) = 3
      If KeyHit(29) And Energie > 0
         For Huhn.Huhntype = Each Huhntype
            If Huhn\Erfahrung => Huhn\Erfahrung_Max
               map(SpielerX-1,SpielerY) = 1
               Gold = Gold +Huhn\Einkommen
               Delete Huhn.Huhntype
               PlaySound (sfx_Sell)
            End If
         Next
      End If
   End If


EDIT:
Es scheint so als ob der Type nicht wirklich weis zu welchem Huhn er gehört.
Verkaufe ich den 2 Plazierten Huhn verschwindet der Type vom 1 Huhn.
Jemand eine Idee wie mann das lösen könnte?

Meine Funktion für das Hühnergespawne sieht wie folgt aus:
Code: [AUSKLAPPEN]
;Huhn System
   Select Build_Select
       Case 1
           If KeyHit(20)
            If Move = 3
               If map(SpielerX-1,SpielerY) = 1
                  map(SpielerX-1,SpielerY) = 3
                  Huhn.Huhntype = New Huhntype
                  Huhn\X = SpielerX-1
                  Huhn\Y = SpielerY
                  Huhn\Erfahrung = 1
                  Huhn\Anzeige_Farbe = 1
                  Huhn\Erfahrung_Max = 100
                  Huhn\Einkommen = Rand (1,5)
                  Huhn_Anzahl = Huhn_Anzahl +1
               End If
               
            Else If Move = 4
               If map(SpielerX+1,SpielerY) = 1
                  map(SpielerX+1,SpielerY) = 3
                  Huhn.Huhntype = New Huhntype
                  Huhn\X = SpielerX+1
                  Huhn\Y = SpielerY
                  Huhn\Erfahrung = 1
                  Huhn\Anzeige_Farbe = 1
                  Huhn\Erfahrung_Max = 100
                  Huhn\Einkommen = Rand (1,5)
                  Huhn_Anzahl = Huhn_Anzahl +1
               End If
            Else If Move = 2
               If map(SpielerX,SpielerY-1) = 1
                  map(SpielerX,SpielerY-1) = 3
                  Huhn.Huhntype = New Huhntype
                  Huhn\X = SpielerX
                  Huhn\Y = SpielerY-1
                  Huhn\Erfahrung = 1
                  Huhn\Anzeige_Farbe = 1
                  Huhn\Erfahrung_Max = 100
                  Huhn\Einkommen = Rand (1,5)
                  Huhn_Anzahl = Huhn_Anzahl +1
               End If
            Else If Move = 1
               If map(SpielerX,SpielerY+1) = 1
                  map(SpielerX,SpielerY+1) = 3
                  Huhn.Huhntype = New Huhntype
                  Huhn\X = SpielerX
                  Huhn\Y = SpielerY+1
                  Huhn\Erfahrung = 1
                  Huhn\Anzeige_Farbe = 1
                  Huhn\Erfahrung_Max = 100
                  Huhn\Einkommen = Rand (1,5)
                  Huhn_Anzahl = Huhn_Anzahl +1
               End If
            End If
         End If   
    End Select


PS:Das Move steht für die Richtung meines Charakters in der es steht.

ToeB

BeitragMo, Feb 07, 2011 12:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal so ein Tipp am Rande : Speicher doch alle Tierarten in einen Type ab, das erspart ziemlich viel Arbeit..
Code: [AUSKLAPPEN]
Type Tier
   Field Art
   Field X, Y, Erfahrung
End Type


Dann hast du nicht einen Hühner, Schweine oder Rind Types sondern einen Tier Type wo alle Tiere drin sind.

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Raiden93

BeitragMo, Feb 07, 2011 13:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja nur mein Problem ist das wenn ich mein Huhn Verkaufe sobald es Ausgewachsen ist, den Falschen Type des Huhnes Löscht.Ich habe euch mal eine Test Version gemacht damit ihr seht wie ich das meine
.

http://raiden-net.de/Downloads...20Rev9.rar

Steuerung:
Der Spieler ist über die Pfeiltasten Steuerbar.
Mit der Leertaste könnt ihr Bäume Fällen die alle 120 Sekunden Random Spawnen.
Habt ihr ein Baum gefällt könnt ihr euch die Ressorcen mit i angucken.
Da die Hühner in der Test Phase sind habe ich sie auf die Taste "T" gelegt.Kosten der Hühner(2G)
Die Hühner könnt ihr ab 101% Verkaufen, dies geschieht mit der Taste STRG.

;Das Problem
Spawnt euch mit "T" 2 Hühner und achtet darauf welches ihr als erstes gespawnt habt.
Danach Schließt ihr das Spiel und Startet es neu.
Jetzt wartet ihr bis das Huhn auf 101% ausgewachsen ist und Verkauft das 2 Huhn mit der taste STRG als erstes.
Ihr solltet nun sehen das das Overlay was ich zu Testzwecken gemacht habe nicht zu dem Richtigem Huhn gehört.


;ACHTUNG:
Die Hühner sind derzeit nur von Rechts Verkaufbar also Stellt euch Rechts neben die Hühner guckt sie dabei auch an und drückt STRG

Xeres

Moderator

BeitragMo, Feb 07, 2011 13:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu A) 2. Platziert - zweit meiste Erfahrung? Du verkaufst alle Hühner, für die gilt "Huhn\Erfahrung => Huhn\Erfahrung_Max". Entweder du willst aus allen Hühnern eines mit der höchsten Erfahrung verkaufen, dann musst du das mit einer Variable messen und die Instanz speichern - oder du willst bloss ein Huhn verkaufen dann hilft schon ein Exit um nach dem ersten gefundenen Huhn auf zu hören.

Und B) Du hast 4x praktisch den gleichen Codeblock, der sich nur durch eine Variable ändert. Da kannst du die Move Abfrage rein ziehen oder noch besser: eine Funktion Huhn_Spawn(x,y, usw.) schreiben.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Raiden93

BeitragMo, Feb 07, 2011 13:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja das mit dem Exit habe ich noch später dazu gepackt.
Den Test den ich Hochgeladen habe läuft auch mit dem Exit aber Trotzdem wird anscheinend der Falsche Huhn Type gelöscht weil die Anzeige unter meinem Huhn nicht verschwindet sondern bei einem anderen Huhn.Das Gleiche Problem habe ich bei meinen vorherigen Spielen auch immer gehabt aber noch keine Lösung gefunden :/

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group