Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 22.07.2013, 14:34 Titel: Bibliotheken/Quellcodes - Highscoreliste? |
|
|
Gibt es bereits fertige Quellcodes / Bibliotheken für eine Highscoreliste irgendwo zum downloaden?
Es soll beim erreichen eines neuen Rekordes, dieser in eine bestehende Highscoreliste eingetragen werden.
Es soll eine Highscoreliste mit 5-10 Plätzen sein.
Notfalls muss ich mir selber so etwas Programmieren.
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 22.07.2013, 16:05 Titel: |
|
|
Wozu sollte es so etwas geben? Eine Highscore zu programmieren gehört zu den simpelsten Dingen die ich mir vorstellen kann. |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 22.07.2013, 16:53 Titel: |
|
|
Westbeam hat Folgendes geschrieben: | Wozu sollte es so etwas geben? Eine Highscore zu programmieren gehört zu den simpelsten Dingen die ich mir vorstellen kann. |
hätte ja sein können! Deswegen meine Frage!
Nun ja, angefangen habe ich schon mal! Leider funktioniert das ganze noch nicht so recht. Irgendwie verschiebt der mir die Liste nicht nach unten!
Code: | ' prüfen ob erreichte Punkte für die Highscoreliste genügt
i = 0
DO
i += 1
IF i > 9 THEN i += 1: EXIT DO
LOOP WHILE PunkteAlt(1) < Punkte OR PunkteAlt(i) = Punkte' Schleife wiederholen, wenn Punktezahl größer ist als die bisherigen Rekorde
' Punkte verschieben + neuen Rekord einfügen
FOR k = 1 TO 10
IF k < i-1 THEN
IF k > 1 THEN PunkteNeu(k-1) = PunkteAlt(k)
' ELSE
' PunkteNeu(k) = PunkteAlt(k)
END IF
NEXT
IF PunkteAlt(i-1) < Punkte THEN PunkteNeu(i-1) = Punkte
' Punkte speichern
FOR i = 1 TO 10
PunkteAlt(i) = PunkteNeu(i)
NEXT |
irgendwo habe ich einen Denkfehler drin?? Da muss ich nochmal schauen wo der Fehler ist.
Habe mich aber jetzt nicht mehr weiter damit beschäftigt, da andere Dinge Vorrang haben. _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 22.07.2013, 16:53 Titel: |
|
|
ja ja... In der not muß man es selbst schreiben, gut erkannt.
mutton  |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 22.07.2013, 18:24 Titel: |
|
|
FreeBASIC-Spielebuch Kapitel 7.  _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Domso
Anmeldungsdatum: 02.02.2011 Beiträge: 109
|
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 24.07.2013, 23:15 Titel: |
|
|
Habe mir jetzt da mal etwas gebastelt! Bin mir nicht ganz sicher, ob der korrekt funktioniert. Habe bei einer Do - Loop Schleife Probleme gehabt!
Bei den Tests die ich gemacht habe, speichert der so wie ich das sehe, richtig? Punktezahl wird an der richtigen Stelle eingefügt, alles andere um eins nach unten verschoben.
Vielleicht kann das mal jemand sich genauer anschauen?
Verbesserungsvorschläge erwünscht!
Code: |
DIM SHARED AS INTEGER PunkteAlt(10), PunkteNeu(10), Punkte, i, k
SCREENRES 640, 320, 32
PunkteAlt(10) = 14
PunkteAlt(9) = 12
PunkteAlt(8) = 10
PunkteAlt(7) = 7
PunkteAlt(6) = 2
Punkte = 8 ' erreichte Punktezahl
' Prüfen ob neuer Rekord erreicht wurde
i = 0
DO
i += 1
IF i > 10 THEN EXIT DO
LOOP WHILE Punkte > PunkteAlt(i) OR PunkteAlt(i) = Punkte ' Schleife wiederholen, wenn Punktezahl kleiner oder gleich ist als die bisherigen Rekorde
i -= 1
' LOCATE 5,65: PRINT i
' Punkte verschieben
FOR k = 1 TO 10
IF k <= i THEN PunkteNeu(k-1) = PunkteAlt(k) ELSE PunkteNeu(k) = PunkteAlt(k)
NEXT
' erreichten Rekord einfügen
PunkteNeu(i) = Punkte
FOR i = 1 TO 10
LOCATE i,5: PRINT "Platz "; i; ": "; PunkteAlt(i); " "; PunkteNeu(i);
NEXT
SLEEP
END
|
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 25.07.2013, 08:50 Titel: |
|
|
ich hoffe du weißt um die existenz vom index (0) in deinem punkte array. Sonst würde die sortiergeschichte nicht korrekt funktionieren. Beide arrays enthalten ja eigentlich 11 positionen. Mutton |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 25.07.2013, 15:40 Titel: |
|
|
Muttonhead hat Folgendes geschrieben: | ich hoffe du weißt um die existenz vom index (0) in deinem punkte array. Sonst würde die sortiergeschichte nicht korrekt funktionieren. Beide arrays enthalten ja eigentlich 11 positionen. Mutton |
Ja, die Existenz ist mir bekannt. Offensichtlich funktioniert er. Habe es gerade wieder getestet! Die anderen Highscores die mir gepostet wurden, habe ich mir angesehen. Dass in Noerd-Jump einer drin ist, wusste ich. Konnte damit aber nichts anfangen. Zu kompliziert zum einbauen in mein Programm. Und der andere Highscore steht nicht unter der Lizenz WTFPL!
So blieb mir leider nichts anderes übrig, als selber was zu schreiben.
Es erfüllt schon mal die Zwecke. Das Gelbe vom Ei ist es aber irgendwie noch nicht!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 25.07.2013, 15:54 Titel: |
|
|
Es muss nicht die WTFPL sein, andere erlauben es auch. |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 25.07.2013, 16:20 Titel: |
|
|
MOD hat Folgendes geschrieben: | Es muss nicht die WTFPL sein, andere erlauben es auch. | Ja, aber dann muss ich den Autor mit nennen und das ist das was ich nicht haben will!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 25.07.2013, 17:39 Titel: |
|
|
Auch das kommt immer auf die tatsächlich verwendete Lizenz an. Aber belassen wir es mal dabei. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 25.07.2013, 18:41 Titel: |
|
|
ALWIM hat Folgendes geschrieben: | Muttonhead hat Folgendes geschrieben: | ich hoffe du weißt um die existenz vom index (0) in deinem punkte array. Sonst würde die sortiergeschichte nicht korrekt funktionieren. Beide arrays enthalten ja eigentlich 11 positionen. Mutton |
Ja, die Existenz ist mir bekannt. Offensichtlich funktioniert er. |
Im vorliegenden Fall belegt PunkteNeu(0) gewissermaßen den 11. Platz in der Rangordnung, der nur intern temporär gespeichert, dann aber bei der Ausgabe (und wohl auch bei der Speicherung) verworfen wird. Daher wirft er hier keine Probleme auf.
Was anderes:
Code: | LOOP WHILE Punkte > PunkteAlt(i) OR PunkteAlt(i) = Punkte |
Warum nicht "LOOP WHILE Punkte >= PunkteAlt(i)"? Es ginge sogar noch etwas kürzer:
Code: | DO
i += 1
LOOP WHILE i <= 10 ANDALSO Punkte >= PunkteAlt(i) |
Allerdings frage ich mich, ob im Fall Punkte = PunkteAlt(i) tatsächlich die neue Punktzahl an höhere Stelle gesetzt werden soll als die alte. Wenn ich mit einem bereits vorhandenen Ergebnis gleichziehe, sollte meines Erachtens der frühere "Rekordhalter" weiterhin besser platziert sein als ich. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 25.07.2013, 20:53 Titel: |
|
|
Zitat: | Warum nicht "LOOP WHILE Punkte >= PunkteAlt(i)"? |
Ist natürlich besser bzw. kürzer! Nicht mitgedacht!
Zitat: | Allerdings frage ich mich, ob im Fall Punkte = PunkteAlt(i) tatsächlich die neue Punktzahl an höhere Stelle gesetzt werden soll als die alte. Wenn ich mit einem bereits vorhandenen Ergebnis gleichziehe, sollte meines Erachtens der frühere "Rekordhalter" weiterhin besser platziert sein als ich. | Verstehe! Ich müsste dann an der Stelle abbrechen, wo dann zwei Punkte gleich sind, wenn ich vergleiche. Das wäre besser! In meinem Fall ist es ja egal, da keine Namen und sonst nichts weiter als nur die Punkte gespeichert werden.
Sollte ich ein Datum und eine Uhrzeit mit einfügen wollen, müsste ich überprüfen ob ein neuer Rekord vorliegt! Das ist bis jetzt nicht der Fall!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
|