Score Array in preferences speichern und abrufen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Score Array in preferences speichern und abrufen

Beitrag von NeoRon »

Hallo,

Ich versuche nen Highscore den ich als Array mit drei Felder definiert habe über
Preferences abzuspeichern sowie ihn auch wieder aufzurufen.

Aber er Speichert immer nur ein Feld "HighScore(2)" ab und zeigt es nicht mal an.
Denke er überschreibt die vorherigen 2 Felder, richtig?

Aber warum zeigt er mir nicht wenigstens den "HighScore(2))" an sondern den vorgegebenen Wert 5000 bei allen drei Felder?

Was kann ich machen?

Hier der Code

Code: Alles auswählen

 Global Dim High_Score.i(2) 
      
      High_Score(0) = Player\PLAYER_SCORE
      High_Score(1) = Player\PLAYER_SCORE
      High_Score(2) = Player\PLAYER_SCORE
      
      OpenPreferences("Variablen.save")
      High_Score(0) = ReadPreferenceLong(Str(Player\PLAYER_SCORE), 25000)
      High_Score(1) = ReadPreferenceLong(Str(Player\PLAYER_SCORE), 10000)
      High_Score(2) = ReadPreferenceLong(Str(Player\PLAYER_SCORE), 5000)
      ClosePreferences()

      DisplayTransparentSprite(#Sprite_gameover, 0, 0) 

      player\PLAYER_SCORE = player\POINTS

      StartDrawing(ScreenOutput())                            ;box
      DrawText(500, 500, "Punkte: "+ player\POINTS)
      DrawText(500, 540, "Kills: "+ player\KILLS)
      DrawText(500, 580, "HighScore: ")
      DrawText(500, 620, "     "+ High_Score(0))
      DrawText(500, 660, "     "+ High_Score(1))
      DrawText(500, 700, "     "+ High_Score(2))
      StopDrawing()
      
      If CreatePreferences("Variablen.save")
        If High_Score(0) > 2500
          WritePreferenceLong(Str(Player\PLAYER_SCORE), High_Score(0))
        EndIf
        If High_Score(1) > 1000
          WritePreferenceLong(Str(Player\PLAYER_SCORE), High_Score(1))
        EndIf
        If High_Score(2) > 500
          WritePreferenceLong(Str(Player\PLAYER_SCORE), High_Score(2))
        EndIf
        ClosePreferences()
      EndIf
Grüße
NeoRon
The World is Cyber
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Score Array in preferences speichern und abrufen

Beitrag von STARGÅTE »

Wie ich das sehen, hast du einen kompletten Denkfehler, in dem was du vorhast.
Da ich aber nicht weiß was du überhaupt machen willst, hier nur ein paar Hinweise:
NeoRon hat geschrieben:Denke er überschreibt die vorherigen 2 Felder, richtig?
JA, denn du erstellst jedesmal das Feld "Str(Player\PLAYER_SCORE)".
Sobald High_Score(2) > 500 ist, überschreibst du dieses Feld.
In der Preference sieht es dann zB so aus: 5000 = 5000
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Re: Score Array in preferences speichern und abrufen

Beitrag von NeoRon »

Also, ich will das er den Highscore wenn Score >5000 in Array Highscore(2) speichert.
Highscore wenn Score > 10000 in Array Highscore(1) Feld speichert und das das (0) Feld ebenso
ab ner gewissen Punktzahl speichert. Bei einem 0 Wert soll die angegebene Default Zahl Angegeben werden
wie z.B. bei Highscore(2) = 5000 Punkte und halt erst wenn die geschlagen wurde soll er sie mit dem Player highscore ersetzen.
The World is Cyber
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Score Array in preferences speichern und abrufen

Beitrag von STARGÅTE »

Verstehe was du meinst aber in deiner Preferenzdatei wird doch immer nur ein einziger Key erzeugt, welcher dauert überschreiben wird.
Ich würde es aber anders aufbauen:

Vorab erstellst du eine (von mir aus) Preferenzdatei:

Code: Alles auswählen

[Highscore]
Points0 = 25000
Name0 = Default Player
Points1 = 10000
Name1 = Default Player
Points2 = 5000
Name2 = Default Player
...
oder

Code: Alles auswählen

[Highscore]
Item0 = 25000, Default Player
Item1 = 10000, Default Player
Item2 = 5000, Default Player
...
Diese kannst du mit

Code: Alles auswählen

PreferenceGroup("Highscore")
If ExaminePreferenceKeys()
   While NextPreferenceKey()
;...
Auslesen und nacheinander mit AddElement() in einer strukturierten (mit Punkte und Name) List speichern.

Wenn nun im Spiel eine neue Punktzahl erreicht wurde, fügst du sie einfach mit AddElement() ebenfalls hinzu, und sortierst die Liste dann nach Punkten (SortStructuredList)
Danach kannst du diese Liste anzeigen, und auch in einer Preferenzdatei wieder speichern:

Code: Alles auswählen

ForEach Items()
WritePreferenceString("Item"+ListIndex(Items()), Str(Items()\Points)+", "+Items()\Name)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NeoRon
Beiträge: 67
Registriert: 22.03.2013 18:56

Re: Score Array in preferences speichern und abrufen

Beitrag von NeoRon »

Vielen Dank Stargate :)

Grüße

NeoRon
The World is Cyber
Antworten