Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Losowe zdarzenie oparte o % szans
Kasat
post 18.12.2010, 12:28:16
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 2
Dołączył: 22.08.2008

Ostrzeżenie: (0%)
-----


Witam, mam problem. Mianowicie chodzi o wylosowanie zdarzenia oparte o szansę.
Mamy obsługę samochodu, gdy obsługa danego kierowcy jest 0 to losuje się przy tym 1..10 i przyjmijmy że wylosowano liczbę 2. (mowa tu o %)
Następnie pod zmienną $rand stawiam rand(1,100) i w przypadku wylosowania liczby <= 2 ma nastąpić jakieś negatywne zdarzenie.
Jednak takie coś jest nie zgodne z prawdą, bo szansa i tak w tedy wyjdzie więcej niż te 2%...
trochę to chaotycznie napisane więc przedstawiam kod...
  1.  
  2. if($uzytkownik['obsluga'] == 0) {
  3. $obsluga = rand(1,10);
  4. } else {
  5. $obsluga = $uzytkownik['obsluga'];
  6. }
  7.  
  8. $zdarzenie_negatywne = rand(1,100);
  9.  
  10. if($zdarzenie_negatywne <= $obsluga) {
  11. //zle sie dzieje... biggrin.gif
  12. } else {
  13. //dobrze sie dzieje... biggrin.gif
  14. }
  15.  



Chodzi ogólnie obsługa polega na tym, że wyznacza ile % szans jest na ominięcie np. przeszkody itp.

Proszę o pomoc, bo te obliczenia nie są w ogóle dobre...

Go to the top of the page
+Quote Post
smietek
post 18.12.2010, 12:54:48
Post #2





Grupa: Zarejestrowani
Postów: 306
Pomógł: 32
Dołączył: 20.01.2008

Ostrzeżenie: (20%)
X----


Przecież twój sposób liczenia szansy jest poprawny.

Ten post edytował smietek 18.12.2010, 12:57:33


--------------------
Go to the top of the page
+Quote Post
Kasat
post 18.12.2010, 13:07:48
Post #3





Grupa: Zarejestrowani
Postów: 60
Pomógł: 2
Dołączył: 22.08.2008

Ostrzeżenie: (0%)
-----


Nie jest poprawny, bo skoro mam 2% na ominięcie przeszkody to przy takim losowaniu cały czas praktycznie przeszkoda była by omijana.

Już sobie poradziłem, dla innych którzy będą mieli podobny problem.
Wystarczy od 100 odjąć wylosowany %.

Np.:
  1. $obsluga = rand(1,10);
  2. $obsluga = 100 - $obsluga;
  3. $zdarzenie_negatywne = rand(1,100);
  4.  
  5. if($zdarzenie_negatywne <= $obsluga) {
  6. //tu walne w przeszkode
  7. } else {
  8. // a tu juz nie
  9. }
  10.  



Ten post edytował Kasat 18.12.2010, 13:37:34
Go to the top of the page
+Quote Post
smietek
post 18.12.2010, 13:45:28
Post #4





Grupa: Zarejestrowani
Postów: 306
Pomógł: 32
Dołączył: 20.01.2008

Ostrzeżenie: (20%)
X----


Cytat(Kasat @ 18.12.2010, 13:07:48 ) *
Nie jest poprawny, bo skoro mam 2% na ominięcie przeszkody to przy takim losowaniu cały czas praktycznie przeszkoda była by omijana.


Skoro szansa na zdarzenie jest 2% (czyli 2, trzeba pomnożyć % tak żeby wyszedł integer), a $zdarzenie_negatywne przyjmuje wartości od 1 do 100, to znaczy, że tylko dwie liczby spełniają zależność $zdarzenie_negatywne <= $obsluga, 1 i 2. Gdy system wylosuje jakąkolwiek inną, zdarzenie nie występuje (tylko liczby 1 i 2 są mniejsze lub równe 2)

Ten post edytował smietek 18.12.2010, 13:46:42


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 08:43