Seite 1 von 1

Highscore Liste

Verfasst: 06.12.2007 08:38
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?

Verfasst: 06.12.2007 08:50
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"

Verfasst: 06.12.2007 09:15
von obar
Danke für die Tipps.
Die Procedure muss ich noch genauer anschauen.
RSET läuft einwandfrei.

Verfasst: 06.12.2007 11:16
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... ;)

Verfasst: 06.12.2007 12:06
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.

Verfasst: 06.12.2007 12:16
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

Verfasst: 06.12.2007 13:10
von obar
@Kiffi

Danke für die Tipps

Gruss