• Herzlich Willkommen!

    Nach der Schließung von inDiablo.de wurden die Inhalte und eure Accounts in dieses Forum konvertiert. Ihr könnt euch hier mit eurem alten Account weiterhin einloggen, müsst euch dafür allerdings über die "Passwort vergessen" Funktion ein neues Passwort setzen lassen.

    Solltet ihr keinen Zugriff mehr auf die mit eurem Account verknüpfte Emailadresse haben, so könnt ihr euch unter Angabe eures Accountnamens, eurer alten Emailadresse sowie eurer gewünschten neuen Emailadresse an einen Administrator wenden.

zufalls-werte wirklich zufällig?

Breath of the Dying

Ist öfter hier
Registriert
25 April 2011
Beiträge
629
merkt sich das spiel(oder der server) vorher errechnete schadenswerte und versucht den mittelwert mit extremen (1 oder 15k dmg Z.B.) zu erreichen oder kann man sich das vorstellen, dass immer die computerzeit als basis für jegliche Zufallszahl dient(oder eine andere "zufällige" Zahl wie temperatur der CPU or w/e) oder glaubt ihr ernsthaft, dass (im bnet) ein echter rng da steht der aus sternstrahlung zufallswerte ausspuckt?^^

sers :WD
 
Ähhh, is das ernst? Einen Zufallsgenerator kann sogar ich ohne Programmierkenntnisse schreiben! Oder was meinst du, das hat doch nichts mit bnet zu tun, is ja im Sp auch^^
 
im sp ist dein rechner der server und client

und mir gehts nich darum, dass man einen easy schreiben kann sondern wie ""einfach" der von d2 gestrickt is^^
 
Dieser Thread dürfte dich interessieren:
http://planetdiablo.eu/forum/strategie-archiv-105/d2-technisch-zufallszahlen-quellenwerte-uvm-388665/
 
Hier ist der Code, der eine Zufallszahl zwischen 0 und max-1 zurückgibt:
Code:
064CE4D0  /$ 53             PUSH EBX
064CE4D1  |. 56             PUSH ESI
[COLOR="Red"]064CE4D2  |. 8BF2           MOV ESI,EDX                              ;  max[/COLOR]
064CE4D4  |. 57             PUSH EDI
064CE4D5  |. 85F6           TEST ESI,ESI
064CE4D7  |. 7F 06          JG SHORT D2Game.064CE4DF                 ;  check if max!=0
064CE4D9  |. 5F             POP EDI
064CE4DA  |. 5E             POP ESI
064CE4DB  |. 33C0           XOR EAX,EAX
064CE4DD  |. 5B             POP EBX
064CE4DE  |. C3             RETN
[COLOR="Red"]064CE4DF  |> 8B01           MOV EAX,DWORD PTR DS:[ECX]               ;  get randseed
064CE4E1  |. BA C590C66A    MOV EDX,6AC690C5
064CE4E6  |. 8D7E FF        LEA EDI,DWORD PTR DS:[ESI-1]             ;  max-1
064CE4E9  |. 33DB           XOR EBX,EBX
064CE4EB  |. F7E2           MUL EDX                                  ;  a = randseed*6AC90C5
064CE4ED  |. 85FE           TEST ESI,EDI
064CE4EF  |. 74 16          JE SHORT D2Game.064CE507                 ;  check if max-1!=0
064CE4F1  |. 8B79 04        MOV EDI,DWORD PTR DS:[ECX+4]             ;  randseed2
064CE4F4  |. 03C7           ADD EAX,EDI                              ;  b = lowdword(a) + randseed2[/COLOR]
064CE4F6  |. 5F             POP EDI
[COLOR="Red"]064CE4F7  |. 13D3           ADC EDX,EBX                              ;  c = highdword(a) + carry
064CE4F9  |. 8901           MOV DWORD PTR DS:[ECX],EAX               ;  set new randseed
064CE4FB  |. 8951 04        MOV DWORD PTR DS:[ECX+4],EDX             ;  set new randseed2
064CE4FE  |. 33D2           XOR EDX,EDX
064CE500  |. F7F6           DIV ESI                                  ;  d = b / max[/COLOR]
064CE502  |. 5E             POP ESI
064CE503  |. 5B             POP EBX
[COLOR="Red"]064CE504  |. 8BC2           MOV EAX,EDX                              ;  randval (mod(b)?)[/COLOR]
064CE506  |. C3             RETN
064CE507  |> 8BF0           MOV ESI,EAX
064CE509  |. 8B41 04        MOV EAX,DWORD PTR DS:[ECX+4]
064CE50C  |. 03F0           ADD ESI,EAX
064CE50E  |. 8BC7           MOV EAX,EDI
064CE510  |. 13D3           ADC EDX,EBX
064CE512  |. 8931           MOV DWORD PTR DS:[ECX],ESI
064CE514  |. 23C6           AND EAX,ESI
064CE516  |. 5F             POP EDI
064CE517  |. 5E             POP ESI
064CE518  |. 8951 04        MOV DWORD PTR DS:[ECX+4],EDX
064CE51B  |. 5B             POP EBX
064CE51C  \. C3             RETN
Dies ist afaik der einzige Zufallszahlengenerator. Wie man sieht, wird der randseed jedesmal am Ende erneuert, was bedeutet, dass die Zufallszahlen von der jeweils vorherigen Zufallszahl abhängig sind.
 
Die Zahlen sind also nicht zufällig, sondern Pseudo-zufällig. Man kann beides in der Regel aber nicht unterscheiden. Ich gehe mal stark davon aus, dass der Code, auch wenn ich ihn mir nicht genau angeguckt habe, eine Normalverteilung generiert, das heißt der mittlere Wert ist auch wirklich der Mittelwert der Zufallsverteilung und jeder Wert ist gleichwahrscheinlich.
 
Zurück
Oben