Emulere en ældre MS RNG
HejJeg er ved at forsøge at lave et program der emulerer det gamle Microsoft FreeCell, og jeg har et problem med algoritmen der emulerer den "gamle" MS C RNG. Dvs at jeg ønsker en algoritme der kan spytte de samme 52 kort ud i den samme rækkefølge som i originalen med spilnummeret som seed.
Algoritmen er kendt, og problemet er beskrevet grundigt her:
http://rosettacode.org/wiki/Deal_cards_for_FreeCell
Der er 43 kode-eksempler, men ingen VB NET, og jeg kan simpelthen ikke få det til at spille, selvom jeg er rimelig kendt med både Java og C#.
Min kode ser sådan ud (meget kort og i omvendt rækkefølge,men det burde være korrekt).
Public Sub TestRNG()
Dim pSeed As Single = 1
Dim Cards(51) As Integer
For i = 0 To 51
Cards(i) = i
Next i
Dim pIndex As Integer
Dim tmp As Integer
For i = 51 To 0 Step -1
pSeed = ((214013 * pSeed + 2531011) And Integer.MaxValue)
pIndex = (pSeed >> 16) Mod (i + 1)
tmp = Cards(pIndex)
Cards(pIndex) = Cards(i)
Cards(i) = tmp
Next i
End Sub
Det første kort er korrekt ved et hvilket som helst spilnummer, men de efterfølgende bliver forkerte, så jeg tror måske fejlen ligger i
pSeed= linien.