Ein Element aus einer "Menge" entfernen....?

  • GM 8

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

  • Ein Element aus einer "Menge" entfernen....?

    Guten Morgen, allerseits,

    da gibt es wieder ein Problem, das ich nicht lösen kann, trotz 6tägiger Versuche. Aber vielleicht kann mir hier ja jemand helfen:

    Da sind 5 Boxen, die jeweils per Zufall eine Farbe zugewiesen bekommen sollen.
    Der Farbtopf:

    GML-Quellcode

    1. color = chose(c_red,c_yellow,c_green,c_blue,c_fuchsia);

    Das Problem: jede Farbe darf nur einmal ausgewählt werden. Wenn also die erste Box die Farbe per Zufall blau bekommt, dürfen die anderen 4 verbliebenen Boxen nicht mehr blau werden. So lange, bis jede der 5 Boxen eine der 5 Farben hat.

    Sozusagen muß die Farbe Blau aus der Menge "color" entfernt werden. Bloß: wie macht man das? Wenn ich das mit if/switch/case versuchen würde, dann müsste ich seitenlange Abfragen schreiben bei der Auswahl. Es muß doch auch kürzer gehen - oder nicht? Oder gehe ich das Problem vielleicht falsch an?

    Bin für jeden Hinweis dankbar,
    Gruß Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Versuch mal das:

    GML-Quellcode

    1. if (!variable_global_exists("farbengeladen"))
    2. {
    3. global.farbengeladen=false; //Am besten nach einen Raumwechsel wieder auf false setzten
    4. }
    5. if (!global.farbengeladen)
    6. {
    7. global.farbencount=5; //Anzahl Farben
    8. //Farben in einen Array schreiben
    9. global.farben[0]=c_red;
    10. global.farben[1]=c_yellow;
    11. global.farben[2]=c_green;
    12. global.farben[3]c_blue;
    13. global.farben[4]c_fuchsia;
    14. global.farbengeladen=true; //Farben wurden geladen
    15. }
    16. //Der Index für den Array rausfinden (ist eigentlich auch das selbe wie bei choose)
    17. var mycolorindex;
    18. do
    19. {
    20. mycolorindex=floor(random(global.farbencount));
    21. }
    22. until(global.farben[mycolorindex]!=-1) //Farbe vorhanden?
    23. color=global.farben[mycolorindex];
    24. global.farben[mycolorindex]=-1; //Farbe löschen
    Alles anzeigen
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Erst mal herzlichen Dank für die Mühe, dir Du Dir gegeben hast! Deine Routine liefert die gewünschten Farben. Leider aber führt die letzte Zeile zu einem Programmabsturz...
    Lasse ich die letzte Zeile jedoch weg, werden alle Boxen tiefschwarz "geblendet"... ;)

    Könntest Du Dir die letzte Zeile evtl. bitte noch mal anschauen?
    Danke,
    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Geht evtl. noch einfacher, aber spontan würden mir da Listen einfallen:

    GML-Quellcode

    1. //Einmalig um den Farbtopf zu füllen:
    2. farbtopf=ds_list_create()
    3. ds_list_add(farbtopf,c_red)
    4. ds_list_add(farbtopf,c_yellow)
    5. ds_list_add(farbtopf,c_green)
    6. ds_list_add(farbtopf,c_blue)
    7. ds_list_add(farbtopf,c_fuchsia)
    8. //Jedesmal wenn du eine Farbe aus dem Farbtopf nehmen willst:
    9. farbwahl=floor(random(ds_list_size(farbtopf))) //Zufällige Zahl zwischen 0 und der Anzahl von Farben abgerundet
    10. color = ds_list_find_value(farbtopf,farbwahl) //Hier wird die zufällige ausgewählte Farbe in "color" reingespeichert
    11. ds_list_delete(farbtopf,farbwahl) //Und dann aus dem Farbtopf entfernt
    Alles anzeigen
  • Whow, klasse, DANKE! Das ist ja noch besser, vor allem, weil es geht! :-))
    Wußte bis dato nicht, daß man tatsächlich aus einer Liste ein Element entfernen kann.

    Würdest Du mir noch die Abbruchbedingung nennen, wenn der "farbtopf" leer ist? "farbtopf=-1" vielleicht?

    thx,
    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Ich denke mal was du suchst ist folgender Befehl:

    ds_list_empty(id) Returns whether the list is empty. This is the same as testing whether the size is 0.
    bei id muss farbtopf hin (da am anfang farbtopf = ds_list_create(); steht).

    Mfg.,
    Mokuyobi
    木曜日 (Mokuyōbi)