Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Fawkes

Frischling

  • »Fawkes« ist der Autor dieses Themas

Beiträge: 58

Beruf: Realschüler :)

  • Private Nachricht senden

11

04.03.2014, 16:34

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main(){

    srand(time(0));

    sf::RenderWindow display( sf::VideoMode( WIDTH, HEIGHT, 32 ), "Sound Curve Alpha", sf::Style::Close );

    display.setFramerateLimit(30);
    // Initialisierung
    Player Player1("1");

    srand(time(0));
    Player Player2("2");

....


Okay danke habs nun so gelöst.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

04.03.2014, 16:35

Damit hast du dein Problem nicht gelöst. Dass mit deinem aktuellen Build auf genau dem PC, vor dem du gerade sitzt, nun offenbar das passiert, was du gerne hättest, ist reiner Zufall. Wieso rufst du hier zweimal srand() auf?

Fawkes

Frischling

  • »Fawkes« ist der Autor dieses Themas

Beiträge: 58

Beruf: Realschüler :)

  • Private Nachricht senden

13

04.03.2014, 16:40

Damit zwei mal ein unterschiedlicher Seed in der srand() Funktion ist.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

04.03.2014, 16:41

Und wieso meinst du, dass das nötig ist? Was genau verstehst du denn unter einem Seed?

Fawkes

Frischling

  • »Fawkes« ist der Autor dieses Themas

Beiträge: 58

Beruf: Realschüler :)

  • Private Nachricht senden

15

04.03.2014, 16:42

Weil es anders nicht funktioniert hat. ?(

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

04.03.2014, 16:43

Das ist kein guter Grund. Wie genau hat es "anders nicht funktioniert"!?

Fawkes

Frischling

  • »Fawkes« ist der Autor dieses Themas

Beiträge: 58

Beruf: Realschüler :)

  • Private Nachricht senden

17

04.03.2014, 16:45

Wenn ich srand nur einmal aufrufe, bekomm ich die selben Zahlen. Jetzt funktioniert es aber so wie ich es gemacht habt.
Für eine andere Idee stehe ich offen. Aber solange mir nichts anderes einfällt, belasse ich es dabei.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

18

04.03.2014, 16:47

Wenn ich srand nur einmal aufrufe, bekomm ich die selben Zahlen.

Das bezweifle ich mal ganz stark. Offenbar hast du da noch irgendwo etwas grundlegend missverstanden. Daher nochmal die Frage: Was genau tut srand() deiner Meinung nach?

Jetzt funktioniert es aber so wie ich es gemacht habt.

Es "funktioniert" nur insofern, als der aktuelle Build auf deinem aktuellen PC im Moment ein Ergebnis liefert, das sich mit dem von dir gewünschten Ergebnis deckt. Das ist, wie gesagt, aber reiner Zufall. Morgen könnte das schon anders sein; möglicherweise "funktioniert" es bereits im Release Build auf dem selben PC schon nicht mehr und spätestens auf einem schnelleren PC oder einem PC, wo time() eine andere Auflösung hat, wird die selbe .exe auch schon nicht mehr "funktionieren"...

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »dot« (04.03.2014, 17:14)


Fawkes

Frischling

  • »Fawkes« ist der Autor dieses Themas

Beiträge: 58

Beruf: Realschüler :)

  • Private Nachricht senden

19

04.03.2014, 16:55

Okay klingt richtig. Srand setzt den Seed aus dem rand() seinen Algorithmus berechnet um eine Pseudo Zufallszahl zu gernerieren, denke ich mal. Wird srand nicht aufgerufen ist der Standard Seed dann 0.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

20

04.03.2014, 17:07

Jeder Aufruf von rand() zieht eine neue Zufallszahl. Da es sich um in etwa gleichverteilte Zufallszahlen handelt, ist es natürlich möglich, dass zweimal hintereinander die selbe Zahlt kommt, aber sehr unwahrscheinlich. Der durch srand() gesetzte Seed bestimmt die Sequenz von Zufallszahlen, die rand() dir liefert. Jedes Mal, wenn du srand() mit einem ganz bestimmten Wert aufrufst, wird rand() von dort ab wieder die selbe Folge von Zufallszahlen liefern.

Wenn du Tatsächlich bei jedem Programmstart neue Zufallszahlen haben willst (nicht immer will man das eigentlich, sehr oft wäre es besser, wenn das Programm sich immer gleich verhält, also immer "dem gleichen Zufall unterliegt"), genügt es, srand() einmal bei Programmstart mit einem Wert, der in der Regel bei jedem Programmstart anders ist (beispielsweise die momentane Systemzeit), aufzurufen. srand() mit anderem Wert führt zu anderer Folge von Zufallszahlen. Wenn du dagegen immer abwechselnd erst srand() mit dem gleichen Wert gefolgt von rand() aufrufst, wird dir jeder Aufruf von rand() immer die erste Zahl der selben Zufallszahlensequenz liefern...

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (04.03.2014, 17:13)


Werbeanzeige