Spielstand speichern

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Rob_

Betreff: Spielstand speichern

BeitragDi, Okt 05, 2004 2:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Sad Hi mir gehts total mies!

Ich kriege es einfach nicht hin, Crying or Very sad .

Sagt mir mal wie ich eine ganz einfache spielstand speicherung mache.
Ich weiß gar nicht welchen befehl ich nehemen muss oder so.
Ich will in 3d halt eine die position und so speichern.
Muss ich writebytes oder wiritybyte oder Crying or Very sad.

Sagt mal wie ich anfangen soll.
Mfg
Rob_

Jolinah

BeitragDi, Okt 05, 2004 3:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

;Datei öffnen zum reinschreiben = WriteFile
;Falls sie schon existiert wird sie mit WriteFile überschrieben.
file_handle = WriteFile("speicherstand.sav")

;In Datei schreiben
;Je nach Datentyp den richtigen Befehl verwenden.
;Für komma Zahlen Float, für Integer Int für einzelne Bytes byte usw.
WriteFloat(file_handle,x#)
WriteFloat(file_handle,y#)
WriteFloat(file_handle,z#)
WriteString(file_handle,"Bla")

;Datei schliessen
CloseFile(file_handle)


Das auslesen ist identisch, verwende dann einfach ReadFile oder OpenFile und zum auslesen der einzelnen Werte ReadFloat(file_handle), ReadInt(file_handle) usw.

Wichtig ist beim auslesen das du in der selben reihenfolge ausliest wie du reingeschrieben hast Wink

Und schon hast du dein eigenes Dateiformat gegründet.

Rob_

BeitragDi, Okt 05, 2004 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Rolling Eyes, ok.

Also float hast du jetzt genommen weil du die position vom spieler x,y,z
gespeichert, Oo, gut!
Da kommen wir der sache schon viel näher, danke!
Und was kann ich mit WriteString speichern, und brauche ich das?
Und wofür brauche ich writebyte? Was kann ich damit speichern?
__________________________________________________________

Sagt mir wenn ich es falsch verstanden habe aber:

Wenn ich eine 3d position von meinem spieler speichern will muss ich mit "WRITEFLOAT" für jede position x,y,z speichern.

Und wenn ich (habs jetzt nicht ausprobiert) einen Highscore speichern will.
Dann hae ich ja eine Var, die heist "score" und wenn ich die speichern will
dann muss ich glaube ich:

Code: [AUSKLAPPEN]
score_save=writefile
writeint(score_save,score)
closefile(score_save)


Das so machen? Confused
Wenn ja dann glaube ich hab ichs etwas begriffen und kann mich endlich mit der OnlineHilfe auseinandersetzten(die ich nicht so verstanden habe).

Könnt ihr nicht mal aufschreiben welche "write(float .ect)..." zu speichern geeignet ist?

Mfg
Rob

Rob_

BeitragDi, Okt 05, 2004 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Embarassed Sorry habs vergessen zu fragen, wenn ich jetzt also einen spielstand speichere, muss ich dann wenn ich gegner habe jeder position von den gegnern auch speichern?

Jan_

Ehemaliger Admin

BeitragDi, Okt 05, 2004 14:36
Antworten mit Zitat
Benutzer-Profile anzeigen
ambesten, du benutzt für alle Zahlen writefloat und für alle Srings writeline
between angels and insects
 

David

BeitragDi, Okt 05, 2004 14:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Nö, das is nicht die beste Lösung, Jan_.

@Rob_: Genau, du mußt für jeden Gegner die Positionen speichern, sonst stimmen die Positionen beim nächsten spielen natürlich nichtmehr...

Weist du was Datentypen sind? Denn dann klärt sich auch die Frage wozu du WriteByte, WriteString, WriteInt usw brauchst.

Wenn du z.B. sicher bist, das eine Variable nicht über einen Wert von 255 hinausgeht kannst du den Wert mit WriteByte speichern. Somit sparst du 3 Byte ein, usw...

grüße
http://bl4ckd0g.funpic.de

Jan_

Ehemaliger Admin

BeitragDi, Okt 05, 2004 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, die beste ist es nciht, aber für ihn die einfachste Smile
between angels and insects
 

David

BeitragDi, Okt 05, 2004 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Stimmt, aber Rob_ kann sich ja auch ein wenig reinhängen oder?
Dann lernt er evtl gleich noch einige wichtige Dinge dazu! Wink

grüße
http://bl4ckd0g.funpic.de

Rob_

BeitragDi, Okt 05, 2004 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi ja das ist richtig David, danke für die schnellen antworten Very Happy.
So jetzt werde ich mal etwas rumprobieren.

Und das mit dem Writebyte um etwas speicher zu sparen lass ich erstmal sonst depremirt es mich und ich es sein ^^.

Jolinah

BeitragDi, Okt 05, 2004 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Da du ne Liste wolltest:

Code: [AUSKLAPPEN]

Zahlen 0 bis 255 -> WriteByte
Allgemeine ganze Zahlen (negativ und positiv) -> WriteInt
Kommazahlen -> WriteFloat
Strings -> WriteString

Wenn du nur so Text usw. in mehreren Zeilen speichern willst,
wie eine *.Txt Datei zum Beispiel:

String mit abschliessendem Zeilenumbruch -> WriteLine

Rob_

BeitragDi, Okt 05, 2004 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi hier ich habe mal ein test gemacht aber bei readfile kommt too many parameters Sad habe ich bei read file was fasch gemacht?

Code: [AUSKLAPPEN]


Function save()

save=WriteFile("save01.sav")
WriteFloat(save,x#)
WriteFloat(save,z#)
CloseFile(save)

End Function

Function load()

load=OpenFile("save01.sav")
ReadFloat(save,x#)
ReadFloat(save,z#)
CloseFile(load)

End Function

Rob_

BeitragDi, Okt 05, 2004 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe den code jetzt etwas geändert ich habe nicht die position vom player in x,z angegeben, jetzt hab ichs gemcht aber es kommt wieder der fehler Sad .

Code: [AUSKLAPPEN]
Graphics3D 800,600,32,2
SetBuffer BackBuffer()

x=24
z=34

light=CreateLight()
RotateEntity light,0,0,0

camera=CreateCamera()
PositionEntity camera,26,10,30
TurnEntity camera,90,0,0

Global player=LoadMesh("player.b3d")
PositionEntity player,x,0,z
ScaleEntity player,0.1,0.1,0.1

plane=CreateTerrain(64)
PositionEntity plane,-15,0,-15

tex=LoadTexture("kacheln.jpg")
EntityTexture plane,tex

While Not KeyHit(1)

If KeyHit(63) Then save()
If KeyHit(64) Then load()

If KeyDown(200) Then MoveEntity player,0,0,.1
If KeyDown(208) Then MoveEntity player,0,0,-.1
If KeyDown(203) Then MoveEntity player,-.1,0,0
If KeyDown(205) Then MoveEntity player,.1,0,0

UpdateWorld
RenderWorld

Text 0,0,"PosX: "+EntityX(player)
Text 0,12,"PosX: "+EntityZ(player)

Flip
Wend
End

Function save()

save=WriteFile("save01.sav")
WriteFloat(save,x#)
WriteFloat(save,z#)
CloseFile(save)

End Function

Function load()

OpenFile("save01.sav")
ReadFloat(x#)
ReadFloat(z#)
CloseFile(SAVE)

End Function
 

David

BeitragDi, Okt 05, 2004 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Du musst bei ReadFloat als Parameter den Stream übergeben. Den Wert bekommst du als Rückgabe der Funktion!

grüße
http://bl4ckd0g.funpic.de

BladeRunner

Moderator

BeitragDi, Okt 05, 2004 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
onlineHilfe hat Folgendes geschrieben:
Wert#=READFLOAT# (Stream)

Fällt dir was auf, Rob? Die Lesebefehle haben einen Rückgabewert und einen Stream aus dem Sie lesen. Lies nochmal in der OH nach, dann wird es sicher klarer für dich Wink
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

Rob_

BeitragDi, Okt 05, 2004 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja in der OH, steht das:

Code: [AUSKLAPPEN]
Function load()

load=ReadFile("save01.sav")
wert#=ReadFloat#(load)
CloseFile(load)

End Function

(also in meinen geändert)
Aber nichts geht Sad
 

David

BeitragDi, Okt 05, 2004 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Doch, das was da steht stimmt...

Code: [AUSKLAPPEN]

Function load()

[b]load[/b]=ReadFile("save01.sav")
wert#=ReadFloat#([b]load[/b])
CloseFile(load)

End Function


grüße
http://bl4ckd0g.funpic.de

Rob_

BeitragDi, Okt 05, 2004 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, Confused naja ich werde dann mal weiter üben, vielleicht habe ich einfach das mit der x,z position falsch gemacht.

Mal sehen.
Trozdem danke für die tipps und hilfe!

Mfg
Rob_

Jolinah

BeitragDi, Okt 05, 2004 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

x# = 10.0
z# = 20.0

stream = WriteFile("bla.sav")
WriteFloat(stream,x#)  ;X reinschreiben
WriteFloat(stream,z#)  ;Z reinschreiben
CloseFile(stream)


stream = ReadFile("bla.sav")
a# = ReadFloat(stream)  ;Einen Float auslesen und in a speichern
b# = ReadFloat(stream)  ;Den nächsten Float auslesen und in b speichern
CloseFile(stream)

Print "Der Ausgelesene X Wert ist: " + a#
Print "Der Ausgelesene Z Wert ist: " + b#
WaitKey()
End


Hoffe das Hilft dir weiter.
Zum schreiben musst du den Dateistream angeben und was du schreiben willst. Zum auslesen musst du nur noch den Dateistream angeben und die Funktion liefert den ausgelesenen Wert zurück denn du dann irgend in einer Variable speichern kannst.

Rob_

BeitragDi, Okt 05, 2004 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Jolinah ich habs so gemacht wie du gesagt hast, er erstellt eine datei nur läd er die position nicht mehr Sad

Code: [AUSKLAPPEN]
If KeyHit(63) Then save()
If KeyHit(28) Then load() 

Text 0,0,"PosX: "+EntityX(player)
Text 0,12,"PosX: "+EntityZ(player)

Flip
Wend
End

Function save()

stream=WriteFile("save01.sav")
WriteFloat(stream,x#)
WriteFloat(stream,z#)
CloseFile(stream)

End Function

Function load()

stream=ReadFile("save01.sav")
x#=ReadFloat#(stream)
z#=ReadFloat#(stream)
CloseFile(stream)

End Function

Jolinah

BeitragDi, Okt 05, 2004 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Da du es in einer Funktion machst muss x# und z# als Global definiert sein. Oder du speicherst statt x und z auch wie beim Print mit Hilfe der 3d Funktionen die Position, also mit EntityX und EntityZ


Und nachdem es geladen ist muss natürlich die Player Position noch gesetzt werden:

Code: [AUSKLAPPEN]
PositionEntity player,x#,0,z#

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group