Skapa vettiga tärningsslag i c++

Permalänk
Medlem

Skapa vettiga tärningsslag i c++

Hej!

Jag funderar på att göra ett program där man spelar Yatzy men för klara det måste jag först skaffa vettiga tärningslag att använda i spelet. Just nu använder jag rand() funktionen för att skapa random tal men problemet är att alla tärningslagen blir lika. Här är min kod:

#include <iostream> #include <conio.h> #include <ctime> using namespace std; int tarningslag(int max=6) { int tarning; srand((unsigned)time(0)); tarning=rand()%max+1; return(tarning); } int main() { int *tarning=new int; //Tarningslag skapas for(int i=0; i<5; i++) *(tarning+i)=tarningslag(); for(int i=0; i<5; i++) cout << *(tarning+i) << endl; getch(); }

Kom gärna med förslag på en lösning på detta problem!

Tack på förhand:)

Visa signatur

3770k @4,5ghz, EK-Supremacy, 2x hd 7970 @1050/1500 , 4x 4 GB corsair vengeance LP 1600 mhz, Corsair RM1000x, z77a-gd65, Samsung 840 pro 256 GB, Crucial m4 128 GB, Nzxt switch 810

Permalänk
Hedersmedlem

http://www.cplusplus.com/reference/clibrary/ctime/time/

1. time(0) returnerar med precision på 1 sekund såvitt jag vet. Ditt program är förmodligen klart innan dess, vilket leder till att förmodligen alla tärningsslag får denna seed...men.....huvudproblemet är:

2. Du ska bara seeda din randomgenerator 1 gång på väldigt många (1 gång räcker här)

Enklast lösning: Seeda bara 1 gång. Lägg srand((unsigned)time(0)); i början av programmet (direkt i main) istället för i din random-funktion. Slumptalsgeneratorer är oftast egentligen bara en väldigt komplicerad algoritm som "verkar" slumpmässig (går i cirklar) och ger ett visst statistiskt utfall. Till slut kommer dom tillbaka till första talet. Seeden avgör "var i cirkeln" du börjar.......ungefär :).

Visa signatur

Every time you create an iterator: God kills a kitten.

Permalänk
Medlem
Skrivet av 'Gi:

[Gurra;11406110']http://www.cplusplus.com/reference/clibrary/ctime/time/

1. time(0) returnerar med precision på 1 sekund såvitt jag vet. Ditt program är förmodligen klart innan dess, vilket leder till att förmodligen alla tärningsslag får denna seed...men.....huvudproblemet är:

2. Du ska bara seeda din randomgenerator 1 gång på väldigt många (1 gång räcker här)

Enklast lösning: Seeda bara 1 gång. Lägg srand((unsigned)time(0)); i början av programmet (direkt i main) istället för i din random-funktion. Slumptalsgeneratorer är oftast egentligen bara en väldigt komplicerad algoritm som "verkar" slumpmässig (går i cirklar) och ger ett visst statistiskt utfall. Till slut kommer dom tillbaka till första talet. Seeden avgör "var i cirkeln" du börjar.......ungefär :).

Testade det. Funkar perfekt! Tusen tack:D

Visa signatur

3770k @4,5ghz, EK-Supremacy, 2x hd 7970 @1050/1500 , 4x 4 GB corsair vengeance LP 1600 mhz, Corsair RM1000x, z77a-gd65, Samsung 840 pro 256 GB, Crucial m4 128 GB, Nzxt switch 810