Hei Leute,
ich hab ein kleines Problem mit der Funktion der Zufallsvariablen.
Ich habe 5 Variablen und möchte jeder eine Zahl zwischen 1 und 5 zuordnen, was zunächst noch kein Problem darstellt, da es leicht mit Change Variable Random 1*5 zu bewerkstelligen wäre.
Das eigentliche Problem ist, dass wenn z.b. für Variable 1 der Wert 3 eingespeist wird, dieser Wert nicht mehr für die anderen Variablen verwendet werden soll. Das Ergebnis soll so aussehen, das jede der 5 Variablen einen eigenen Wert erhält und kein Wert doppelt vorkommt.
Kann mir vielleicht jemand helfen?
Lass es 5 mal (Für jede Var. 1 mal) Durchlaufen und frage ab der 2. ab ob diese schon verwendet wird.
Wenn Ja soll es nochmal durchlaufen werden... obwohl... dann könnte es immer noch die selbe sein... gibt es einen Befehl das etwas so lange durchlaufen wird bis ein bestimmter Wert erreicht ist?
Also ich habs mal versucht in den Maker zu schreiben, bei mir sieht's so aus:
<>Variable Oper: [0001ounter] Set, 1
<>Loop
<>Branch if Var [0001ounter] is 5 Greater
<>Break Loop
<>
: End
<>Variable Oper: [0002:Position] Set, Rnd [1-5]
<>Variable Oper: [0002:Position] +, Var [0004]'s Value
<>Variable Oper: [0003:Tmp] Set, Var [V[0002]] Value
Branch if Var [0003:Tmp] is 0
<>Variable Oper: [V[0002]] Set, Var [0001]'s Value
<>Variable Oper: [0001ounter] + , 1
<>
: End
<>
: End Loop
<>
Wobei die Variablen folgendermaßen aussehen:
0001ounter
0002:Position
0003:Tmp
0004:Ziel01
0005:Ziel02
0006:Ziel03
0007:Ziel04
0008:Ziel05
Ich bin mir nicht genau sicher, wo ich einen Fehler eingebaut hab, vllt sieht ihn jemand und kann mir helfen.
Diese Zeile ...
müsste in deinem Fall so lauten ...
Durch sie wird nämlich die Position der Zielvariable bestimmt. Bei dir haben die Variablen die IDs 4-8, also muss auf den Zufallswert noch eine 3 draufaddiert werden.
Die obere Hälfte des Bildes ist der von Kelven und MarleyJam gepostete Code. Es gibt die fünf festgelegten Zahlen, die nacheinander verwendet werden (Loop von 1 bis 5). Zwei gleiche Zahlen kann es also nicht geben.
Die Zufallsfunktion (Random 1 bis 5) gibt hierbei die Variablenposition an.
Problem: Man darf keine Position zweimal verwenden.
Lösung: Gucken, ob die Position schon beschrieben wurde (nicht null) und immer wieder eine neue Position ausprobieren.
Verbrauchtes "Material": 8 Variablen
Die untere Hälfte des Bildes ist eine alternativ Methode. Es gibt die fünf festgelegten Variablenpositionen, die nacheinander verwendet werden (Loop von 1 bis 5). Es wird also im Gegensatz zu oben nie versucht, zweimal die geiche Position zu füllen.
Die Zufallsfunktion (Random 1 bis 5) gibt hierbei die Zahl an, die reingeschrieben wird.
Problem: Man darf keine Zahl zweimal verwenden.
Lösung: Gucken, ob die Zahl schon verwendet wurde (bei anderen Positionen oder Switchs verwenden).
Verbrauchtes "Material": 7 Variablen, 6 Switchs
Und der Code dazu:
* die dritte Funktion oben bei Change Variable, wie schon von Kelven angesprochen
Ein Loop ist dazu da, eine bestimmte Aktion solange zu durchlaufen, bis sie den gewünschten Effekt erzielt hat.
Du beginnst das Event mit einem Loop inden du das hineinschreibst, was du solange wiederholen möchtest bis es eine bestimmte Bedingung erfüllt.
Beispiel:
Du möchtest, das eine Variable solange um 1 erweitert wird, bis der Wert 5 überschritten wird. Das sieht dann im Maker so aus:
Somit wird der Loop solange durchlaufen, bis schlussendlich der Wert 5 erreicht bzw. überschritten ist.
Als Alternative Form der Schleife gibt es auch die Möglichkeit
immer wieder zu einer Sprungmarke, einem Label zu springen.
So lassen sich auch bestimmte Codeabschnitte wiederholen.
Ich bevorzuge diese, da sie in meinen Augen besser kontrollierbar
ist.
Der Label Befehl ist auf Seite 3 der Eventbefehle, rechte Spalte, 6ter befehl von oben. Damit kann man eine Sprungmarke setzen. Der Befehl um zu so einer Marke zu springen, befindet sich direkt unter dem Befehl zum setzen.
Als Alternative Form der Schleife gibt es auch die Möglichkeit
immer wieder zu einer Sprungmarke, einem Label zu springen.
So lassen sich auch bestimmte Codeabschnitte wiederholen.
Ich bevorzuge diese, da sie in meinen Augen besser kontrollierbar
ist.
Der Label Befehl ist auf Seite 3 der Eventbefehle, rechte Spalte, 6ter befehl von oben. Damit kann man eine Sprungmarke setzen. Der Befehl um zu so einer Marke zu springen, befindet sich direkt unter dem Befehl zum setzen.
...
Das ist Ansichtssache; Loops/Cycles sind imo leichter zu verstehen und zu kontrollieren und auch optisch sichtbar. Mag sein, dass das daher kommt, dass ich GOTO-Hasser bin und dieses Schlüsselwort in meinen Programmen niemals verwenden würde. Das einzige, was an Loops wirklich ein Nachteil ist, ist der, dass bei Verschachtelungen ein Problem mit Break Loop auftritt (Bug).
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!
Somit kann man ja Dinge die Zeitlich zufällig hintereinander eintreten sollen (Wie Donner + Blitz) ja viel einfacher gestalten... ich hab immer 3 Eventseiten gemacht xD...