Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Bibliotheken/Quellcodes - Highscoreliste?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 22.07.2013, 14:34    Titel: Bibliotheken/Quellcodes - Highscoreliste? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 22.07.2013, 16:05    Titel: Antworten mit Zitat

Wozu sollte es so etwas geben? Eine Highscore zu programmieren gehört zu den simpelsten Dingen die ich mir vorstellen kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 22.07.2013, 16:53    Titel: Antworten mit Zitat

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! grinsen 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
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 22.07.2013, 16:53    Titel: Antworten mit Zitat

ja ja... In der not muß man es selbst schreiben, gut erkannt.
mutton grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 22.07.2013, 18:24    Titel: Antworten mit Zitat

FreeBASIC-Spielebuch Kapitel 7. grinsen
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Domso



Anmeldungsdatum: 02.02.2011
Beiträge: 109

BeitragVerfasst am: 22.07.2013, 19:34    Titel: Antworten mit Zitat

http://www.freebasic-portal.de/downloads/programmierwettbewerbe/noerd-jump-280.html

da gibts auch nen Highscore

verwundert verwundert
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 24.07.2013, 23:15    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 25.07.2013, 08:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 25.07.2013, 15:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 25.07.2013, 15:54    Titel: Antworten mit Zitat

Es muss nicht die WTFPL sein, andere erlauben es auch.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 25.07.2013, 16:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 25.07.2013, 17:39    Titel: Antworten mit Zitat

Auch das kommt immer auf die tatsächlich verwendete Lizenz an. Aber belassen wir es mal dabei.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 25.07.2013, 18:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 25.07.2013, 20:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz