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

1

29.01.2004, 14:50

Zufallszahlen mit der TriBase-Engine

Hi!

Ich bin grad dabei ein dreidimensionales Tetris zu schreiben.
Dabei wird der Blocktyp immer per Zufallsgenerator bestimmt:

m_iType=tbIntRandom(1,5);

Wie verhindere ich, dass die Reihenfolge nicht immer gleich ist?
Ich bekomme immer die Reihenfolge:
214522353234...

Bei jedem Neustart des Programms.

Was kann ich dagegen tun?

Danke!

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

29.01.2004, 15:08

Hi,

das ist ein bekannter Bug.
Du kannst ihn z.B. beheben, indem Du folgende Zeile an den Anfang Deines Programmes schreibst:

srand(timeGetTime());

vorher:
#include <mmsystem.h>

und winmm.lib linken.

3

29.01.2004, 15:11

Ok, danke!
Ich werds ausprobieren, aber ich würds auch gerne verstehen.
was macht der Aufruf denn?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

29.01.2004, 15:14

Er initialisiert den Zufallsgenerator mit der aktuellen Systemzeit, damit nicht immer dieselben Zahlenfolgen auftreten.

5

29.01.2004, 15:19

Aso, ok!
Danke!!!

Klaus

Treue Seele

Beiträge: 245

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

6

29.01.2004, 18:47

@David

lässt sich das nicht irgendwie praktischer in der engine selbst verbergen?
Mozilla Firefox
The Browser - reloaded

Abbadon

Frischling

Beiträge: 12

Wohnort: Völs (bei Innsbruck)

Beruf: -- Hobby - Programmierer --

  • Private Nachricht senden

7

24.12.2004, 14:53

Zufallsgenerator mit Wertebereich

Sorry, dass ich euch diese peinliche Frage stelle, aber ich bin erst ein angehender Programmierer..
Wie kann ich eine Zufallszahl ermitteln, die zwischen einem von mir festgelegten Wertebereich liegt? Ich möchte eine Zufallszahl zwischen 1 und 40 erzeugen. Wie sieht da der Code aus? Vielen Dank für eure Hilfe!
Alex

Till

Alter Hase

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

8

24.12.2004, 15:29

Also wenn es dir nicht auf exakte mathematische Gleichverteilung ankommt, dann kannst du mit dem Modulo-Operator (%) eine Zahl begrenzen:

C-/C++-Quelltext

1
int r = rand() % 10; /* r kann nun Werte von 0 bis 9 annehmen, da kein Rest größer als 10 existieren kann... */


Wenn du nun Werte zwischen 1 und 40 haben willst:

C-/C++-Quelltext

1
int r = (rand() % 38) + 2;


oder hier Werte von 1 bis 40:

C-/C++-Quelltext

1
int r = (rand() % 40) + 1;


Aber nicht "srand(time(NULL))" vergessen ;) !
DOMINVS ILLVMINATIO MEA
---
Es lebe unmanaged Code!
---
>> Meine Uni <<

Stefan

Alter Hase

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

9

24.12.2004, 15:33

du musst einfach time.h inkludieren! Und dann den Zufallszahlengenerator erzeugen:

C-/C++-Quelltext

1
  srand( (unsigned)time( NULL ) );


Und mittels der Funktion rand() erhälst du nun eine zufällige Zahl in einem bestimmten Bereich..ich glaub der Bereich hängt je nach Betriebssystem ab! Aber ich denke man findet den Bereich mit RAND_MAX heraus..einfach mal probieren!
Aber für was schreib ich das alles, du hast ja eh das Buch von Heiko wo alles bestens beschrieben ist...Seite 124...


cya,
Stefan

PS: Ich glaube den anderen wäre es lieber für eine neue Frage ein neues Topic zu eröffnen..

Sicaine

unregistriert

10

24.12.2004, 21:12

Ganz nebenbei könnt ihr mit rand, wenn ihr die Zeit nicht ändert, sowas wie Sterne machen die dann immer gleich bleiben! Oder auch andere super angwendungsgebiete für "zufällige" Zufallszahlen die immer gleichbleiben ^^

Werbeanzeige