Highscore richtig sortieren[gelöst]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

mabox

Betreff: Highscore richtig sortieren[gelöst]

BeitragSa, Nov 17, 2007 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi ich will mal lernen richtig eine Highscore zu sortieren. Man hat einen Namen und eine Zahl die vom Spiel geliefert werden. Diese Namen sollen dann einsortiert werden und der Name mit den wenigsten Punkten fällt raus. Ich habe schon einen Code bei welchen aber der unterste in der Liste immer rausfliegt auch wenn der Name der neu reinkommt weniger Punkte hat kommt er auf dessen Platz.

Ich hoffe ihr versteht das Problem. Hier ist der Code von der Sortierfunktion. Code: [AUSKLAPPEN]
Function SortHighscore(Score,nam$)
hs(10) = Score
For i = 1 To 10
For j = 1 To 10
If hs(i) > hs(j) Then
temp = hs(i)
hs(i) = hs(j)
hs(j) = temp
temp_$ = name(i)
name(i) = name(j)
name(j) = temp_$
EndIf
Next
Next
For i = 1 To 10
If hs(i) = Score Then name$(i) = nam$:Exit
Next
If name$(10) = nam$ Then name$(10) = ""
End Function


Und hier der komplette Code: [AUSKLAPPEN]
ReadHighscore("score.sav")
SortHighscore(500,"master")
SaveHighscore("score.sav")


Dim hs(10)
Dim name$(10)

Function SortHighscore(Score,nam$)
hs(10) = Score
For i = 1 To 10
For j = 1 To 10
If hs(i) > hs(j) Then
temp = hs(i)
hs(i) = hs(j)
hs(j) = temp
temp_$ = name(i)
name(i) = name(j)
name(j) = temp_$
EndIf
Next
Next
For i = 1 To 10
If hs(i) = Score Then name$(i) = nam$:Exit
Next
If name$(10) = nam$ Then name$(10) = ""
End Function

Function ReadHighscore(Pfad$)
dat = ReadFile(Pfad$)
For i = 1 To 10
hs(i) = (ReadInt(dat)+33)/55
name$(i) = ReadString(dat)
Next
CloseFile dat
End Function

Function SaveHighScore(Pfad$)
dat = WriteFile(Pfad$)
For i = 1 To 10
WriteInt(dat,hs(i)*55-33)
WriteString(dat,name$(i))
Next
CloseFile dat
End Function


Kann mir bitte jemand erklären wie die Sortierfunktion funktioniert und wie man sie verbessern kann?
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage
  • Zuletzt bearbeitet von mabox am So, Nov 18, 2007 10:56, insgesamt einmal bearbeitet

Eingeproggt

BeitragSa, Nov 17, 2007 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Code ist ja noch sehr grundlegend. Warum er nicht funktioniert, hab ich mir nicht überlegt, weil mir dein nicht eingerückter Stil nicht gefällt. Wenn du wissen willst, wie Sortieralgorithmen funktionieren, schau entweder hier oder auf wikipedia

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

PSY

Betreff: Re: Highscore richtig sortieren

BeitragSa, Nov 17, 2007 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
mabox hat Folgendes geschrieben:
Ich habe schon einen Code bei welchen aber der unterste in der Liste immer rausfliegt auch wenn der Name der neu reinkommt weniger Punkte hat kommt er auf dessen Platz.

Code: [AUSKLAPPEN]

hs(10) = Score



Rolling Eyes

ToeB

BeitragSa, Nov 17, 2007 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast keine Überprüfung ob die Code: [AUSKLAPPEN]
Score => hs(10)
weil dann die Highscore immer erst prüft und wenn die score => hs(10) ist dann Sortieren ... musst dass am anfang der Function "SortHighscore" schreiben... Aber ich mein, wenn man fremde Codes benutz, sollte man sie auch verstehen.... (das sind nämlich meine Functionen Smile )

mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

mabox

BeitragSa, Nov 17, 2007 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist ja grad mein Problem dass ich den Code nicht versteh. Deshalb steht in meinem ersten Post in diesen Thread auch, dass ich lernen will eine Highscore zu programmieren. Kann jemand versuchen mir den Code zu erklären?? vielleicht Crack93 da es ja sein Code ist? das wär nett!

~Edit: Das versteh ich auch nicht ganz was du damit meinst:
Crack93 hat Folgendes geschrieben:
Du hast keine Überprüfung ob die Code: [AUSKLAPPEN] [EINKLAPPEN] Score => hs(10)weil dann die Highscore immer erst prüft und wenn die score => hs(10) ist dann Sortieren ... musst dass am anfang der Function "SortHighscore" schreiben...

The_Nici

BeitragSa, Nov 17, 2007 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
"Stehle" keine Codes mehr, dann weisst du, was man tun muss.

mabox

BeitragSa, Nov 17, 2007 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde ja keine Codes "stehlen" wenn ich eine Highscore Programmieren könnte aber da ich nicht versteh wie das geht muss ich entweder auf Codes anderer Leute zurückgreifen oder lernen Highscores zu programmieren, was mir natürlich sehr viel lieber wäre aber alleine schaff ich das nicht.
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage
 

HyDr0x

BeitragSo, Nov 18, 2007 13:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will ja nichts sagen aber das ist doch nicht so schwer... wenn du schon daran verzweifeltst was soll das dann später werden wenn du pathfinding oder so lernen willst?? So ne Highscore hab ich mir selbst on the fly geproggt ohne mir irgendwas anzuguggen ..., naja egal ich will mal nicht so sein ... . Hier mein code hoffe er hilft dir weiter.


Code: [AUSKLAPPEN]


;Mainloop oder sowas
blablub
hz = hz + 1

If hz = 1 Then
readhigh();Die Highscore einlesen

highscorehinz();neuen Score adden

readhigh();2. einlesen des neuen Streams, da eventuell ein neuer Score hinzugefügt wurde

; jetzt hat man fein sortiert alle 10 Scores in einer Liste. wem es beliebt kann natürlich noch Namen hinzufügen.

EndIf
;weiter gehts im code blablubb

;zu den Funktionen
Function readhigh()

hstream2 = ReadFile("Highscore.dat");highscore datei öffnen

For stt = 1 To 10;alles zehn Highscores einlesen
high(stt) = ReadInt(hstream2)
Next

CloseFile(hstream2);stream schliessen

End Function

Function highscorehinz();jetzt guggen ob der neue Score rein darf und wenn dann adden

hstream = OpenFile("Highscore.dat");score datei öffnen

For stt = 1 To 10;alle Zehn Scores durchgehen die zuvor mit readscore eingelesen wurden
If high(stt-hn) < score And ev = 0 Then ;Wenn die Score kleiner ist als die neue Score dann
WriteInt hstream, score;wird die neue Score an die Stelle in die Datei geschrieben
ev = 1;Variable die bewirkt das die nächsten kleineren Scores in der Liste nicht auch überschrieben werden
hn = hn + 1;Bewirkt das die Liste um eins weiter geht da ja ein neuer Wert eingefügt wurde
Else;wenn der Score doch nicht größer war oder er schon einmal in die Datei geschrieben worden war (siehe ev)
WriteInt hstream, high(stt-hn)*55; dann gehts ganz normal weiter in der Liste
EndIf

Next

CloseFile(hstream);schliessen des streams

End Function


Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group