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

Anonymous

unregistriert

1

23.06.2003, 19:57

tbFloatRandom - immer die gleiche Zahl

Hallo

folgender Code

Quellcode

1
2
3
4
5
tbInit();
TCHAR Text[256];
sprintf(Text, TEXT("%f"), tbFloatRandom(3.0f, 7.0f));
MessageBox(NULL, Text, NULL, MB_OK);
tbExit();


Es wird immer die Zahl 3.016400 ausgegeben. Was mache ich falsch? Wollte es ein wenig zufälliger. ;)

Anonymous

unregistriert

2

23.06.2003, 20:00

Das gleiche gilt auch für tbIntRandom. Ich dachte tbInit initialisiert den Zufallsgenerator :angel:

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

23.06.2003, 20:01

Zufallsgeneratoren liefern immer die gleiche Zahlenfolgen. Schreib mal folgendes noch davor:

srand(timeGetTime() % 1000);

Dazu musst Du stdio.h und mmsystem.h per #include einbinden und mit winmm.lib linken.

Anonymous

unregistriert

4

23.06.2003, 20:07

hm, aber genau das dachte ich macht tbInit. Deshalb habe ich es nicht verwendet. Im Buch von Seite 34:

Zufallszahlen

Beim Aufruf von tbInit initialisiert die Engine den Zufallsgenerator mit der aktuellen Systemzeit in Millisekunde, ... :angel: :angel:

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

23.06.2003, 20:23

Ja, eigentlich sollte es das tun, das weiß ich auch!
Klappt aber scheinbar nicht, ist mir jedoch nie aufgefallen.
In TriBase.cpp steht srand(timeGetTime() % 10000). Probier's mal mit 1000, vielleicht war das andere zuviel. Obwohl das auch sehr seltsam wäre...

Anonymous

unregistriert

6

23.06.2003, 20:27

hehe, hab mir auch gerade die Funktion tbInit angeschaut. Da steht du bereits gesagt hast, srand(timeGetTime() % 10000); drin! ??? ??? ???

Mache ich aber

Quellcode

1
2
tbInit();
srand(timeGetTime() % 10000);


krieg ich zufallszahlen. sehr komisch. oder ist die dll vielleicht nicht auf dem aktuellen stand mit dem sourcecode?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

23.06.2003, 20:32

Doch, schon! Das war schon ganz von Anfang an mit drin.
Ich weiß wahrscheinlich, woran es liegt! Die DLL scheint wohl einen "eigenen" Zufallsgenerator zu haben. Und tbFloatRandom etc. sind inline-Funktionen. Wenn man sie benutzt, verwendet man also den Zufallsgenerator von der Anwendung. Habe die Funktionen jetzt "normal" gemacht, also nicht mehr inline, dann sollte es gehen!

Anonymous

unregistriert

8

23.06.2003, 20:38

Jepp, ist mir auch gerade eingefallen. Da du nicht die C++ Runtime DLL benutzt, hat jedes Modul seine eigene Seed-Variable. Lösung: Auf Multithread-(Debug-)DLL umstellen und es läuft.

Danke! :) :)

Werbeanzeige