Habe einen Highscore erstellt, aber wie weiter?
Übersicht

Blitzkrieg BopBetreff: Habe einen Highscore erstellt, aber wie weiter? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Habe folgendes Highscoregerüst gemacht: Code: [AUSKLAPPEN] ; Highscore Gerüst ;################# Graphics 1024,768,16,2 SetBuffer BackBuffer() ; Globale Daten , unter anderem auch der Input Befehl Global timer Locate 500,500 Global Name$ = Input("Name:") Cls Global Punkte ; ENtweder beginnt das Game oder Highscore wird gelesen: Text 100,100,"Enter um das Game zu starten" Text 100,150,"Leertaste um den Highscore zu sehen" WaitKey If KeyDown(57) Then highscore_lesen() If KeyDown(28) Then ; hauptschleife befindet sich in if bedingung! Repeat Cls timer = timer + 1 Text 10,10,"Timer:"+timer Text 10,60,"Punkte:"+Punkte If timer > 200 zeit_ende() EndIf If KeyHit(28) Punkte = Punkte + 1 EndIf If KeyDown(1) End Flip Forever EndIf ;ende der hauptschleife Function zeit_ende() Cls Datei = WriteFile ("Speicher2.dat") WriteString Datei, Name$ WriteInt Datei, Level WriteInt Datei, Leben WriteInt Datei, Punkte CloseFile Datei Datei = ReadFile ("Speicher2.dat") Name$ = ReadString$(Datei) Level = ReadInt(Datei) Leben = ReadInt(Datei) Punkte = ReadInt(Datei) CloseFile Datei Text 500,100,"Highscore:" Text 360,226,"Name:" Text 460,226,"Level:" Text 560,226,"Leben:" Text 660,226,"Punkte:" Text 305,260,""+ Name$ Text 470,260,""+ Level Text 570,260,""+ Leben Text 670,260,""+ Punkte End Function Function highscore_lesen() Repeat Cls Datei = ReadFile ("Speicher2.dat") Name$ = ReadString$(Datei) Level = ReadInt(Datei) Leben = ReadInt(Datei) Punkte = ReadInt(Datei) CloseFile Datei Text 500,100,"Highscore:" Text 360,226,"Name:" Text 460,226,"Level:" Text 560,226,"Leben:" Text 660,226,"Punkte:" Text 305,260,""+ Name$ Text 470,260,""+ Level Text 570,260,""+ Leben Text 670,260,""+ Punkte If KeyDown(1) End Flip Forever End Function Könnt ihr ja mal ausprobiern! ist ganz gut, nur nun stellt sich eine Frage: Wie kann ich das nun bb beibringen, das da mehr leute auf eine liste passen, der die nach punkten sortiert und maximal 10 auf die liste kommen? ![]() |
||
~ Hey Ho Let's Go ~ |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schau hier dir das mal an da steht soweit alles drinn....
https://www.blitzforum.de/viewtopic.php?t=766 |
||
[BB2D | BB3D | BB+]
|
![]() |
Last Anquav Hero |
![]() Antworten mit Zitat ![]() |
---|---|---|
Travis hat doch so einen schönen Kot ähh Code gemacht
nächstesmal benutz gefälligst die suche... klickst du hier oder schau im Kot ähh Code Archiv nach edit: mist, zu langsam |
||
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Toll! das bringt ja nix, weil bei mir werden die NAmen ja nicht per Zufall bestimmt, sondern werden eingegeben.!!! wie mache ich das dann= | ||
~ Hey Ho Let's Go ~ |
dubitat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
lol! das solltest du dir wohl denken können:
du lässt die zufallszahlen einfach weg und nimmst den string, wo der user was eingegeben hat und dann sollte es funken! sonst gib ein bissel cde und ich kann helfen! |
||
Erare humanum est - Irren ist Menschlich |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oh man! kann mir jemand das genau erklären, wie ich das machen kann? ich steig da nicht durch! BITTE | ||
~ Hey Ho Let's Go ~ |
![]() |
Last Anquav Hero |
![]() Antworten mit Zitat ![]() |
---|---|---|
was machen?
falls du das meinst: Code: [AUSKLAPPEN] maxhighscores=9 ;9, da 0 auch zählt dim scores(500) dim highscores(maxhighscores) ;sortier-algorithmus kommt hier hin ... ;maximal 10 scores for i=0 to maxhighscores highscores(i)=scores(i) next oder das Code: [AUSKLAPPEN] ; --- 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 einfach weglassen! fehlt dir was irgendwo, irgendwie? |
||
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
muss ich das denn auf grundlage von dim feldern machen? und wie ganue mach ich das jetzt,m wenn man nach jder runde sienen namen eingibt und meistens andere punkte hat, die nach größe geordnet werden sollen | ||
~ Hey Ho Let's Go ~ |
![]() |
Last Anquav Hero |
![]() Antworten mit Zitat ![]() |
---|---|---|
du kannst gerne banks oder blitzarrays oder types verwenden, es steht dir offen...
nimm den quicksort algorithmus, ist alles in Travis Code... |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] function HighSort(sollpunkte,name$)
for a=5 to 0 step -1 if sollpunkte>highpoints(a) highname$(a+1)=highname$(a) highpoints(a+1)=highpoints(a) highname$(a)=name$ highpoints(a)=sollpunkte endif next end function Hab das mal eben rausgekramt, musst Dir halt noch auf Deine Bedürfnisse anpassen. |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann werde ich es noch mal versuchen Schritt für Schritt zu erklären.
Angenommen wir wollen eine Highscoreliste für 10 Punktestände erstellen. Dazu legen wir jetzt jeweils eine 11 stellige Liste für die Namen und auch für die Punkte an. Den 11. Platz benötigen wir später um neue Einträge in die Liste einzusortieren. Code: [AUSKLAPPEN] Dim Name$(11) Dim Score(11) Jetzt haben wir eine leere Liste. Wenn wir keine vorhandene Liste haben, die wir laden können, können wir die Liste jetzt mit Standartwerten füllen. Code: [AUSKLAPPEN] For i = 1 To 10 Score(i) = i*10 Name$(i) = "Spieler " + i Next Jetzt hätten wir etwa folgende Liste: Code: [AUSKLAPPEN] 1. Spieler 1 10 Punkte 2. Spieler 2 20 Punkte 3. Spieler 3 30 Punkte 4. Spieler 4 40 Punkte ... So ist die Liste natürlich unsortiert, denn der Spieler mit der höchsten Punktzahl muss natürich an erster Stelle stehen. Also müssen wir die Liste sortieren. Dazu kommt folgende 'Sortiermaschine' zum Einsatz. Code: [AUSKLAPPEN] For I = 1 To 10 For J = I To 10 If Score(I) < Score(J) Then ; "<" = größter zuerst / ">" = kleinster 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 haben wir die korrekt sortierte Liste mit dem Größten Punktestand an erster Stelle. Hat jetzt ein Spieler einen höheren Punktestand erreicht als der niedrigste Punktestand in der Tabelle [Score(10)] dann darf der Spieler seinen Namen in die Liste eintragen. Code: [AUSKLAPPEN] If Punkte > Score(10) Then Print "Neuer Eintrag!" Name$(11) = Input("Name: ") Score(11) = Input("Punke: ") EndIf Der Neue Eintrag wird zunächst hinter dem letzten platziert. Jetzt muss die komplette Liste mit allen 11 Einträgen noch einmal sortiert werden. Code: [AUSKLAPPEN] For I = 1 To 11 For J = I To 11 If Score(I) < Score(J) Then ; "<" = größter zuerst / ">" = kleinster 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 haben wir den ehemals niedrigstan Punktestand auf dem unsichtbaren 11. Platz geschoben und der neue Punktestand wurde entsprechend in die Liste einsortiert. Jetzt folgt noch ein Beispiel zum speichern und zum laden der Liste in eine externe Datei. Code: [AUSKLAPPEN] ; --- Liste speichern Datei = WriteFile("Highscore.dat") For i = 1 To 10 WriteLine Datei, Name$(i) WriteLine Datei, Score(i) Next CloseFile Datei ; --- Liste laden Datei = ReadFile("Highscore.dat") For i = 1 To 10 Name$(i) = ReadLine(Datei) Score(i) = ReadLine(Datei) Next CloseFile Datei ; --- Liste anzeigen For i = 1 To 10 Print i + "." + Name$(i) + " " + Score(i) Next Ich hoffe, das war ausführlich genug ![]() |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also was genau ist hier shcon nicht richtig:
Code: [AUSKLAPPEN] Dim Name$(11) Dim Score(11) ; --- Liste laden Datei = ReadFile("Highscore.dat") For i = 1 To 10 Name$(i) = ReadLine(Datei) Score(i) = ReadLine(Datei) Next CloseFile Datei ; --- Liste anzeigen For i = 1 To 10 Print i + "." + Name$(i) + " " + Score(i) Next For i = 1 To 10 Score(i) = i*10 Name$(i) = "Spieler " + i Next For I = 1 To 10 For J = I To 10 If Score(I) < Score(J) Then ; "<" = größter zuerst / ">" = kleinster zuerst MerkerA = Score(I) : Score(I) = Score(J) : Score(J) = MerkerA MerkerB$ = Name$(I) : Name$(I) = Name$(J): Name$(J) = MerkerB$ EndIf Next Next If Punkte > Score(10) Then Print "Neuer Eintrag!" Name$(11) = Input("Name: ") Score(11) = Input("Punke: ") EndIf For I = 1 To 11 For J = I To 11 If Score(I) < Score(J) Then ; "<" = größter zuerst / ">" = kleinster zuerst MerkerA = Score(I) : Score(I) = Score(J) : Score(J) = MerkerA MerkerB$ = Name$(I) : Name$(I) = Name$(J): Name$(J) = MerkerB$ EndIf Next Next |
||
~ Hey Ho Let's Go ~ |
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also du darfst die Liste nur dann laden, falls sie auch vorhanden ist (also falls die Datei existiert). Wenn nicht, musst du eine Standartliste erstellen.
Code: [AUSKLAPPEN] Dim Name$(11) Dim Score(11) ; --- Liste laden Datei = ReadFile("Highscore.dat") If Datei <> 0 Then ; Nur laden, wenn Liste auch vorhanden ist! For i = 1 To 10 Name$(i) = ReadLine(Datei) Score(i) = ReadLine(Datei) Next CloseFile Datei EndIf If Datei = 0 Then ; Wenn keine Liste vorhanden ist, Standartliste erstellen! For i = 1 To 10 Score(i) = i*10 Name$(i) = "Spieler " + i Next EndIf ; --- Liste anzeigen For i = 1 To 10 Print i + "." + Name$(i) + " " + Score(i) Next ; --- Liste sortieren For I = 1 To 10 For J = I To 10 If Score(I) < Score(J) Then ; "<" = größter zuerst / ">" = kleinster zuerst MerkerA = Score(I) : Score(I) = Score(J) : Score(J) = MerkerA MerkerB$ = Name$(I) : Name$(I) = Name$(J): Name$(J) = MerkerB$ EndIf Next Next ;If Punkte > Score(10) Then ; muss weggelassen werden, da wir hier die Punkte ja direkt eingeben (Fehler von mir) Print "Neuer Eintrag!" Name$(11) = Input("Name: ") Score(11) = Input("Punke: ") ;EndIf ; --- Liste erneut sortieren For I = 1 To 11 For J = I To 11 If Score(I) < Score(J) Then ; "<" = größter zuerst / ">" = kleinster zuerst MerkerA = Score(I) : Score(I) = Score(J) : Score(J) = MerkerA MerkerB$ = Name$(I) : Name$(I) = Name$(J): Name$(J) = MerkerB$ EndIf Next Next ; --- Liste erneut anzeigen For i = 1 To 10 Print i + "." + Name$(i) + " " + Score(i) Next ; Das hier musst du weglassen, weil du sonst die liste gleich wieder ; mit Standartwerten überschreibst ;-) ;For i = 1 To 10 ;Score(i) = i*10 ;Name$(i) = "Spieler " + i ;Next WaitKey End |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
so travis! ich versuch da jetzt durchzusteigen und anzupassen! wäre nett, wenn du nachher nochmal schauen kannst, weil ich sicher ein paar fragen haben werde! aber danke erstmal ![]() ![]() |
||
~ Hey Ho Let's Go ~ |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wie zum Beispiel kann man anstatt:
Code: [AUSKLAPPEN] Print i + "." + Name$(i) + " " + Score(i) den befehlt 'Text' verwenden? wenn ic das versuche, überlappen si´ch alle spielernamen |
||
~ Hey Ho Let's Go ~ |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Text x,y,"Text",[centerx],[centery]
Ich empfehle Dir die deutsche Onlinehilfe zu saugen. Arbeite auch Rob's Tut durch, dann bleibst Du nicht mehr an solchem Kinderkram hängen ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
lol! das habe ich längst getan, aber mit dem text befehl komm ich net so klar da irgendwie! naja, ich warte bis travis da ist , is ja schließlich sien code ![]() |
||
~ Hey Ho Let's Go ~ |
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, da bin ich wieder ![]() Also man könnte das so machen: Code: [AUSKLAPPEN] For i = 1 to 10 Text x, i*10, i + "." + Name$(i) + " " + Score(i) Next Da der Zähler i ja immer um Eins erhöht wird, hat jetzt jede Zeile einen anderen Y-Wert. |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Travis
Das erste Sortieren(1-10) kannst du dir sparen. wenn du das zweite Sortieren in eine Function packst, und einfach aufrufst. |
||
solitaire |
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group