Zufall... auch effektiv nutzbar?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

The Forsworn

Betreff: Zufall... auch effektiv nutzbar?

BeitragSa, Jun 07, 2008 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann ich den Zufall effektiv nutzen?

Dass er also bei einer Wahrscheinlichkeit von 1:5 xy macht und bei einer anderen (1:4000) ghf ?

Oder bei einem Bejeweled Ableger das Spielfeld automatisch mit 6 verschiedenen Variabeln füllt?
Und dann auch noch zufällig welche nachrücken lässt, wobei bestimmte häufiger und seltenr vorkommen...

Gibt es vielleicht sogar eine Funktion, die durch Zufall eine festgelegte Anzahl von Zahlen ausgibt??

D2006

Administrator

BeitragSa, Jun 07, 2008 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Siehe Rand und wenn es Kommazahlen sein sollen Rnd.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

The Forsworn

BeitragSa, Jun 07, 2008 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich Idiot...^^

Aber die Chance für jede Zahl ist ja gleich groß... wie bekomme ich das hin, dass eine bestimmte Zahl seltener vorkommt??

Und wie bekomm ich hin, dass er ein Array zufällig füllt? Daran scheitere ich... ;__;

Code: [AUSKLAPPEN]
For y=0 To 19
For x=0 To 19
map(x,y)= Rand (2,9)
Next
Next

SpionAtom

BeitragSa, Jun 07, 2008 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Chancen für jede Zahl im Intervall sind gleichgroß. Aber du kannst dein Intervall in kleine Intervalle aufteilen und prüfen, in welchem die Zufallszahl landet. Was meine ich damit?

Code: [AUSKLAPPEN]

x = Rand(1, 100)
Select x
   Case 1 To 10
      ;Ereignis 1
   Case 11 To 40
      ;Ereignis 2
   Case 41 t0 100
      ;Ereignis 3
End Select


In diesem Beispiel treten die Ereignisse mit unterschiedlichen Wahrscheinlichkeiten auf.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

The Forsworn

BeitragSa, Jun 07, 2008 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Werd das gleich mal versuchen^^
Hab auch schon nen Lösungsansatz, zm zu verhindern, dass 3mal der gleiche Wert nebeneinander vorkommt...
Ich berichte dann! Wink

E:

Code: [AUSKLAPPEN]
;Aufgabe: Nie 3 Werte bei X oder Y sollen aufeinander folgen.

SeedRnd MilliSecs()
;Dim wird erstellt mit 10 * 10 Feld´
Dim map%(10,10)
Local temp%
Local tempString$
;Routine
For x = 0 To 10
For y = 0 To 10

If y < 2 Then
map(x,y) = Int(Rnd(1,8))

Else
.startY
map(x,y) = Int(Rnd(1,8))
;Alle Beide Positionen vor Y werden zu einem String gefügt
tempString$=String(map(x,y),1)+String(map(x,y-1),1)+String(map(x,y-2),1)
;Jetzt wird Überprüft ob es 3 aufeinander folgende Zahlen sind
Select tempString$
Case "111","222","333","444","555","666","777","888"
Goto startY
End Select
EndIf

;Bei X ist das selbe Schema wie bei Y
If x < 2 Then
map(x,y) = Int(Rnd(1,8))
Else
.startX
map(x,y) = Int(Rnd(1,8))
tempString$=String(map(x,y),1)+String(map(x-1,y),1)+String(map(x-2,y),1)
Select tempString$
Case "111","222","333","444","555","666","777","888"
Goto startX
End Select
EndIf   
     
Next
Next


Hab den Code mal angepasst... horizontal funktioniert alles.
Aber vertikal eben nicht.
Ich komm nicht weiter... jemand muss mir bitte helfen! Sad

SpionAtom

BeitragSa, Jun 07, 2008 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube, das Problem ist folgendes: Wenn du bei der horizontalen Überprüfung eine Zahl ändern musst, kann es sein, dass dadurch vertikal ein "Dreier" entsteht. Es reicht also nicht einmal zu überprüfen, ob ein Dreier entstanden ist. Viel mehr musst du solange prüfen, solange noch Dreier vorhanden sind.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

The Forsworn

BeitragSa, Jun 07, 2008 19:12
Antworten mit Zitat
Benutzer-Profile anzeigen
habs:

Code: [AUSKLAPPEN]

SeedRnd MilliSecs()

Dim map(10,10)
Local temp%
Local tempString$

.start
For x = 0 To 9
For y = 0 To 9

map(x,y) = Rand(1,a)

If y < 2 Or x < 2 Then
map(x,y) = Rand(1,a)

Else
tempString$=String(map(x,y),1)+String(map(x,y-1),1)+String(map(x,y-2),1)
Select tempString$
Case "111","222","333","444","555","666","777","888"
Goto start
End Select

tempString$=String(map(x,y),1)+String(map(x-1,y),1)+String(map(x-2,y),1)
Select tempString$
Case "111","222","333","444","555","666","777","888"
Goto start
End Select
EndIf

Next
Next

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group