Rand() ?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

shark95

Betreff: Rand() ?

BeitragFr, Jul 14, 2006 10:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute!

Hab mal ne Frage: Wieso werden immer die gleichen Rand() Zahlen erstellt? Ich erzeuge am Beginn meines Programms 10 Objekte, deren Koordinaten mit Rand() berechnet werden. Das funktioniert ja auch, aber wenn ich das Programm beende und wieder starte werden sie wieder am selben Punkt erzeugt.

Was muss ich machen, dass es wirklich zufällig gewählt wird?

Danke

BladeRunner

Moderator

BeitragFr, Jul 14, 2006 10:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst den Zufallsgenerator erst mittels seedrnd( millisecs()) initialisieren, dann kriegste "echte" Zufallszahlen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Skulk

BeitragFr, Jul 14, 2006 10:46
Antworten mit Zitat
Benutzer-Profile anzeigen
rand() ist wie alles andre auch "nur" ein mathematischer algorithmus der "scheinzufallszahlen" anhand einer basiszahl erzeugt

diese basiszahl müsst du ihm über SeedRnd() mitteilen.

wie bladerunner schon schrieb, nimmt man gängigerweise millisecs(), da sich dieses zahl stetig ändert und man somit die höchste wahrscheinlichkeit erreicht, zufallszahlen zu erzeugen.
War doesn't determine who's right,
war determines who's left...
 

dada11

BeitragFr, Jul 14, 2006 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
An welcher Stelle im Source muß das stehen ? Am Anfang so wie GRAPHICS oder kurz vor der RAND Funktion.
Dada
 

Skulk

BeitragFr, Jul 14, 2006 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Generell schreibt man das noch über graphics

aber du kannst es so oft du willst im sourcecode hinterlegen und auch wo du willst. nur erst wenn diese zeile abgearbeitet wurde, kommen "echt" zufallszahlen...
War doesn't determine who's right,
war determines who's left...
 

dada11

BeitragFr, Jul 14, 2006 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
COOL, danke. Hatte mich da auch schon gewundert das die Zufallszahlen rein Zufällig immer gleich waren. Was für ein Zufall Wink
Dada
 

Ensign Joe

BeitragSo, Jul 16, 2006 11:59
Antworten mit Zitat
Benutzer-Profile anzeigen
noch zufälliger wirds mit:Code: [AUSKLAPPEN]
SeedRnd Millisecs()+ScanLine()
Wink
Ich habe jetzt eine Pommesbude aufgemacht am Münchner Hauptbahnhof.
Und da ich Herbert Görgens heiße, heißt diese Pommesbude
Herbert's Pommesbude Smile

ChaosCoder

BeitragSo, Jul 16, 2006 22:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ensign Joe hat Folgendes geschrieben:
noch zufälliger wirds mit:Code: [AUSKLAPPEN]
SeedRnd Millisecs()+ScanLine()
Wink


Was aber in Blitzmax nicht funktioniert weil es ScanLine() da nicht gibt!
Gibts den Befehl unter einem anderen Namen auch in BMax???

MfG
ChAoS|DrAgOn
Projekte: Geolaria | aNemy
Webseite: chaosspace.de

BladeRunner

Moderator

BeitragMo, Jul 17, 2006 9:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Auf Anhieb wüsste ich keine Entsprechung. Btw. ist die Anzahl an millisecs() vollkommen ausreichend. Mit scanline wird nur eine Zahl von 0-bildschirmvertikale hinzuaddiert. Da ein menschlicher user schon kaum ein Programm 2 mal zur selben Systemzeit starten wird ist das nicht nötig. (Zufälliger als Zufall geht schlecht Wink)
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

dada11

BeitragDo, Jul 20, 2006 19:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
kann man mit Scanline dann sowas wie ein RasterzeilenInterrupt machen ? Also eine bestimmte Zeileabfragen und dann einen bestimmten Code ausführen bzw in eine Function springen ?
Dada

BladeRunner

Moderator

BeitragDo, Jul 20, 2006 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Theoretisch schon, allerdings ist ein Rasterzeileninterupt unter BB fraglich im Sinn. Die zur Verfügung stehenden Grafikmittel sind so fortgeschritten dass man nicht mehr auf solche Effekte angewiesen ist- es geht anders einfacher und bequemer.
Einzig bei ausgeschalteter Synchronisation (flip 0) wäre noch ein bissl speedkitzeln theoretisch möglich. Aber ob es den Aufwand lohnt sei mal dahingestellt. Unter Bmax ist es aber ja eh kein Thema, da es hier scanline() nicht gibt.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

dada11

BeitragDo, Jul 20, 2006 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Aha, dann hat sich das ja eh erledigt Wink
Dada
 

Skulk

BeitragFr, Jul 21, 2006 8:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ensign Joe hat Folgendes geschrieben:
noch zufälliger wirds mit:Code: [AUSKLAPPEN]
SeedRnd Millisecs()+ScanLine()
Wink


das könnte man auch wiefolgt ins unendliche treiben, macht aber ehrlichgesagt keinen sinn Smile

Code: [AUSKLAPPEN]
SeedRnd MilliSecs()
SeedRnd Rand(9999)
SeedRnd Rand(9999)
...
War doesn't determine who's right,
war determines who's left...

BladeRunner

Moderator

BeitragFr, Jul 21, 2006 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Das würde so nicht funktionieren, da Du immer wenn du den Samen mit '9999' setzt die selbe erste Zufallszahl produzierst.
Übrigens ne nette Methode für Verschlüsselungen, vorausgesetzt seedrnd() liefert auf allen Rechnern die selbe Folge. Unter B3D ging das. Lustigerweise hat B+ eine andere Seedgrundlage. Daher durften nicht die Besitzer verschiedener Blitzversionen für sich compilieren.
Aber wenn man ein Compilat weiterreichte ging es.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group