Problem mit while und if -Verschachtelung

    Problem mit while und if -Verschachtelung

    Also ich habe ein Problem mit folgendem Code:

    Quellcode

    1. ​var spawn_anzahl = 0;
    2. var pos1x = 32;
    3. var pos1y = 448;
    4. var pos2x = 32;
    5. var pos2y = 512;
    6. var pos3x = 32;
    7. var pos3y = 574;
    8. var pos4x = 32;
    9. var pos4y = 636;
    10. if random(3) >= 1
    11. {
    12. spawn_anzahl = random(1)
    13. }
    14. {
    15. while(spawn_anzahl > 0)
    16. {
    17. if place_free(pos1x,pos1y)
    18. {
    19. instance_create(pos1x,pos1y,(choose(obj_red,obj_green,obj_blue)))
    20. spawn_anzahl = spawn_anzahl - 1
    21. }
    22. else if place_free(pos2x,pos2y)
    23. {
    24. instance_create(pos2x,pos2y,(choose(obj_red,obj_green,obj_blue)))
    25. spawn_anzahl = spawn_anzahl - 1
    26. }
    27. else if place_free(pos3x,pos3y)
    28. {
    29. instance_create(pos3x,pos3y,(choose(obj_red,obj_green,obj_blue)))
    30. spawn_anzahl = spawn_anzahl - 1
    31. }
    32. else if place_free(pos4x,pos4y)
    33. {
    34. instance_create(pos4x,pos4y,(choose(obj_red,obj_green,obj_blue)))
    35. spawn_anzahl = spawn_anzahl - 1
    36. }
    37. else
    38. {
    39. spawn_anzahl = 0
    40. }
    41. }
    42. }


    Dieser Code soll eigentlich aus einer Auswahl von 3 Objekten jeweils 1 oder vertikal vor sich spawnen zu lassen und im Fall von 2en das eine dahinter. Problem nun ist die While Schleife wird nur einmal ausgeführt also am Ende hat man immer (auch im falle von random(100)) nur ein Objekt ganz vorne. Nie zwei oder 3-100(im falle von random(100)).
    Zudem ist dieser Code im Create Event da dieser Code nur einmal zu Beginn des Spielstarts ausgeführt werden soll.
    Ich sitze jetzt seid gestern an diesem Problem aber ich raff einfach nicht wieso es nicht funktioniert. :----S

    mczebo schrieb:

    Also ich habe ein Problem mit folgendem Code:
    Dieser Code soll eigentlich aus einer Auswahl von 3 Objekten jeweils 1 oder vertikal vor sich spawnen zu lassen und im Fall von 2en das eine dahinter. Problem nun ist die While Schleife wird nur einmal ausgeführt also am Ende hat man immer (auch im falle von random(100)) nur ein Objekt ganz vorne. Nie zwei oder 3-100(im falle von random(100)).
    Zudem ist dieser Code im Create Event da dieser Code nur einmal zu Beginn des Spielstarts ausgeführt werden soll.
    Ich sitze jetzt seid gestern an diesem Problem aber ich raff einfach nicht wieso es nicht funktioniert. :----S


    Es scheint mir das wenn du (an 4 Orten) spawn_anzahl = spawn_anzahl - 1 schreibts, dass spawn_anzahl gleich sofort unter der bedingung > 0 ist.
    spawn_anzahl = random(1) wird zwischen 0 und 0.99... sein.
    Wenn einer der 4 if_statements zutrifft wird sie garantiert unter 0 sein.
    Es scheint mir das wenn du (an 4 Orten) spawn_anzahl = spawn_anzahl - 1 schreibts, dass spawn_anzahl gleich sofort unter der bedingung > 0 ist.spawn_anzahl = random(1) wird zwischen 0 und 0.99... sein.Wenn einer der 4 if_statements zutrifft wird sie garantiert unter 0 sein.


    Das Problem ist das trifft alles auch bei random(100) zu und bei einer festen Zahl für spawn_anzahl. Der Code wird immer nur einmal ausgeführt und ich habe schon alles ausprobiert von weglassen dreier else if
    zeilen und ersetzen von random zu festem wert.

    MfG
    Hast du auch mal randomize() benutzt zu beginn des Spiels? Sonst nutzt der GM jedes mal den selben Randomseed....
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:

    Rhazul schrieb:

    Hast du auch mal randomize() benutzt zu beginn des Spiels? Sonst nutzt der GM jedes mal den selben Randomseed....


    Ich habe das ganze schon mit einem festen Wert für spawn_anzahl probiert wie z.B. spawn_anzahl = 6 dies funktionierte jedoch auch nicht.
    Zu randomize() wird mir immer ein Programmfehler angezeigt bei randomize -> (4) <- im Code und bei randomize alleine vor Spielstart.
    Das kann nicht sein. Du musst randomize() vorher aufrufen (ohne Parameter). Ansonsten liefern die random Funktionen jedes mal die selben zahlen.
    Welche Version von GM benutzt du?
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:

    Rhazul schrieb:

    Das kann nicht sein. Du musst randomize() vorher aufrufen (ohne Parameter). Ansonsten liefern die random Funktionen jedes mal die selben zahlen.
    Welche Version von GM benutzt du?


    wenn ich randomize() benutze kann ich doch gar keinen grenzwert eingeben also in meinem falle will ich ja eine 0 - 2 haben damit maximal 3 objekte spawnen.
    Zudem funktioniert randomize() auch ohne parameter nicht da das spiel jetzt nicht mehr startet.

    Rhazul schrieb:

    Du sollst nicht random() durch randomize() ersetzen sondern zusätzlich vorher einmal aufrufen.
    docs.yoyogames.com/source/dadi… functions/randomize.html


    Also ich habe jetzt zwei dinge probiert:
    1. randomize()
    2. random_set_seed(randomize())
    beides obendrüber geschrieben und für den ersten teil wo bestimmt wird ob überhaupt spawn_anzahl verändert wird hilft er.
    Für den zweiten teil wo er dann die anzahl erhalten soll ändert sich nix. die anzahl bleibt immer bei 1.
    randomize gibt keinen Wert zurück sondern setzt den Seed intern. du kannst das also nicht so machen.
    Nehm den Code mal wieder raus. In deinem ersten Raum erstellst du dann ein Objekt, dem gibst du das event "Game Start"
    darin rufst du dann nur einmal

    GML-Quellcode

    1. randomize();

    auf. Danach kannst du im Spiel ganz normal die random Funktionen nutzen.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:

    Rhazul schrieb:

    randomize gibt keinen Wert zurück sondern setzt den Seed intern. du kannst das also nicht so machen.
    Nehm den Code mal wieder raus. In deinem ersten Raum erstellst du dann ein Objekt, dem gibst du das event "Game Start"
    darin rufst du dann nur einmal

    GML-Quellcode

    1. randomize();

    auf. Danach kannst du im Spiel ganz normal die random Funktionen nutzen.




    wird immernoch nur einmal ausgeführt. das erste if wo ausgewertet wird ob überhaupt was passiert funktioniert ja aber das zweiten nicht wo entschieden wird wie viele spawnen. deshalb glaube ich nicht dass es überhaupt am random liegt sondern eher an der schleife oder dem create event.
    Lasse dir doch mal in jeder Bedingung eine Nachricht ausgeben. Dann kannst du den Vorgang am besten nachvollziehen.
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe