Zufall... auch effektiv nutzbar?
Übersicht

The ForswornBetreff: Zufall... auch effektiv nutzbar? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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?? |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Siehe Rand![]() ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Werd das gleich mal versuchen^^
Hab auch schon nen Lösungsansatz, zm zu verhindern, dass 3mal der gleiche Wert nebeneinander vorkommt... Ich berichte dann! ![]() 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! ![]() |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group