Zufallswert ist nicht wirklich Zufall

  • GM 8

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

  • Zufallswert ist nicht wirklich Zufall

    Hallo zusammen,

    ich habe mal eine Frage an euch,

    Ich habe eine Bilddatei mit 8 verschiedenen Bildern (Subimages).

    Diese möchte ich per zufall anzeigen lassen. Einige symbole sollten immer seltener kommen und manche dafür öfter.
    Dies habe ich so gelöst

    GML-Quellcode

    1. sw1= floor(random(100))
    2. if sw1=1 or sw1=2 or sw1=3 or sw1=4 or sw1=5 or sw1=6 or sw1=7 or sw1=8 or sw1=9 or sw1=10 or sw1=11
    3. or sw1=51 or sw1=52 or sw1=53 or sw1=54 or sw1=55 or sw1=56 or sw1=57or sw1=58 or sw1=59 or sw1=60
    4. {shd_symbols.image_index=0}
    5. if sw1=12 or sw1=13 or sw1=14 or sw1=15 or sw1=16 or sw1=17 or sw1=18 or sw1=19
    6. or sw1=61 or sw1=62 or sw1=63 or sw1=64 or sw1=65 or sw1=66 or sw1=67 or sw1=68
    7. {shd_symbols.image_index=1}
    8. if sw1=20 or sw1=21 or sw1=22 or sw1=23 or sw1=24 or sw1=25
    9. or sw1=69 or sw1=70 or sw1=71 or sw1=72 or sw1=73 or sw1=74
    10. {shd_symbols.image_index=2}
    11. if sw1=26 or sw1=27 or sw1=28 or sw1=29 or sw1=30 or sw1=31 or sw1=32 or sw1=33
    12. or sw1=75 or sw1=76 or sw1=77 or sw1=78 or sw1=79 or sw1=89 or sw1=90 or sw1=91
    13. {shd_symbols.image_index=3}
    14. if sw1=34 or sw1=35 or sw1=36 or sw1=37 or sw1=38 or sw1=39 or sw1=40 or sw1=41
    15. or sw1=81 or sw1=82 or sw1=83 or sw1=84 or sw1=85 or sw1=86 or sw1=87 or sw1=88
    16. {shd_symbols.image_index=4}
    17. if sw1=42 or sw1=43 or sw1=44 or sw1=45 or sw1=46
    18. or sw1=92 or sw1=93 or sw1=94 or sw1=95 or sw1=96
    19. {shd_symbols.image_index=6}
    20. if sw1=47 or sw1=48 or sw1=49 or sw1=97 or sw1=98 or sw1=99
    21. {shd_symbols.image_index=7}
    22. if sw1=50
    23. {shd_symbols.image_index=5}
    Alles anzeigen


    Das klappt auch soweit, und er macht alles schön per Zufall. ABER!!

    wie ihr sehen könnt, ist die shd_symbols.image_index=5 nur mit einer Zahl vertreten (50).

    Wenn diese jedoch erscheint, erscheint diese beim nächsten mal zu 99% wieder und meistens sogar noch ein drittes mal.
    Und das ist für mich nicht wirklich zufall.
    Wenn er ab und an mal die gleiche Zahl zweimal hintereinander auswählt, wäre es ja ok, nur er macht es jedesmal.
    und das bei einer Auswahl von 100 Zahlen.

    Kann man den Code so verändern, das er IMMER eine andere Zahl auswählt als die vorherige??

    Vielen Dank

    Groni
  • Ich kann dein Zufallsproblem zwar nicht bestätigen, aber du kannst den aktuellen Wert in einer Variable speichern und im nächsten Step (nach dem Festlegen des nächsten Zufallswerts) checken, ob wieder die gleiche Zahl auftritt. In dem Fall wiederholst du den Prozess solange, bis ein anderer Wert rauskommt (while-Schleife).

    Noch was anderes. Das sieht sehr umständlich aus:

    GML-Quellcode

    1. if sw1=1 or sw1=2 or sw1=3 or sw1=4 or sw1=5 or sw1=6 or sw1=7 or sw1=8 or sw1=9 or sw1=10 or sw1=11

    So wär's doch übersichtlicher:

    GML-Quellcode

    1. if (sw1 >= 1 && sw1 <= 11)
  • Genauso wie du jeder anderen Variable einen Wert zuweist. Also wenn du sie z.B. temp_sw1 nennen willst, dann führ am Ende deines Codes folgende Zeile aus:

    GML-Quellcode

    1. temp_sw1 = sw1;

    Und die erste Zeile ersetzt du durch:

    GML-Quellcode

    1. while(temp_sw1 = sw1) {sw1 = floor(random(100));}

    Vor dem ersten Durchlauf muss temp_sw1 natürlich deklariert werden. Dazu genügt es, im Create Event folgende Zeile einzufügen:

    GML-Quellcode

    1. temp_sw1 = 0;

    Hoffe, das klappt.
  • Das System würde ich aber mal grundsätzlich überdenken. Wenn ich das richtig sehe, dann sind die Wahrscheinlichkeiten bei dir

    GML-Quellcode

    1. image_index P
    2. 0 21/100
    3. 1 16/100
    4. 2 12/100
    5. 3 16/100
    6. 4 16/100
    7. 5 1 /100
    8. 6 10/100
    9. 7 6 /100

    Fällt dir was auf? Mit einer Wahrscheinlichkeit von 2/100 passiert nämlich gar nix, was der Grund für dein Problem sein könnte. Und sieh zu, dass die ganzen "or" da rauskommen :)

    EDIT: etwas ähnliches hatte ich auch mal gemacht, hab's mal angepasst:

    GML-Quellcode

    1. // create event - das sind die Warscheinlichkeiten wie bei dir auch
    2. P[0] = 100 - 21;
    3. P[1] = P[0] - 16;
    4. P[2] = P[1] - 12;
    5. P[3] = P[2] - 16;
    6. P[4] = P[3] - 16;
    7. P[5] = P[4] - 1;
    8. P[6] = P[5] - 10;
    9. P[7] = P[6] - 6;
    10. // Die eigentliche Funktion, wo auch immer die hinsoll
    11. sw1 = floor(random(100));
    12. i = 0;
    13. while (i < 8) {
    14. if (sw1 >= P[i]) { shd_symbols.image_index = i; break; }
    15. i += 1;
    16. }
    Alles anzeigen

    Das hat auch den Vorteil, das man leichter hier und da mal die Wahrscheinlichkeiten ändern kann, ohne großartig im Code rumzuschreiben.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von p-head ()

  • Also irgendwie klappt das alles nicht, oder ich mache grundsätzlich was falsh :(

    Zur genauen Erklärung meiner GM Datei:
    Wie ihr ja wisst, baue ich eine Slot Machine. Diese ist auch schon sogut wie fertig. Nur die Wahrscheinlichkeiten wollte ich mir bis zum Schluss aufheben.
    Der Slot besteht aus 5 Walzen mit jeweils 3 Bildern. Um den Dreheffekt hinzubekommen, benutze ich Timeline Objekte.
    Mit dieser Methode kann ich die Drehung optimal aussehen lassen, da die Walzen langsam schneller werden, und am Ende einen Stoppeffekt haben. Das zu scripten wäre für mich als Anfänger ziemlich heftig. Aber ist ja auch kein Problem, denn es klappt ja auch wunderbar. Die Symbole wechseln auch per Zufall, alles gut. Mein einziges Problem ist halt, dass der Zufallswert sich oft wiederholt, also z.B. die seltene "7" mehrmals hintereinander erscheint.

    Mit eueren Lösungen, welche ich beide getestet habe, macht er dies nachwievor. Teilweise habe ich sogar die "7" jetzt 5 mal hintereinander.

    Ich füge diesen Code in das Timeline Object mit ein. Funktioniert so, das ich 30 steps habe, in der die Symbole nach unten bewegt werden. Läuft ein Objekt unten aus dem Bild, wird das Symbol gewechselt, und wird oben wieder angesetzt. Klappt auch, aber dieser Zufallswert will nicht klappen. Auch die Wahrscheinlichkeiten, die so wie P-Head es gemacht hat, zwar super übersichtlich sind, und auch mal leicht zu ändern sind, aber auch zu oft die seltenen Symbole wiederholen lässt. Ich hatte in 100 Spins, 46 mal die "7" (also Image_index=5), obwohl diese 1 aus 100 ist :(

    Ich habe keine Ahnung was und ob ich was falsch mache......