Funktion Zufällig ausführen lassen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

NathanielBlack

Betreff: Funktion Zufällig ausführen lassen

BeitragSa, Dez 12, 2009 22:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute,
wie kann ich Funktionen nach dem Zufallsprinzip ausführen lassen? Ich weiß, dass es geht, aber nicht wie es geht.
Ich habe heute einiges ausprobiert, aber nichts herausgefunden, was mein Spiel weiter bringt.

Ich brauche einfach nur immer neue Ergebnisse beim "auswählen".

Das habe ich grade mal so ausprobiert:
Code: [AUSKLAPPEN]

Graphics 1280,1024,0,2
Global timer = CreateTimer(60)


Game()


Function Game()
   Cls
   SeedRnd Wert
   Wert = Rnd(1,3)
   If Wert = 1 Then
   Funktion1()
   EndIf
   If Wert = 2 Then
   Funktion2()
   EndIf
   If Wert = 3 Then
   Funktion3()
   EndIf
   Flip(0)
   WaitTimer(timer)
End Function

Function Funktion1()
   Cls
   Print "Funktion 1 ist ausgeführt!"
   WaitKey
   Game()
End Function

Function Funktion2()
   Cls
   Print " Funktion 2 ist ausgeführt!"
   WaitKey
   Game()
End Function

Function Funktion3()
   Cls
   Print "Funktion 3 ist ausgeführt!"
   WaitKey
   Game()
End Function



Es wird leider immer nur Funktion 2 ausgeführt. Bitte verbessert mich.

mit freundlichen Grüßen,
Nathaniel

Pummelie

BeitragSa, Dez 12, 2009 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuch es mal mit seedrnd(millisecs())
It's done when it's done.

Holzchopf

Meisterpacker

BeitragSa, Dez 12, 2009 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Statt SeedRnd Wert nur einmal ganz am Anfang des Programms BlitzBasic: [AUSKLAPPEN]
SeedRnd MilliSecs()
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

NathanielBlack

BeitragSa, Dez 12, 2009 22:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow, so schnell 2 gute Nachrichten.

Danke, Jungs. Hat geklappt.

Das bringt mein Spiel ziemlich weit.

ToeB

BeitragSo, Dez 13, 2009 1:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur mal zum verständniss :

Wenn du seedrnd auf "wert" setzt :
Wert ist ja immer 0, wenn du die Funktion aufrufst. Gib mal in deinem Oben angebenen Beispiel SeedRnd 0 ein, und schon kommt auch immer 2 raus. Da bei einem Aufruf von Rand immer eine Zahl weitergerechnet wird, du aber die Zahl wieder zurücksetzte auf 0, ist es ja immer das gleiche (les dir mal Artike im Internet zum Thema Zufall und Computer durch). Deshalb muss eine Zahl bei Seedrnd hin, die sich bei jedem Aufruf ändert. Und diese Zahl ist Millisecs(). Da Millisecs() die Millisekunden nach dem systemstart misst, zählt es ja immer weiter, also immer eine neue zahl. Auch muss Seedrnd nur am amfangdes Programms geschrieben werden, denn SeedRnd gibt nur den Anfang der berechnung des Zufallsgeneratores an. Also nur einmal Wink

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Silver_Knee

BeitragSo, Dez 13, 2009 13:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
   If Wert = 1 Then
   Funktion1()
   EndIf
   If Wert = 2 Then
   Funktion2()
   EndIf
   If Wert = 3 Then
   Funktion3()
   EndIf


lässt sich übrigens wesentlich übersichtlicher als:

BlitzBasic: [AUSKLAPPEN]
Select Wert
Case 1
Funktion1()
Case 2
Funktion2()
Case 3
Funktion3()
End Select


schreiben. Außerdem ist es für den PC schneller, weil er die eine Seite der gleichung sozusagen nur einmal berechnen muss [auch eine Variable abzufragen brauch seine zeit..]

Nova

BeitragSo, Dez 13, 2009 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Außerdem wäre rand(1, 3) besser als rnd(1, 3)
rnd erzeugt eine zufällige Kommazahl zwischen 1 und 3, also auch 2,45234 oder so.
Bei rand bekommst du nur gerade Zahlen, also 1, 2 und 3. Wink
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit

ToeB

BeitragSo, Dez 13, 2009 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Nova hat Folgendes geschrieben:
Bei rand bekommst du nur gerade Zahlen, also 1, 2 und 3. Wink


Du meinst doch NATÜRLICHE Zahlen oder Very Happy ? wei weder 1 oder 3 sind gerade ... ^^


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

BBPro2

BeitragSo, Dez 13, 2009 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Nova hat Folgendes geschrieben:
Außerdem wäre rand(1, 3) besser als rnd(1, 3)
rnd erzeugt eine zufällige Kommazahl zwischen 1 und 3, also auch 2,45234 oder so.
Bei rand bekommst du nur gerade Zahlen, also 1, 2 und 3. Wink



das wäre nicht nur besser - es ist sogar absolut erforderlich, wenn man eine
gleichverteilung möchte


Code: [AUSKLAPPEN]

Graphics 640,480,16,2



Repeat

a = Rnd (1,3)

If a = 1 Then a1 = a1 + 1
If a = 2 Then a2 = a2 + 1
If a = 3 Then a3 = a3 + 1

c = c + 1

Until c > 10000


Print a1
Print a2
Print a3


WaitKey
End


bei rnd kommt der 2. wert doppelt so oft vor wie der 1. und 3.
warum ?

es werden werte zwischen 1,0 und 3,0 erstellt
danach werden diese auf ganzzahlen gerundet

alle zahlen zwischen 1,0 und 1,4999... werden also zu 1
alle zahlen zwischen 1,5 und 2,4999... werden zu 2
alle zahlen zwischen 2,5 und 3 werden zu 3

somit ergibt sich die aus dem programm ersichtliche verteilung von
25% 1
50% 2
25% 3

was sicher nicht in deinem sinne war.

deswegen: auf jeden fall RAND verwenden - da bekommst du eine normale verteilung.
 

FWeinb

ehemals "ich"

BeitragSo, Dez 13, 2009 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
@ToeB & Nova
Ihr meint beide Ganze Zahlen denn mit Rand kann man auch -2 -1 usw. erzeugen. Die Natürliche Zahlen sind nur im positiven Bereich Definiert.

[Edit]
@Admins: Ihr sollte euch die RegExp für das Parsen des [url=] Tags anschauen scheint wohl nicht mit Umlauten zu funktionieren.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group