Random - Problem + If - Problem + Draw - Problem [?]

  • GM 8

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

  • Random - Problem + If - Problem + Draw - Problem [?]

    Hallo nochmal,
    ich hab den GM jetzt ein halbes Jahr weg gelegt und bei mir klappt nichts mehr. -_-


    Ich wollte bisschen Latein lernen und wollte mir zufällig Wörter + Übersetzung drawn lassen, dachte ich mir so.

    Wieso funktioniert folgendes Script nicht :' ich wette ich mache wieder irgendeinen total dummen fehler -.-
    Key_press:

    GML-Quellcode

    1. wort=random(10)
    2. if wort=1
    3. {
    4. text1='qui - que - quod'
    5. text2='der - die - das'
    6. }
    7. if wort=2
    8. {
    9. text1='cuius - cuius - cuius'
    10. text2='dessen - deren - dessen'
    11. }
    12. if wort=3
    13. {
    14. text1='qui - que - quod'
    15. text2='der - die - das'
    16. }
    Alles anzeigen


    Im Draw-Event lasse ich dann text1 und text2 drawn -_-

    Im Debug-Mode jedoch merke ich das zwar die Variable Wort Zufällig ist aber sich text1 & text2 nicht ändern.
    Ich hoffe das ganze ist jetzt nicht so ein Fail wie meine letze :S

    Greez. Lucke.
    @7rust-dev
  • Kann daran nicht wirklich einen fehler erkennnen. Außer das random(10) dir ja zufallszahlen von 0 - 9 zurückgeben und du aber nur 1-3 hast und vllt. einfach deine Zahlen nicht drankommen.
    Falls der Code nur ein Ausschnitt sei, hat das damit nichts zu tun. Aber zeig mal dein Draw-Event!

    MfG
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • Zur random-Problematik:

    Rodrog schrieb:

    GML-Quellcode

    1. wort=round(random(10));
    Davon würde ich abraten. Benutz lieber das von Chris987 genannte irandom oder das von henrik1235 genannte floor(random(...)).
    Das Problem:
    Bei round(random(10) sind 11 verschiedene Ergebnisse von 0 bis 10 möglich, bei floor sind nur 10 Ergebnisse (von 0 bis 9) möglich. Das scheint auf den ersten Blick relativ belanglos zu sein, da du ja dementsprechend eine größere oder kleinere Zahl in die random-Klammern schreiben kannst, ist es aber nicht.
    round benachteiligt die 0 und die 10 in ihrer Wahrscheinlichkeit. Die beiden Zahlen werden nur mit einer je halb so großen Wahrscheinlichkeit wie andere Zahlen gewählt.
    Der Grund ist recht einfach:
    - random(10) erzeugt eine Zufallszahl zwischen 0 und 9.999999.
    - round rundet auf oder ab, je nachdem welche Zufallszahl herausgekommen ist:
    0 - 0.5 -> 0
    0.5 - 1.5 -> 1
    ...
    8.5 - 9.5 -> 9
    9.5 - 10 -> 10
    Der Abstand zwischen 0 und 0.5 bzw. 9.5 und 10 ist nur je halb so groß wie der Abstand zwischen den anderen Zahlen. Deshalb ist die Wahrscheinlichkeit, dass eine Zufallszahl in diesen Bereich fällt auch nur halb so groß.
    Aber das nur zur Erläuterung. Wenn du eine ganze Zufallszahl zwischen 0 und 10 (jeweils inklusive) haben willst, benutze irandom(10) oder floor(random(11)).

    Zur if-Abfrage:
    Für jede Vokabel eine eigene if-Abfrage zu machen erscheint mir etwas umständlich.
    Ich würde einmalig (zB. im Create Event des Objekts) zwei Arrays (oder ein zweidimensionales Array) anlegen und danach später nur per Zufallszahl einen Index in diesen Arrays auswählen.

    Create Event:

    GML-Quellcode

    1. text[0,0]='qui - que - quod'
    2. text[0,1]='der - die - das'
    3. text[1,0]='cuius - cuius - cuius'
    4. text[1,1]='dessen - deren - dessen'
    5. text[2,0]='qui - que - quod'
    6. text[2,1]='der - die - das'


    Key-Press:

    GML-Quellcode

    1. index = floor(random(3));
    2. text1=text[index,0];
    3. text2=text[index,1];


    Noch schöner wäre es vermutlich, die Vokabeln abwechselnd latein-deutsch in eine normale Textdatei zu schreiben und sie vom Programm einlesen zu lassen. Aber darauf gehe ich nur ein, wenn es wirklich gewünscht wird.
    Einige meiner Spiele: