Highscoreliste

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Travis

Betreff: Highscoreliste

BeitragFr, Jan 16, 2004 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Vor zwei Tagen hat René Meyer hier im Forum ein äußerst nützliches Sortierprogramm für Zahlenwerte gepostet. Ich war mal so frei und habe daraus eine Highscoreliste mit Speicher- und Ladefunktion entwickelt.

Die Liste besteht aus dem Spielernamen, dem Rang und den Punkten. Anfangs wird eine zufällige Liste erstellt, diese wird dann sortiert, gespeichert, wieder geladen und angezeigt.

Vielleicht hilft es ja Jemanden weiter, der noch nie eine Highscoreliste gemacht hat. Sowas kann man ja immer mal gebrauchen. Very Happy


Code: [AUSKLAPPEN]

; Highscorelisten Creator
; Erzeugt und sortiert Highscorelisten
; Copyright (C) Jan 2004, Daniel Nobis

Graphics 640,480,16,2
AppTitle "Highscore"

SeedRnd MilliSecs()

Dim Score(10)
Dim Name$(10)


; --- Liste mit Zufallswerten erstellen
Print "Unsortierte Liste:"
For i = 1 To 10
 Score(i) = Rnd(0,100): Name$(i) = "Spieler " + i
 Print i + "." + Name$(i) + "  " + Score(i)
Next

WaitKey



; --- Liste sortieren
For I = 1 To 10
 For J = I To 10
  If Score(I) < Score(J) Then ; "<" = größter zuerst / ">" = kleinster zuerst
  X = Score(I) : Score(I) = Score(J) : Score(J) = X
  xx$ = Name$(i) : Name$(i) = Name$(j): Name$(j) = xx$
  EndIf
 Next
Next




; --- Liste speichern
Datei = WriteFile("Highscore.dat")

For i = 1 To 10
 WriteLine Datei, Name$(i)
 WriteLine Datei, Score(i)
Next

CloseFile Datei



; --- Liste laden + anzeigen
Datei = ReadFile("Highscore.dat")

Print
Print "Sortierte Liste:"

For i = 1 To 10
 Name$(i) = ReadLine(Datei)
 Score(i) = ReadLine(Datei)
Print i + "." + Name$(i) + "  " + Score(i)
Next

CloseFile Datei

WaitKey
End
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

Desantes

BeitragSa, Feb 14, 2004 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann mir jemand verraten wie ich diese überaus nützliche Liste an eine andere Stelle auf dem Bildschirm bekomme?
Hab es schon mit Locate verssucht allerdings schreibt er mir dann logischer weise jeden Durchgang der Schleife in die selbe Zeile ,so das der Text quasi übereinander liegt und somit unlesbar wird.

Mfg

Desantes

bruZard

BeitragSa, Feb 14, 2004 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte vermeidet das unsägliche "Print" ... es ist furchtbar
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image
 

Desantes

BeitragSa, Feb 14, 2004 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
ICh hab ja auch nix von Print gesagt, oder?

Travis

BeitragSa, Feb 14, 2004 23:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe die Liste bei mir folgendermaßen integriert:

Code: [AUSKLAPPEN]

; --- Funktion Highscore anzeigen ---
Function ViewHighScore()

; Liste anzeigen
SB = LoadImage("Menu\ScoreBack.png"); Rahmen zeichnen
MaskImage SB, 255,255,255
DrawImage SB, 340,235

SetFont font1
Color 200,200,0
Text 460, 275, "HIGHSCORE"

Color 200,200,200
For i = 1 To 10
 If i < 10 Then Text 390,(i*16)+300, i + ".)"    ; Rang anzeigen
 If i = 10 Then Text 380,(i*16)+300, i + ".)"    ; Rang anzeigen
 Text 430,(i*16)+300, Name$(i)    ; Namen anzeigen
 Text 640,(i*16)+300, Score(i)    ; Punkte anzeigen
Next
Flip

End Function


Natürlich kann man es so nicht in die Hauptschleife packen, da hier jedesmal das Bild geladen wird, daß müßte man dann noch anpassen.

Bas Bild ScoreBack.bmp ist der Hintergrund, auf dem der Text ausgegeben wird. Es kann natürlich weggelassen werden, sieht aber schöner aus Wink
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Feb 15, 2004 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Travis
das ist noch keine richtige higscoreliste,
sondern nur ein Sotierprogramm,
wie bekommt man den jetzt die neuen werte darein
um die highscore neu zu sortieren?
Question
[BB2D | BB3D | BB+]

Travis

BeitragSo, Feb 15, 2004 16:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, ist doch ganz einfach. So wie die Liste jetzt da steht enthält sie zehn Namen mit dazugehörigen Punkten. Wenn wir jetzt einen neuen Namen einfügen wollen, müssen wir die Liste erstmal auf 11 Einträge erweitern:

BlitzBasic: [AUSKLAPPEN]

Dim Name$(11)
Dim Score(11)


Danach laden wir die vorhandene Liste:
BlitzBasic: [AUSKLAPPEN]

Datei = ReadFile(\"Levels\\" + Verz$ + \"\Highscore.dat\")

If Not Datei = 0 Then ; Liste einlesen (falls vorhanden)
For i = 1 To 10
Name$(i) = ReadLine(Datei)
Score(i) = ReadLine(Datei)
Next
CloseFile Datei ; Datei schließen

EndIf


Wenn keine Liste vorhanden ist, muß eben eine Blancoliste erstellt werden. Hier werden nur die ersten 10 Einträge geladen, weil wir den 11. ja sowieso nicht anzeigen wollen und außerdem gleich überschreiben.

Hat jetzt ein Spieler einen höheren Punktestand erreicht, als der niedrigste Punktestand in der Liste [Score(10)], dann kommt folgende Eingabe zum Einsatz:

BlitzBasic: [AUSKLAPPEN]

If Punkte > Score(10) Then ; Wenn neuer Highscore erreicht
Score(11) = Punkte
Locate 380,520
Eingabe$ = Input(\"Wie lautet ihr Name? \")
Name$(11) = LSet(Eingabe$,15) ; maximal 15 Zeichen erlaubt
EndIf


Hier wird jetzt der letzte (unsichtbare) Eintrag ausgefüllt, der bisher noch leer war.

Anschließend sortieren wir die gesamte Liste mit allen 11 Einträgen:

BlitzBasic: [AUSKLAPPEN]

; --- Liste sortieren
For I = 1 To 11
For J = I To 11
If Score(I) < Score(J) Then ; \"<\" = größter zuerst
MerkerA = Score(I) : Score(I) = Score(J) : Score(J) = MerkerA
MerkerB$ = Name$(I) : Name$(I) = Name$(J) : Name$(J) = MerkerB$
EndIf
Next
Next


Jetzt ist der neue Punktestand irgendwo in der Liste und der ehemals niedrigste Punktestand ist jetzt auf Platz 11. Diesen Platz stellen wir aber später nicht da, weil wir ja nur 10 Einträge haben wollen.

Im Prinzip kann man die Liste auch hunderte von Einträgen lang machen. Der neue Punktestand muß nur immer hinter dem letzten Eintrag eingefügt werden. Dieser Platz muß freigehalten werden. Wenn wir also eine Liste mit 50 Pläzten haben müssen wir 51 reservieren [DIM Score(51)]. Wink
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group