platzierung

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

  • platzierung

    hallo
    gibt es irgend ne formel oder einen script mit dem man variablen der größe nach ordnen kann?

    ich hab in meinem spiel 2-8 spieler, jeder spieler hat ne variable global.pl1_score,
    und am schluss des spiels möchte ich das der spieler mit den höchsten score die variable endrang = 1 bekommt, der mit den zweit höchsten endrang =2 etc..

    mfg
  • das könnte ein bissn komplizirt werden, aber wie willst du das die sotirt werden, also wie soll es aussehen wenn die sotiert sind, soll es eine liste werden, ein Array? Besreib mal genauer was du willst.

    Schau dir mal das an:
    min(val1,val2,val3,...) Returns the minimum of the values. The function can have up to 16 arguments. They must either be all real or all strings.

    max(val1,val2,val3,...) Returns the maximum of the values. The function can have up to 16 arguments. They must either be all real or all strings.

    mean(val1,val2,val3,...) Returns the average of the values. The function can have up to 16 arguments. They must all be real values.

    median(val1,val2,val3,...) Returns the median of the values, that is, the middle value. (When the number of arguments is even, the smaller of the two middle values is returned.) The function can have up to 16 arguments. They must all be real values.
  • ich möchte einfach, dass wenn zbs. pl4.score am höchsten ist pl4.endplatzierung=1 wird und wenn zbs. pl2.score am dritthöchsten ist pl2.endplatzierung 3 wird usw.
    außerdem soll er auch noch fragen ob die jeweilige plX.score existiert, denn in meinem spiel kann es sein das zbs. nur pl3, pl4, pl8 und pl1.score existieren.

    mfg
  • Hey, ich hab da mal was ausprobiert und hat auch geklappt.
    Weise jedem Objekt pl1, pl2, ... die Variablen "punkte" und "endplatzierung" zu.
    Dann brauchst du ein Objekt, welches die Spieler sortiert.
    Im CreateEvent

    GML-Quellcode

    1. map=ds_map_create() //erstellt die map
    2. ds_map_add(map,pl1.punkte,pl1) //füllt sie mit den Punkten und der Id des dazugehörigen Objekts
    3. ds_map_add(map,pl2.punkte,pl2)
    4. ds_map_add(map,pl3.punkte,pl3)
    5. ds_map_add(map,pl4.punkte,pl4)

    Hab einfach mal beim druck auf eine Taste das "Sortierverfahren"

    GML-Quellcode

    1. var key,value;
    2. for(i=1;i<=4;i+=1) //musst du natürlich der Anzahl der Spieler anpassen
    3. {
    4. key=ds_map_find_last(map) //findet den größten key (in unserem Fall die größte Punktanzahl), da die map automatisch von klein nach groß sortiert wird
    5. value=ds_map_find_value(map,key) //gibt die Id des Objektes zurück, welches die größte Punktzahl hat
    6. ds_map_delete(map,key) //löscht den Eintrag
    7. value.endplatzierung=i //und gibt dem Objekt die Platzierung i, also erst 1, dem nächsten 2 usw.
    8. }

    Man könnte auch mit ds_map_find_next/previous arbeiten, aber klappte iwie nicht so, wie ich das wollte.

    Zur Veranschaulichung hab ich im DrawEvent noch dies:

    GML-Quellcode

    1. draw_text(0,0,string(pl1.endplatzierung)+":"+string(pl1.punkte))
    2. draw_text(0,16,string(pl2.endplatzierung)+":"+string(pl2.punkte))
    3. draw_text(0,32,string(pl3.endplatzierung)+":"+string(pl3.punkte))
    4. draw_text(0,48,string(pl4.endplatzierung)+":"+string(pl4.punkte))

    ...und siehe da: Nach Tastendruck steht vor der Punktzahl der entsprechende Platz
  • Du sagst das der der code auch herrausfinden soll welcher player aktiv ist, ich gehe einfach mal davon aus das ein inaktiver player einen score von -1 hat, das musst du natürlich erst mal einrichten!

    Es gab schon mal ein änliches problem, das wurde aber auch noch nicht gelöst!
    Rangliste erstellen


    Ich weiß jetzt nicht wie erfahren du bist, aber hier ein bisschen inspiration:

    GML-Quellcode

    1. var hs,; // erstellt die variable hs, die wird gleich zur liste
    2. hs=ds_list_create() // erstellt eine liste hs
    3. if (pl1.score>0) ds_list_add(hs,pl1.score) // wenn der pl1.score größer als 0 ist wird er in die liste hinzugefügt
    4. if (pl2.score>0) ds_list_add(hs,pl2.score) // und das gleiche mit pl2
    5. if (pl3.score>0) ds_list_add(hs,pl3.score) // und pl3, ...
    6. ds_list_sort(hs,false) //sortiert die liste hs absteigend, wenn su sie aufsteigend haben willst, dann true statt false
    7. draw_text(x,y,ds_list_write(hs)) // Zeichnet einen text an der position x,y und mit dem text von der liste


    Wie gesagt, es soll dich nur ein bisschen inspirieren!
    Ich habe es nicht ausprobiert! :D

    EDIT: Schon wieder zu langsam!
  • Benutzer online 1

    1 Besucher