Highscore: es gewinnt, wer am WENIGSTEN Züge braucht...

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Highscore: es gewinnt, wer am WENIGSTEN Züge braucht...

    Guten Morgen,

    nun ist das neue Spiel fast fertig, nur noch schnell den HighScore machen, jedoch: in meinem Spiel gewinnt tatsächlich derjenige, der am wenigsten Züge benötigt. Ähm - jetzt sortiert der vordefinierte Highscore natürlich immer die höchste Punktzahl nach oben.

    Hat sich vielleicht schon mal jemand Gedanken darüber gemacht, wie man dies umdrehen könnte? Denn egal, ob ich die Züge oder die erspielten Punkte speichere - ich brauche die geringsten Einträge oben.

    Das einzige, was mir bislang dazu eingefallen ist, ist, eine komplizierte Berechnung aufzustellen, nach der die Spieler mit den geringsten Ergebnissen die höchste Punktzahl bekommen. Dürfte allerdings ziemlich undurchschaubar werden für die Spieler.

    Oder gibt es da noch eine andere Möglichkeit, die ich bisher übersehen habe....? Könnte ja sein, dass alles "ganz easy" ist... :D

    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Oder du schreibst dein eigenes Highscoresystem.
    Beginnend mit der kleinsten Zahl.

    Die Punktezahlen der Spieler kannst du entweder in
    der Registery oder in einer externen Datei speichern.
    Wenn du dich für die Benutzung von Dateien entscheidest, würde ich bins
    oder XOR-Verkryptung empfehlen.
  • Ähm, danke für die gutgemeinten Tipps. Nur beides wollte ich eigentlich vermeiden: eine Tabelle, die nur aus Minuspunkten besteht als auch, den gesamten Highscore neu zu schreiben. Ich habe mich jetzt doch für ein kompliziertes Punktesystem entschieden, bei dem positive Werte zum Schluss rauskommen.
    Trotzdem danke für die Hinweise; hatte halt gedacht, es geht irgendwie einfacher, den HighScore "umzudrehen"...
    Gruß Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Ich weiß, dass dieses Thema schon als gelöst makiert ist, jedoch möchte ich auch noch zwei Varianten hier posten:

    1. Umdrehen der Highscore-Liste:
    Ganz einfacher Trick: Man zeichnet die Liste im draw-Event mittels draw_highscore(x1,y1,x2,y2); und vertauscht einfach die beiden y-Werte (Damit sind die kleinsten Punktzahlen oben; will man, dass die Punkte links von den Namen stehen kann man zusätzlich die x-Werte auch vertauschen).

    GML-Quellcode

    1. //Also:
    2. draw_highscore(100,300,300,100);
    3. //Statt z.B.:
    4. draw_highscore(100,100,300,300);


    Unangenehm an dieser Methode ist, dass die Nuller-Werte erstmals am weitesten oben sind.

    2. Selbst zeichnen
    Am besten und einfachsten sollte dann wohl doch die Methode sein, den Highscore mittels einer For-Schleife einfach selbst zu zeichnen.
    Die beiden Funktionen:

    GML-Quellcode

    1. highscore_value(place);
    2. highscore_name(place);


    sollten einen dabei sicherlich gut helfen. Der klare Vorteil ist natürlich, dass hier die Nuller-Werte einfach weggelassen werden können.

    So das war es dann auch, nur fürs Archiv falls ähnliche Probleme mal auftauchen.

    MfG.,
    Mokuyobi
    木曜日 (Mokuyōbi)
  • Archie schrieb:

    Ähm, danke für die gutgemeinten Tipps. Nur beides wollte ich eigentlich vermeiden: eine Tabelle, die nur aus Minuspunkten besteht als auch, den gesamten Highscore neu zu schreiben.


    Mein oben genannter vorschlag tut weder.
    ein noch einfacherer weg dies zu erreichen wäre btw. wenn du zb 1500 als Standart Score machst (0 Züge) und für jeden zug den Score mit zb 0.8 multiplizierst.
    So wird dieser zwar immer kleiner, kann aber nicht unter 0 gehen.
  • Hellfish schrieb:

    ein noch einfacherer weg dies zu erreichen wäre btw. wenn du zb 1500 als Standart Score machst (0 Züge) und für jeden zug den Score mit zb 0.8 multiplizierst.
    So wird dieser zwar immer kleiner, kann aber nicht unter 0 gehen.

    Vorsicht mit Exponentialfunktionen, die sehen erstmal harmlos aus, haben dann doch aber ein enormes Wachstum (bzw. fallen sehr schnell ab), insbesondere, wenn du dich auf ganze Zahlen als Punktzahlen festlegen willst. Deine vorgeschlagenen Werte zum Beispiel sind bereits nach 33 Zügen bei weniger als einem Punkt angekommen. Außerdem sieht es komisch aus, wenn man im ersten Zug 300 Punkte verliert und am Schluss 3 Züge braucht, um einen einzigen Punkt zu verlieren ...
  • Mokuyobi schrieb:

    Ich weiß, dass dieses Thema schon als gelöst makiert ist, jedoch möchte ich auch noch zwei Varianten hier posten:

    1. Umdrehen der Highscore-Liste:
    Ganz einfacher Trick: Man zeichnet die Liste im draw-Event mittels draw_highscore(x1,y1,x2,y2); und vertauscht einfach die beiden y-Werte (Damit sind die kleinsten Punktzahlen oben; will man, dass die Punkte links von den Namen stehen kann man zusätzlich die x-Werte auch vertauschen).

    Dann hast du eine umgedrehte Auflistung der 10 schlechtesten Spieler. :P
  • MewX schrieb:

    Mokuyobi schrieb:

    Ich weiß, dass dieses Thema schon als gelöst makiert ist, jedoch möchte ich auch noch zwei Varianten hier posten:

    1. Umdrehen der Highscore-Liste:
    Ganz einfacher Trick: Man zeichnet die Liste im draw-Event mittels draw_highscore(x1,y1,x2,y2); und vertauscht einfach die beiden y-Werte (Damit sind die kleinsten Punktzahlen oben; will man, dass die Punkte links von den Namen stehen kann man zusätzlich die x-Werte auch vertauschen).

    Dann hast du eine umgedrehte Auflistung der 10 schlechtesten Spieler. :P
    Und wo ist jetzt das Problem?
    Es ging doch darum, dass die Spieler mit den wenigsten Punkten, oben aufgelistet werden.

    nun ist das neue Spiel fast fertig, nur noch schnell den HighScore
    machen, jedoch: in meinem Spiel gewinnt tatsächlich derjenige, der am wenigsten Züge benötigt. Ähm - jetzt sortiert der vordefinierte Highscore natürlich immer die höchste Punktzahl nach oben.
    Und genau das macht der Game Maker, wenn man die y-Koordinaten umdreht. Die "schlechtesten" Spieler stehen oben - aber da es in dem Spiel darum geht, wer am wenigsten "Punkte" (Züge) hat, ist dies ja der gewünschte Effekt. Und wer somit der "schlechteste" Spieler ist, liegt im Auge des Betrachters. Wenn der Eintrag mit den niedrigsten Punkten obensteht, ist dies doch sogesehen der beste Spieler.

    Das der GM das intern normal Speichert, also der Spieler mit den meisten Punkten oben, ist ja nicht schlimm, wenn man es immer nur umgedreht ausgibt.

    MfG.,
    Mokuyobi
    木曜日 (Mokuyōbi)
  • Mokuyobi schrieb:

    MewX schrieb:

    Ich weiß, dass dieses Thema schon als gelöst makiert ist, jedoch möchte ich auch noch zwei Varianten hier posten:

    1. Umdrehen der Highscore-Liste:
    Ganz einfacher Trick: Man zeichnet die Liste im draw-Event mittels draw_highscore(x1,y1,x2,y2); und vertauscht einfach die beiden y-Werte (Damit sind die kleinsten Punktzahlen oben; will man, dass die Punkte links von den Namen stehen kann man zusätzlich die x-Werte auch vertauschen).

    Dann hast du eine umgedrehte Auflistung der 10 schlechtesten Spieler. :P

    Und wo ist jetzt das Problem?
    Es ging doch darum, dass die Spieler mit den wenigsten Punkten, oben aufgelistet werden.


    Nein, ganz so leicht ist es nicht. Es mögen zwar der schlechteste Score der Tabelle ganz oben stehen, aber da es immer noch "nur" eine Draw-Funktion ist, setzt sich die Top 10 wiederrum nur aus den höchsten Scores, die erreicht wurden, zusammen. Auf Platz 1 würde somit dann der "beste der schlechtesten" Scores stehen.

    Edit: Pfui, Formatierung und so.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Phoenix ()