Problem mit Highscore-Streams

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Sirthaw

Betreff: Problem mit Highscore-Streams

BeitragMi, Sep 25, 2013 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Abend!
Ich habe folgendes Problem:
Ich bastel gerade an einem Highscore für meinen Shooter
(erstmal bestehend aus 3 Rängen).
Bei den ersten beiden Rängen funktioniert das auch, ich teste ob die
erreichte Punktzahl höher ist als der gespeicherte Highscore und
schreibe dann alles in eine neue Datei:
Code: [AUSKLAPPEN]

If FileType("highscore.dat") = 1 Then

 read_highscore = ReadFile("highscore.dat")
 
  highscore_wert_1=ReadInt(read_highscore)
  highscore_wert_2=ReadInt(read_highscore)
  highscore_wert_3=ReadInt(read_highscore)
 
 SeekFile(read_highscore,0)
 If highscore_wert_1 < punkte Then
   highscore_rekord = WriteFile("highscore.dat")
   SeekFile(highscore_rekord,0)
   WriteInt(highscore_rekord,punkte)
   CloseFile highscore_rekord
 EndIf


If highscore_wert_2 < punkte And highscore_wert_1 > punkte Then

 highscore_rekord = WriteFile("highscore.dat")
 SeekFile(highscore_rekord,0)
 WriteInt(highscore_rekord,highscore_wert_1)
 SeekFile(highscore_rekord,4)
 WriteInt(highscore_rekord,punkte)
 CloseFile highscore_rekord 

 EndIf
 CloseFile(read_highscore)


Funktioniert wunderbar, aber wenn ich jetzt noch den dritten Rang
hinzufügen will, überschreibt mir das Programm trotzdem den
ersten und zweiten Rang und nicht den dritten:
Code: [AUSKLAPPEN]

If highscore_wert_3 < punkte And highscore_wert_2 > punkte Then

 highscore_rekord = OpenFile("highscore.dat")
 SeekFile(highscore_rekord,0)
 WriteInt(highscore_rekord,highscore_wert_1)
 SeekFile(highscore_rekord,4)
 WriteInt(highscore_rekord,highscore_wert_2)
 SeekFile(highscore_rekord,12)
 WriteInt(highscore_rekord,punkte)
 CloseFile highscore_rekord 

 EndIf

Wieso gibt es hierbei Probleme?
Ich hoffe, dass ihr mir helfen könnt.

Mit freundlichen Grüßen
Sirthaw

Midimaster

BeitragMi, Sep 25, 2013 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würde es viel unkomplizierter machen:

1.
Ganz Datei auf einmal in die Variablen einlesen

2.
Werte vergleichen und Variablen ändern

3.
Alle Variablen zurückschreiben


BlitzBasic: [AUSKLAPPEN]
Anzahl%=7

Dim HighScore%(9)
SeedRnd MilliSecs()
Punkte%=Rand(10,90)

Print "Punkte neu = " + Punkte

;falls vorhanden alle einlesen
If FileType("highscore.dat")
Stream = ReadFile("highscore.dat")

For i%=1 To Anzahl%
HighScore(i)=ReadInt(Stream)
Next
CloseFile Stream
EndIf


;stelle finden wo Punkte reingehört
For da%=1 To Anzahl%
If Punkte > HighScore(da) Exit
Next


;alle nachfolgenden Werte eine Position nach hinten verschieben
For j%=Anzahl To da+1 Step -1
HighScore(j) = HighScore(j-1)
Next

; neue punktzahl an der Stelle eintragen:
Highscore(da) = Punkte


; alle Werte zurückschreiben
Stream= WriteFile("highscore.dat")
For i%=1 To Anzahl%
WriteInt Stream, HighScore(i)
Next
CloseFile Stream


; Ausgabe der Daten:

For i%=1 To Anzahl
Print i + ".Wert=" + HighScore(i)
Next
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

Sirthaw

BeitragDo, Sep 26, 2013 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die alternative Lösung,
aber kann mir jemand erklären, was an meinem
Code falsch ist?

Holzchopf

Meisterpacker

BeitragDo, Sep 26, 2013 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Wahrscheinlich liegt es an Code: [AUSKLAPPEN]
SeekFile(highscore_rekord,12)
genauer gesagt am Offset von 12. Die Datei ist einfach in dem Moment noch nicht so gross. Kann man beim Schreiben überhaupt seeken? Selbst wenn, wäre 12 die falsche Position. Erster int bei 0, zweiter bei 4, dritter bei 8.

mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

Sirthaw

BeitragDo, Sep 26, 2013 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, daran liegt es!
Die Datei war nicht groß genug.
Vielen Dank, Holzchopf!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group