19. juni 2007 - 14:05Der er
10 kommentarer og 1 løsning
Tilfældige tal!
Hejsa Eksperter!
Jeg arbejder på et lille terningespil, og er også ved at være ved vejs ende - problemet er bare knas med de pseudotilfældige tal:
Random rand = new Random(unchecked((int)DateTime.Now.Ticks));
... int[] playerDice = new int[6]; int[] computerDice = new int[6]; ... playerDice = generateNumbers(); computerDice = generateNumbers();
...
public int[] generateNumbers() { for(int i = 0; i < 6; i++) { intArray[i] = rand.Next(1,7); }
return intArray; }
...
Det fungerer fint med at generere de 'tilfældige' tal, men problemet er at tallene som brugeren og som den computerstyrede modstander har, er næsten identiske hver eneste gang, det er kun de 1-2 sidste terninger der afviger!
Jeg genererer allerede Random rand samt definerer de to arrays inden min Form_Load, og så kalder jeg generateNumbers()-funktionen ved en commandbutton, så går ikke ud fra det er tilfældet?
Altså static Random rand = new Random(unchecked((int)DateTime.Now.Ticks)); ?
Det er hermed afprøvet, men giver samme resultat!
Et andet alternativ kunne være at generere 12 'tilfældige' tal istedet for 6, og så plotte ind i de to arrays under samme kald, men det løser stadig ikke denne problem-stilling, som jeg kunne ende i igen en anden gang :(
Hverken eller : problemet er Rand - funktionen. En rand med samme seed genererer altid samme række af pseudetilfældige tal.
Funktionen husker hvor langt den er kommet, men hver gang du starter den med samme seed, så kører rækken forfra - medmindre dens forudgående værdi ligger gemt i en static f.eks.
Eftersom rand objektet lever udenfor generateNumbers funktionen vil rand.Next() ikke starte forfra hver gang.
Nu er det jo svært at være stålsat på noget når man kun har set brudstykker af koden, men jeg er helt overbevist om at problemet skyldtes at de to arrays oprindeligt endte med at være sat til samme reference.
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.