08. december 2005 - 16:12Der er
12 kommentarer og 1 løsning
forklaring til Rnd() funktionen
Hej,
Jeg har lavet et lille Su Doku spil derhjemme, og kunne tænke mig at bruge en Rnd() funktion til at få random levels frem. Jeg har mine levels liggende i en dll fil, og det virker fint, men indtil videre bliver jeg nødt til at skrive ind selv hvad for en level det skal være. (Ved at trykke nyt spil, så popper en boks frem som spørger om et nummer, som jeg så trykker ind)
Det jeg kunne tænke mig var at vide lidt mere om Rnd() funktionen, om det skal være links eller forklaringer. Nu har jeg længe været i tvivl om hvordan man skal bruge Rnd() funktionen. Jeg har selv brugt den mange gange, men kun ved at kopiere og sætte ind. Så denne gang kunne jeg tænke mig at få en ordentlig forklaring på hvorfor hvad for nogle tal/variabler skal stå hvor. Er der nogen der kan hjælpe mig med dette, vil de få 100 lettjente points :-)
MSDN library giver aldrig grundige svar efter min mening.
kabbak > - Vil det sige at du skal bruge Randomize før du bruger Rnd() ? - MyValue = Int((6 * Rnd) + 1) ' 6 tallet gør at det er fra 1 til 6, eller har 1 tallet noget med det at gøre også? - Hvis du har fået - fx - 4 ved et "kast", er der så lige stor chance for at det kommer igen næste gang du kører det igennem? (i samme loop)
Randomize uses number to initialize the Rnd function's random-number generator, giving it a new seed value. If you omit number, the value returned by the system timer is used as the new seed value.
If Randomize is not used, the Rnd function (with no arguments) uses the same number as a seed the first time it is called, and thereafter uses the last generated number as a seed value.
Note To repeat sequences of random numbers, call Rnd with a negative argument immediately before using Randomize with a numeric argument. Using Randomize with the same value for number does not repeat the previous sequence.
hmmm... hvis det så skal være fra 20 til 30, er det så ----- ' Min forståelse af det, 1 Randomize intRnd = Int((10 * Rnd) + 20) ' Min forståelse af det, 2 Randomize intRnd = Int(((30 - 20) * Rnd) + 20) ' Som faktisk er det samme ' Eller ' Min forståelse af det, 3 intRnd = Int((30 * Rnd) + 20) -----
rettelse: det skulle så være: ----- ' Min forståelse af det, 1 Randomize intRnd = Int((11 * Rnd) + 20) ' Min forståelse af det, 2 Randomize intRnd = Int(((30 - 20 + 1) * Rnd) + 20) ' Som faktisk er det samme ' Eller ' Min forståelse af det, 3 intRnd = Int((30 * Rnd) + 20) -----
Dim x, y, intRnd As Integer x = 5 ' (bliver ved med at vokse - levels) y = 0
intRnd = Int(((x - y + 1) * Rnd()) + y)
det vil sige at hvis y er første level og x er sidste level, så ville jeg kunne bruge den formel der, uanset hvad tallene er.. ikke..? Eller skal jeg fjerne det første "+ 1", hvis det starter med level 0? Tror eller jeg har sådan ca. fundet ud af det, fordi jeg har sat det op i programmet.. nu vil jeg bare vide om det så er anderledes, hvis y bliver sat til et andet tal..
dvs. at hvis jeg har første level som 0, og sidste level som, lad os sige, 30.. så ville jeg kunne bruge intRnd = Int(((30 - 0 + 1) * Rnd()) + 0) ? (kan ikke helt forstå hvorfor det skulle gøre nogen forskel om "+ y " er uden for eller indenfor Int() funktionen.. den måde at opstille det på gør det bare lettere for mig at overskue.. o.O)
der er lige en sidste ting jeg ikke helt forstår .. jeg har ikke brugt Randomize funktionen, men det virker fint alligevel.. kan jeg få en simpel forklaring på hvad den gør..? fordi jeg forstod ikke helt det du skrev: -- Kommentar: bak 08/12-2005 19:54:33
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.