fb:porticula NoPaste
7. Highscore
Uploader: | nemored |
Datum/Zeit: | 20.10.2011 22:35:12 |
Hinweis: Dieser Quelltext ist Bestandteil des Projekts OpenBook: 2D-Spieleprogrammierung, zu dem es auf FreeBASIC-Portal.de eine Projektseite gibt.
' *** CODE 7: Highscore
TYPE highscore
AS INTEGER punkte
AS STRING spieler
END TYPE
DIM AS highscore highTab(9)
SUB highscoreLesen(highTab() AS highscore)
DIM zeile AS STRING, such AS INTEGER, dateinr AS INTEGER = FREEFILE
IF OPEN ("highscore.txt" FOR INPUT AS #dateinr) = 0 THEN
' erfolgreich geoeffnet - Daten koennen eingelesen werden
FOR i AS INTEGER = 0 TO UBOUND(highTab)
LINE INPUT #dateinr, zeile
highTab(i).punkte = VALINT(zeile) ' Punktzahl einlesen
such = INSTR(zeile, " ") ' erstes Leerzeichen suchen
highTab(i).spieler = MID(zeile, such+1) ' Name hinter dem Leerzeichen
NEXT
CLOSE #dateinr
END IF
END SUB
SUB highscoreSchreiben(highTab() AS highscore)
DIM zeile AS STRING, dateinr AS INTEGER = FREEFILE
IF OPEN ("highscore.txt" FOR OUTPUT AS #dateinr) = 0 THEN
' erfolgreich geoeffnet - Daten koennen geschrieben werden
FOR i AS INTEGER = 0 TO UBOUND(highTab)
' Datenzeile schreiben
PRINT #dateinr, highTab(i).punkte & " " & highTab(i).spieler
NEXT
CLOSE #dateinr
END IF
END SUB
highscoreLesen(highTab())
' Spielablauf - neuen Spielstand ermitteln
DIM neuePunktzahl AS INTEGER = 745, neuerSpielername AS STRING = "neu"
' neuen Spielstand einreihen
DIM AS INTEGER ub = UBOUND(highTab)
IF highTab(ub).punkte < neuePunktzahl THEN ' neuer Eintrag erforderlich
FOR i AS INTEGER = ub-1 TO 0 STEP -1
IF highTab(i).punkte < neuePunktzahl THEN
highTab(i+1) = highTab(i) ' Eintrag nach unten schieben
ELSE
highTab(i+1).punkte = neuePunktzahl ' neuen Eintrag schreiben
highTab(i+1).spieler = neuerSpielername
EXIT FOR
END IF
NEXT
END IF
highscoreSchreiben(highTab())