Zufall in Pure Basic"programmieren"

Anfängerfragen zum Programmieren mit PureBasic.
Special-Agent-J
Beiträge: 51
Registriert: 05.10.2008 10:13

Zufall in Pure Basic"programmieren"

Beitrag von Special-Agent-J »

man braucht ja für einige Spiele den zufall z.b. ich hab 3 ereignisse und möchte das eins von denen eintritt wie geht das in pure basic also das der computer dann quasi per zufall auswählt?
und geht es auch %chancen zu vergeben also das ich z.b sag ereigniss 1 hat eine 1% chance einzutreffen hingegen ereigniss 2 19% und ereigniss 3 80%

ich hatte schon viele ideen für gute spiele aber scheitert immer daran das ich nicht weiß wie man den zufall programmiert na ja wär nett mir zu helfen

Gruß Jonny
Achtung ich hab leider nur die demo von 4.3 und von der kaufversion leider nur 3.3
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Code: Alles auswählen

Zufall = Random(2)

If Zufall = 0
  Debug "Ereignis 1"
EndIf

If Zufall = 1
  Debug "Ereignis 2"
EndIf

If Zufall = 2
  Debug "Ereignis 3"
EndIf
chancen kannst du verteilen durch bereiche in den Ifs...

Code: Alles auswählen

Zufall = Random(99)

If Zufall <= 4
  Debug "Ereignis 1 mit 5%"
EndIf

If Zufall >= 5 And Zufall <= 24
  Debug "Ereignis 2 mit 20%"
EndIf

If Zufall >= 25 And Zufall <= 99
  Debug "Ereignis 3 mit 75%"
EndIf
Zuletzt geändert von Kaeru Gaman am 04.01.2009 21:44, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Das wäre ein Lösung:

es gibt 100% also mache ich ein Random(99)
und verteile über Select die Wahrscheinlichkeiten:

Code: Alles auswählen

Select Random(99)
 Case 0 ;(1%)
  Debug "Ergebnis 1"
 Case 1 To 19 ;(19%)
  Debug "Ergebnis 2"
 Case 20 To 99 ; (80%)
  Debug "Ergebnis 3"
EndSelect
Zuletzt geändert von STARGÅTE am 04.01.2009 21:56, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Special-Agent-J
Beiträge: 51
Registriert: 05.10.2008 10:13

Beitrag von Special-Agent-J »

vielen dank exakt das was ich brauche
Achtung ich hab leider nur die demo von 4.3 und von der kaufversion leider nur 3.3
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Beitrag von Josef Sniatecki »

STARGÅTE hat geschrieben:

Code: Alles auswählen

Select Random(99)
 Case 0 ;(1%)
  Debug "Ergebnis 1"
 Case 1 To 19 ;(19%)
  Debug "Ergebnis 2"
 Case 10 To 99 ; (80%)
  Debug "Ergebnis 3"
EndSelect
Nur so als Kommentar: Das 3. Case hat keine 80% Chance, da das
2. Case sich mit dem 3. Case überlappt.
Diese Methode finde ich aber auch am besten, um eine %-Chance
für Ereignise zu machen.
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Special-Agent-J
Beiträge: 51
Registriert: 05.10.2008 10:13

Beitrag von Special-Agent-J »

STARGÅTE hat geschrieben:Das wäre ein Lösung:

es gibt 100% also mache ich ein Random(99)
und verteile über Select die Wahrscheinlichkeiten:

Code: Alles auswählen

Select Random(99)
 Case 0 ;(1%)
  Debug "Ergebnis 1"
 Case 1 To 19 ;(19%)
  Debug "Ergebnis 2"
 Case 10 To 99 ; (80%)
  Debug "Ergebnis 3"
EndSelect
ähmm nochmal vielen dank dafür aber beim dritten hast du doch ein fehler gemacht oder? das müsste doch case 19 to 99 heißen oder?
Achtung ich hab leider nur die demo von 4.3 und von der kaufversion leider nur 3.3
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

da ist nurn typo drin:

Code: Alles auswählen

 Case 20 To 99 ; (80%)
wäre korrekt

kommt übrigens aufs selbe raus wie meine Ifs.
die sind zwar mehr schreibarbeit, dafür kann man sie räumlich trennen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

jojo das war ein Tippfehler sry ^^
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Special-Agent-J
Beiträge: 51
Registriert: 05.10.2008 10:13

Beitrag von Special-Agent-J »

also nochmal zu überprüfen ob ich alles verstanden hab das programm stimmt so oder?

Code: Alles auswählen

If  OpenWindow(1,50,50,300,300,"Zufall")
    ButtonGadget(1,20,20,50,50,"Start")
Zufallwert.l    
    
    
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_Gadget
If EventGadget()=1
Select Random(99)
Case 0 To 19
MessageRequester("zufall","die 20% chance ist eingetroffen")
Case 20 To 29
MessageRequester("zufall","die 10% chance ist eingetroffen")
Case 30 To 99
MessageRequester("zufall","die 70% chance ist eingetroffen")
EndSelect 
EndIf 
EndIf 
Until EventID=#PB_Event_CloseWindow
EndIf 
End 
Achtung ich hab leider nur die demo von 4.3 und von der kaufversion leider nur 3.3
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

abgesehen davon, dass der code scheiße aussieht, weil er garnicht eingerückt ist... :mrgreen:

er sollte so funktionieren.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten