Random richtig einsetzten?
- Jadeclon
- Geschlossen
- Erledigt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Ich hab es mal so getestet und es kam nicht einmal vor, dass rnd und rnd2 gleich waren
if(strcmp("/test", cmdtext, true, 10) == 0)
{
if(IsPlayerConnected(playerid))
{
new rnd = random(50)+1,
rnd2= random(50)+1,
rndstring[30];
if(rnd2 == rnd)
{
rnd2=random(50)+1;
}
else
{
format(rndstring, sizeof(rndstring), "RND: %d ------ RND2: %d", rnd, rnd2);
SendClientMessage(playerid, Weiss, rndstring);
}
}
return 1;
} -
Das hat ich erst auch im Sinn, aber es ist nicht 100% sicher das die Zahlen nicht gleich werden.
-
new rnd = random(50)+1;
new rnd2 = random(50)+1;
if(rnd == rnd2)
{
rnd2 = ((rnd2 + random(49)) % 50) + 1;
} -
-
@Jeffry könntest du das bitte erklären?
Klar.
Wenn die beiden gleich sind, sagen wir, beide sind 14, dann wird auf die zweite Zahl gerechnet:
14 + random(49)
Das heißt es kommt eine Zahl zwischen 14 und 62 raus (0-48 möglich bei random).
Die Zahl wird dann Modulo 50 genommen (Teilen mit Rest, Modulo gibt den Rest aus).
Somit kommt eine Zahl von 14 bis 49 oder 0 bis 12 raus.
Anschließend wird die Zahl noch +1 genommen, dann haben wir eine Zahl von 15 bis 50 oder von 1 bis 13. Also jede mögliche Zahl von 1 bis 50, außer der 14.Das kannst du mit jeder Zahl so durchspielen, klappt immer.
-
Hab jetzt diese Funktion erstellt, funktioniert auch alles gut soweit, nur wie sortiere ich die Zahlen jetzt aufwärts?
Code
Alles anzeigenif(strcmp(cmd, "/random", true) == 0) { new rnd = random(49)+1; new rnd2 = random(49)+1; if(rnd2 == rnd) { rnd2 = ((rnd2 + random(48)) % 50) + 1; } new rnd3 = random(49)+1; if(rnd3 == rnd || rnd3 == rnd2) { rnd3 = ((rnd3 + random(48)) % 50) + 1; } new rnd4 = random(49)+1; if(rnd4 == rnd || rnd4 == rnd2 || rnd4 == rnd3) { rnd4 = ((rnd4 + random(48)) % 50) + 1; } new rnd5 = random(49)+1; if(rnd5 == rnd || rnd5 == rnd2 || rnd5 == rnd3 || rnd5 == rnd4) { rnd5 = ((rnd5 + random(48)) % 50) + 1; } new rnd6 = random(49)+1; if(rnd6 == rnd || rnd6 == rnd2 || rnd6 == rnd3 || rnd6 == rnd4 || rnd6 == rnd5) { rnd6 = ((rnd6 + random(48)) % 50) + 1; } new rnd7 = random(49)+1; if(rnd7 == rnd || rnd7 == rnd2 || rnd7 == rnd3 || rnd7 == rnd4 || rnd7 == rnd5 || rnd7 == rnd6) { rnd7 = ((rnd7 + random(48)) % 50) + 1; } new rndarray[7] = {0, 0, 0, 0, 0, 0, 0}; rndarray[0] = rnd; rndarray[1] = rnd2; rndarray[2] = rnd3; rndarray[3] = rnd4; rndarray[4] = rnd5; rndarray[5] = rnd6; rndarray[6] = rnd7; format(string, sizeof(string), "Lottozahlen: %d | %d | %d | %d | %d | %d | Superzahl: %d",rndarray[0],rndarray[1],rndarray[2],rndarray[3],rndarray[4],rndarray[5],rndarray[6]); SendClientMessage(playerid,F_White,string); return 1; }
-
Die Methode klappt nur bei zwei Zahlen, da ja nur die erste Zahl ausgeschlossen wird.
Für das was du vor hast musst du entweder eine Schleife nehmen, die sich solange wiederholt, bis die Zahl keiner der vorherigen Zahlen entspricht, oder einen anderen speziellen Algorithmus, da ich grade nicht am PC bin, kann ich dir den aktuell nicht schreiben.
Zur Sortierung kannst du diese Funktion nutzen: http://forum.sa-mp.com/showpost.php?p=1085586&postcount=1737
-
Funktioniert nun einwandfrei danke
Hab die Funkion RyDeR benutzt -
breadfish.de
Hat das Thema geschlossen.