Zufallszahl ist immer die gleiche
-
hallo,
ich versuche ein Würfelspiel zu basteln, und habe 6 Würfel.
Bei einem Klick auf den Button Würfeln, wird die funktion wuerfeln() aufgerufen.
Leider bekomme ich immer die gleichen Zahlen angezeigt:int getzahl() { randomize(); srand(time(NULL)); randomize(); int zahl = random(5)+1; return zahl; } int wuerfeln() { if(Form1->wuerfel1->Enabled == true) { Form1->wuerfel1->Glyph->LoadFromFile(AnsiString(getzahl())+".bmp"); } Application->ProcessMessages(); if(Form1->wuerfel2->Enabled == true) { Form1->wuerfel2->Glyph->LoadFromFile(AnsiString(getzahl())+".bmp"); } randomize(); if(Form1->wuerfel3->Enabled == true) { Form1->wuerfel3->Glyph->LoadFromFile(AnsiString(getzahl())+".bmp"); } randomize(); if(Form1->wuerfel4->Enabled == true) { Form1->wuerfel4->Glyph->LoadFromFile(AnsiString(getzahl())+".bmp"); } randomize(); if(Form1->wuerfel5->Enabled == true) { Form1->wuerfel5->Glyph->LoadFromFile(AnsiString(getzahl())+".bmp"); } randomize(); if(Form1->wuerfel6->Enabled == true) { Form1->wuerfel6->Glyph->LoadFromFile(AnsiString(getzahl())+".bmp"); } }
-
Das sollte funktionieren:
int getzahl() { Randomize(); int zahl = random(5)+1; return zahl; }
-
Ja, fast, nun sind die ersten beiden gleich, und die letzten vier auch, z.B:
1, 1
und
4, 4, 4, 4
-
Hallo
Das Randomize() darf nur genau einmal pro Programm ausgeführt werden, nicht jedesmal wenn eine Zufallszahl gezogen wird! Und ich glaube nicht das Randomize und random zusammengehören, vermutlich werden hier zwei verschiedene generatoren durcheinandergeworfen. Schau in die BCB-Hilfe welche VCL-Ziehungsfunktion zu Randomize gehört. Oder ins Magazin hier im Forum, da ist ein ganzer Artikel zu Zufallszahlen auf reiner C++ Basis.
bis bald
akari
-
Ok, das Random wird nun bei OnCreate ausgeführt, aber das Problem besteht immernoch
-
bei mir geht das wunderbar mit srand()
#include <fstream.h> #include <time.h> int main() { int lottozahlen[7], i; srand(time(NULL)); do { for (i = 0; i < 7; i++) lottozahlen[i] = (rand() % 49) + 1; } while (doppelte(lottozahlen, 7) == 1); cout << "Lottozahlen:\n"; for (i = 0; i < 6; i++) cout << lottozahlen[i] << " "; cout << endl; system ("pause"); return 0; }