Schon wieder Zufallszahlen...
-
Hi Leute,
ich habe angefangen mir ein kleines Spielchen zu schreiben, in dem man auf textbasis gegen einen Gegner kämpfen kann. Man hat die Möglichkeit einen Angriff auszuführen, der immer zwischen 0 und die Hälfte der Lebensenergie beträgt.
Nun habe ich mich etwas im Forum umgesehen und habe folgendes gefunden:
void CPlayer::angriff(void) { // Zufallszahl srand(time(NULL)); int schaden = rand() % my_health; // Ausgabe if(schaden == 0) cout << "Daneben." << endl; else cout << "Angriff: " << schaden << " Schaden verichtet." << endl; }Ich denke mal, dass es egal ist wie die Klasse aufgebaut ist und deswegen habe ich die nicht mit hingeschrieben. Das einzige was ich sagen muss ist, dass my_health durch einen Konstruktor auf 100 gesetzt wird. Der Compiler bringt keine Fehler, weil ja alles richtig ist, aber auf der anderen Seite auch wieder nicht, denn die Zufallszahlen sind voll berechenbar. Wenn ich das Programm starte, dann steht da z.B. 13 und wenn ich das Programm dann ganz schnell schließe und nach zwei Sekunden wieder öffne, steht da 15, d.h. es verändert sich jede Sekunde. Nun würde ich gern wissen, wie ich das machen kann, dass die Zahlen nicht so berechenbar sind. Es wäre cool, wenn ihr mir helfen könntet. Ich freu mich über antworten.
MfG René
-
Du könntest zB aufhören den seed von rand bei jedem aufruf dieser methode neu zu setzen

-
Du initialisierst den Zufallsgenerator ja auch jedesmal neu. Da time(NULL) Sekunden liefert, wird der Zuffi nur jede Sekunde mit einem _neuen_ Wert initialisiert.
Bevor die Frage kommt was schneller ist als time(NULL): Man initialisiert eh nur einmal!
-
Ahhh..., danke...
Nun funktioniert es...MfG René