ds_list_sort

  • GM 8

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

  • Hi, ich benutze eine ds list um meine punktzahlen von den 6 spielern zu sortieren.
    Funktioniert auch ganz gut, bis auf eine Sache:
    Falls die Spieler die gleiche Punktzahl haben, werden sie an die gleiche Position geschickt nach dem sortieren.
    Ich will sie aber nebeneinander haben, ist das möglich?

    Beim anzeigen überlappen sich diese dann...
    Beispiel:

    10
    8
    5
    3 3
    1

    Soll aber sein:

    10
    8
    5
    3
    3
    1
  • Hast du ein Spiel, bei dem 6 Spieler gleichzeitig spielen?
    Du kannst deren Punkte doch auch in Globalen Variablen speichern, z.B. so:

    GML-Quellcode

    1. global.sp1 = '0'
    2. global.sp2 = '0'
    3. global.sp3 = '0'
    4. global.sp4 = '0'
    5. global.sp5 = '0'
    6. global.sp6 = '0'

    Und dann die Punktzahl dareinsenden mit

    GML-Quellcode

    1. global.sp1 = [PUNKTE]


    MfG Clark

    DigitalClark
  • 1. Ja 6 Spieler ;)
    2. Sind die Punkte schon global gespeichert
    3. Ich glaub du hast mich nicht verstanden

    Ich will lediglich die Punkte der Spieler sortieren, damit sie in der richtigen Reihenfolge angezeigt werden.
    Dabei sollen 2 Punktzahlen nicht an selber stelle stehen.
  • ds_list_sort(id,ascend) Sortiert die Werte in der Liste. Wenn "ascend" "true" ist, in aufsteigender Reihenfolge, > ansonsten in absteigender.

    Das dürfte für dich genau das richtige sein.
    ( ascend solltest du in deinem Fall auf true setzen )

    - Tobi97
    8|
  • Das kannst du aber auch so machen.
    In's Draw-Event :event_draw::

    GML-Quellcode

    1. if global.sp1 > global.sp2 //Vielleicht hier noch ein oder-Zeichen oder so einfügen, ich weiß nicht wie das aussiehtdraw_text(8,32,global.sp1)

    Und so weiter...
    Die sind noch nicht gespeichert, aber du kannst dafür eine Variable erstellen, wie z.B. score1 = global.sp1, score2 = global.sp2, etc.

    MfG Clark

    DigitalClark
  • Bitte vorher richtig lesen, bevor ihr antwortet.
    Ich bin kein Anfänger,
    ds_list_sort ist die Überschrift vom Thema, also als Vorschlag etwas zu voreilig ;)
    und clark, ich weiß immer noch nicht was du mir damit sagen willst, soll das ein merkwürdiger versuch sein einen sortier-algorithmus zu entwickeln? Dafür brauchst du aber mehr Zeilen ;) (Stichwort: Bubblesort, Quicksort)
  • Highduken schrieb:

    ds_list_sort ist die Überschrift vom Thema, also als Vorschlag etwas zu voreilig ;)

    Warum funktioniert das denn mit ds_list_sort nicht? Sollte doch gehen.

    Highduken schrieb:

    (Stichwort: Bubblesort, Quicksort)

    Wenn du kein Anfänger bist, kannste dir doch eben selbst nen Quicksort programmieren. ;)
  • @Highduken: Dann gib doch mal deinen Code her. Und sag mal wie du deine Highscore-Liste renderst. Zeichnest du das Ding selbst oder mit draw_highscore(...)?
    Wenn du keine GML-Anfänger bist, dann gib das auch an.

    Basti schrieb:



    Zitat von »Highduken«

    (Stichwort: Bubblesort, Quicksort)





    Wenn du kein Anfänger bist, kannste dir doch eben selbst nen Quicksort programmieren. ;)


    Und hört mal bitte auf mit diesem komischen Bemerkungen. Die sind nicht wirklich hilfreich, um das hier angegebene Problem zu lösen. Wie der GM Listen sortiert, muss nicht euer Problem sein.

    Also Code her, dann kann man dir schneller helfen.

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • Ich hab das Problem mittlerweile selbst gelöst, wer Interesse hat, hier die Lösung:
    Ich hätte ds_list_find_value anstatt ds_list_find_index benutzen müssen!
    Hier mein Code:

    Quellcode

    1. //Im Create oder wann auch immer geupdatet werden soll
    2. plist = ds_list_create()
    3. ds_list_clear(plist)
    4. if p1_active = 1 {ds_list_add(plist,p1_points)}
    5. if p2_active = 1 {ds_list_add(plist,p2_points)}
    6. if p3_active = 1 {ds_list_add(plist,p3_points)}
    7. if p4_active = 1 {ds_list_add(plist,p4_points)}
    8. if p5_active = 1 {ds_list_add(plist,p5_points)}
    9. if p6_active = 1 {ds_list_add(plist,p6_points)}
    10. ds_list_sort(plist,0)
    11. //Im Draw Event
    12. for (i=0;i<ds_list_size(plist);i+=0)
    13. {
    14. if ds_list_find_value(plist,i) = p1_points && p1_active = 1
    15. {
    16. draw_text_shadow(sx+w+50, rangpos[i],p1_color,c_black,0.4,p1_name,2,-30)
    17. draw_set_halign(fa_right)
    18. draw_text_shadow(sx+w+430,rangpos[i],p1_color,c_black,0.4,ds_list_find_value(plist,i),2,-30)
    19. draw_set_halign(fa_left)
    20. i+=1
    21. }
    22. if ds_list_find_value(plist,i) = p2_points && p2_active = 1
    23. {
    24. draw_text_shadow(sx+w+50, rangpos[i],p2_color,c_black,0.4,p2_name,2,-30)
    25. draw_set_halign(fa_right)
    26. draw_text_shadow(sx+w+430,rangpos[i],p2_color,c_black,0.4,ds_list_find_value(plist,i),2,-30)
    27. draw_set_halign(fa_left)
    28. i+=1
    29. }
    30. if ds_list_find_value(plist,i) = p3_points && p3_active = 1
    31. {
    32. draw_text_shadow(sx+w+50, rangpos[i],p3_color,c_black,0.4,p3_name,2,-30)
    33. draw_set_halign(fa_right)
    34. draw_text_shadow(sx+w+430,rangpos[i],p3_color,c_black,0.4,ds_list_find_value(plist,i),2,-30)
    35. draw_set_halign(fa_left)
    36. i+=1
    37. }
    38. if ds_list_find_value(plist,i) = p4_points && p4_active = 1
    39. {
    40. draw_text_shadow(sx+w+50, rangpos[i],p4_color,c_black,0.4,p4_name,2,-30)
    41. draw_set_halign(fa_right)
    42. draw_text_shadow(sx+w+430,rangpos[i],p4_color,c_black,0.4,ds_list_find_value(plist,i),2,-30)
    43. draw_set_halign(fa_left)
    44. i+=1
    45. }
    46. if ds_list_find_value(plist,i) = p5_points && p5_active = 1
    47. {
    48. draw_text_shadow(sx+w+50, rangpos[i],p5_color,c_black,0.4,p5_name,2,-30)
    49. draw_set_halign(fa_right)
    50. draw_text_shadow(sx+w+430,rangpos[i],p5_color,c_black,0.4,ds_list_find_value(plist,i),2,-30)
    51. draw_set_halign(fa_left)
    52. i+=1
    53. }
    54. if ds_list_find_value(plist,i) = p6_points && p6_active = 1
    55. {
    56. draw_text_shadow(sx+w+50, rangpos[i],p6_color,c_black,0.4,p6_name,2,-30)
    57. draw_set_halign(fa_right)
    58. draw_text_shadow(sx+w+430,rangpos[i],p6_color,c_black,0.4,ds_list_find_value(plist,i),2,-30)
    59. draw_set_halign(fa_left)
    60. i+=1
    61. }
    62. }
    Alles anzeigen