Highscore Liste

Anfängerfragen zum Programmieren mit PureBasic.
obar
Beiträge: 111
Registriert: 22.11.2007 19:47

Highscore Liste

Beitrag von obar »

Schreibe gerade eine HighscoreListe. Wenn Liste nicht vorhanden ist werden Standard Werte eingefüllt.

Code: Alles auswählen

If OpenFile(0, "Highscore.txt")    
  If Eof(0) <> 0
    For i = 1 To 10
      AddElement(highscore())
      highscore()\name.s = "Shooter"
      highscore()\points = t
      t- 1000
    Next
  EndIf
  While Eof(0) = 0 
    AddElement(highscore())
    highscore()\name.s = ReadString(0)
    highscore()\points = Val(ReadString(0)) 
  Wend
EndIf
Ausgegeben wird die Liste mit

Code: Alles auswählen

ForEach(highscore())
    DrawingText(x2,y1,1,100,100,100,hfont,highscore()\name.s)
    DrawingText(x1,y1,1,100,100,100,hfont,Str(highscore()\points))
    y1 + 30
  Next
Vor der Ausgabe wird die Liste noch sortiert.

Ausgabe sieht dann so aus.

10000 Shooter
9000 Shooter
8000 Shooter
usw.


1. Kann mir jemand sagen wie man die OpenFile Geschichte besser schreiben kann?

2. Kann mir jemand zeigen wie ich den Score rechtsbündig kriege, oder vielleicht vorne mit Nullen auffüllen könnte?
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

ich kann dir nur empfehlen ganze Pfade zu benutzen, mit den relativen hatte ich oft Probleme, nur so als Tip

Code: Alles auswählen

Procedure.s FilesystemExePath()
  
  Protected sPath.s = Space(1000) 
  GetModuleFileName_(0, @sPath, 1000) 
  sPath = GetPathPart(sPath)
  ProcedureReturn sPath
  
EndProcedure 
zum Nullen auffüllen etc:
Ergebnis$ = LSet(String$, Laenge [, Zeichen$]) <- Links
Ergebnis$ = RSet(String$, Laenge [, Zeichen$]) <- Rechts

zB.:

Code: Alles auswählen

gna.s = "test"
gna = RSet(gna,10,"-")
Ergebnis: "------test"
obar
Beiträge: 111
Registriert: 22.11.2007 19:47

Beitrag von obar »

Danke für die Tipps.
Die Procedure muss ich noch genauer anschauen.
RSET läuft einwandfrei.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> ich kann dir nur empfehlen ganze Pfade zu benutzen, mit den relativen hatte ich oft Probleme, nur so als Tip

nur um mißverständnisse zu vermeiden:
die methode wie gezeigt mit dem ermitteln des EXE-Pfades ist gut.

absolute Pfade zu verwenden ist jedoch ein Sakrileg.
also niemals sowas wie "C:\Programme\PureBasic\Projekte\Data"
in deinen Code schreiben.

nur als ergänzende anmerkung, damit man nicht "ganze Pfade" mit "absoluten Pfaden" verwechselt... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
obar
Beiträge: 111
Registriert: 22.11.2007 19:47

Beitrag von obar »

Ich habe diese Procedure noch nicht begriffen. Bzw. weiss ich nicht wie ich diese benutzen kann oder muss.

Dann hätt ich noch gerne gewusst ob der OpenFile Code so gut ist oder Verbesserungen angebracht wären.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

obar hat geschrieben:Dann hätt ich noch gerne gewusst ob der OpenFile Code so gut ist oder Verbesserungen angebracht wären.
ich persönlich würde es so machen:

* Datei nur öffnen, wenn sie wirklich vorhanden ist (kann man mit FileSize() testen)

* Datei (sofern vorhanden) mit ReadFile() öffnen und nicht mit OpenFile()

* Keine festen Dateinummern verwenden (#PB_Any statt 0)

* Datei mit CloseFile() auch wieder schließen.

Code: Alles auswählen

If FileSize("Highscore.txt") > 0 ; Datei vorhanden?
  
  FF = ReadFile(#PB_Any, "Highscore.txt")   
  If FF
    While Eof(FF) = 0
      AddElement(highscore())
      highscore()\name.s = ReadString(FF)
      highscore()\points = Val(ReadString(FF))
    Wend
    CloseFile(FF)
  EndIf
  
Else
  
  ; Datei (noch) nicht vorhanden -> Dummy-Einträge erzeugen
  
  For i = 1 To 10
    AddElement(highscore())
    highscore()\name.s = "Shooter"
    highscore()\points = t
    t- 1000
  Next
  
EndIf
Grüße ... Kiffi
a²+b²=mc²
obar
Beiträge: 111
Registriert: 22.11.2007 19:47

Beitrag von obar »

@Kiffi

Danke für die Tipps

Gruss
Antworten