JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=9ad62ebaf6409a3775bbf58b3e515822Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Zufallszahlen in C++
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Rodney
Junior JLI'ler



Anmeldedatum: 24.09.2003
Beiträge: 60

Medaillen: Keine

BeitragVerfasst am: 03.10.2003, 11:56    Titel: Zufallszahlen in C++ Antworten mit Zitat

Hallo Leute,
alle Funktionen die ich zur Zufallszahlen-Erstellung in c++ nutze geben irgendwie immer diesselben Werte wieder.
Wenn man z.B. eine Zufallszahl zwischen 0 und 500 haben will, was muss ich da machen? wenn man eine Zufallsfunktion direkt 2mal hintereinander ausführt, bekommt man dann die gleichen Werte wieder??

Danke im Vorraus, RODNEY
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 03.10.2003, 12:14    Titel: Antworten mit Zitat

Wenn du die Forumsuche genutzt hättest, dann hättest du sicher bemerkt, dass es so ein Thema schon mal gab(http://www.jliforum.de/board/viewtopic.php?t=1245, ein paar Threads weiter unten).

Für eine Zufallszahl zwischen 0 und 500 kannst du das so machen:
Code:
int zufallszahl=rand()%500;

_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 03.10.2003, 12:31    Titel: Antworten mit Zitat

Ich hab mir eine Headerdatei dafür gemacht:

Code:

#ifndef aSCHALTER
#define aSCHALTER
#include <ctime>
#endif

#ifndef bSCHALTER
#define bSCHALTER
#include <cstdlib>
#endif



inline bool Quote(unsigned short Prozent=50)
{
   unsigned short p;
                  static bool gerandet=0;
                  if(!gerandet) {
   srand((unsigned)time(NULL)); gerandet = 1; }
   p = rand() % 100+1;
   if (p > Prozent)
      return 0;
   else
      return 1;
}

inline unsigned long Rnd(unsigned long Obergrenze,unsigned long Untergrenze=0)
{
     static bool gerandet=0;
                  if(!gerandet) {
   srand((unsigned)time(NULL)); gerandet = 1; }
    return (rand() %(1+ Obergrenze-Untergrenze)+Untergrenze);
}

_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Rodney
Junior JLI'ler



Anmeldedatum: 24.09.2003
Beiträge: 60

Medaillen: Keine

BeitragVerfasst am: 03.10.2003, 12:34    Titel: Antworten mit Zitat

auch wenn ich diese FUnktion nutze kommen bei mir nach dem Programmstart immer diesselben Ergebnisse!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 03.10.2003, 12:37    Titel: Antworten mit Zitat

Ach so, das meinst du.
Dann musst du den Anfangswert für die rand()-Funktion am Anfang des Programms initialisieren:
Code:
srand(timeGetTime());

oder so ähnlich.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 03.10.2003, 12:42    Titel: Antworten mit Zitat

So gehts:
Code:
srand((unsigned)time(NULL)); // Beim Start der Anwendung den Zufallsgenerator einmalig initialisieren

Code:
int nCurFigure;
nCurFigure = rand()%500; // Eine Zufallszahl zwischen 0 und 499 erzeugen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 25.02.2004, 13:24    Titel: Antworten mit Zitat

Ich habe jetzt folgenden Code:

Code:

srand(0)
double random;
for(int i=0; i<n; i++)
{
    random = rand() % 577;
    cout << random << endl;    
}

das liefert innerhalb eines Schleifendurchlaufs zwar unterschiedliche Ergebnisse, aber wenn ich diese Gesamte Schleife mehrfach ausführe, entsteht immer wieder dieselbe Reihenfolge... wie kann ich das unterbinden?

danke!
Felix

[EDIT]timeGetTime dürfte bei mir nichts nutzen, da ich unter LInux arbeite(n muss)[/EDIT]

[EDIT2]Alles klar, habe die Initialisierung mit srand(0)an eine andere Stelle im Programm verlegt. Ist zwar IMHO nicht ganz so elegant, aber läuft[/EDIT2]
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 25.02.2004, 15:14    Titel: Antworten mit Zitat

indem du nicht srand(0); nutzt sondern srand(timeGetTime()); oder ähnliches.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nigs
Super JLI'ler



Anmeldedatum: 19.12.2002
Beiträge: 359

Medaillen: Keine

BeitragVerfasst am: 26.02.2004, 01:19    Titel: Antworten mit Zitat

beser is noch
Code:
srand(GetTickCount());
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 26.02.2004, 01:21    Titel: Antworten mit Zitat

Oder so:

Code:

srand(GetTickCount() + rand()%100000);

_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nigs
Super JLI'ler



Anmeldedatum: 19.12.2002
Beiträge: 359

Medaillen: Keine

BeitragVerfasst am: 26.02.2004, 01:25    Titel: Antworten mit Zitat

ja, das geht auch......
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 26.02.2004, 01:27    Titel: Antworten mit Zitat

Das soll angeblich schon Patentiert sein. tststs diese Amis Twisted Evil
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mazze
JLI'ler


Alter: 39
Anmeldedatum: 02.01.2004
Beiträge: 145

Medaillen: Keine

BeitragVerfasst am: 26.02.2004, 10:51    Titel: Antworten mit Zitat

FallenAngel84 hat Folgendes geschrieben:
Das soll angeblich schon Patentiert sein. tststs diese Amis Twisted Evil


gut das die Logikpatente hier noch nicht gültig sind Very Happy Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 26.02.2004, 11:31    Titel: Antworten mit Zitat

und welche include-Datei brauche ich für GetTickCount()? habe schon <stdlib.h> und <ctime> probiert, kennt er aber immer noch nicht

cu Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nigs
Super JLI'ler



Anmeldedatum: 19.12.2002
Beiträge: 359

Medaillen: Keine

BeitragVerfasst am: 26.02.2004, 16:56    Titel: Antworten mit Zitat

ich zitier ausm buch : "Wenn sie die Funktion timeGetTime verwenden, müssen sie die header-datei mmsystem.h (......) und zusätzlich die Bibliothek winmm.lib hinzufügen."ich denke das man für timeGetTime keine anderen Libs+Headers wie für GetTickCount braucht....
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum