Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Losowa liczb
Ulysess
post
Post #1





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


dzień dobry , posiadam 'grę' internetowa i w niej gracze mogą ulepszać swoje przedmioty , szanse na ulepszenie teoretycznie powinny wynosić 90% a w praktyce to działa na zasadzie

  1.  
  2. mt_srand((double)microtime()*1000000);
  3.  
  4. $liczba_rand = round(rand(101,10000)/100);
  5.  
  6. if(90 >= $liczba_rand)
  7. {
  8. przedmiot ulepsza sie
  9. }
  10. else
  11. {
  12. niszczy
  13. }


wydaje mi się że tak naprawdę szanse nie wynoszą 90% dlatego wpadłem na pomysł aby:
Losowanych było 10 różnych liczb z przedziału od 1 do 100
Następnie losowana jest jedna liczba z przedziału od 1 do 100 i jeśli ta jedna liczba jest równa którejś z tych 10 wcześniej losowanych to przedmiot ulega zniszczeniu , jeśli nie zostaje ulepszony . co ty o tym sądzicie (IMG:style_emoticons/default/questionmark.gif) może w jakiś inny sposób lepiej to zrobić lub zostawić tak jak teraz jest (IMG:style_emoticons/default/questionmark.gif) z góry dziękuje za pomoc (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
bastard13
post
Post #2





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


możesz zrobić też tak:
  1. $zniszczenie=mt_rand(1,10);
  2. $szansa=mt_rand(1,10);
  3. if($zniszczenie==$szansa)
  4. {//zniszczenie
  5. }
  6. else
  7. {//ulepszenie
  8. }

Szansa na ulepszenie wynosi 90%. A sposobów jest pewnie setki:)
Go to the top of the page
+Quote Post
Ulysess
post
Post #3





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


wszystko fajnie tylko zapomniałem dodać.. są 4 typy kont której dają takie szanse: 90,84,79,73
Go to the top of the page
+Quote Post
bastard13
post
Post #4





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


to wrzuć to wszystko w ifa: if(konto==xx || konto==yy ...)
Go to the top of the page
+Quote Post
Noidea
post
Post #5





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


  1. $los = mt_rand( 1, 100 );
  2. $szansa = 90;
  3.  
  4. if( $los <= $szansa )
  5. {
  6. //udało się
  7. }


Co jest złego w takim kodzie, że kombinujesz z dzieleniem przez 100 itp. ?
Go to the top of the page
+Quote Post
Ulysess
post
Post #6





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


hmm nie rozumiem , mógłbyś to bardziej rozwinąć (IMG:style_emoticons/default/questionmark.gif) twój wyżej przykład jest dobry bo jest równa liczba.. ale co jeśli są takie jakie podałem , prosił bym o rozwinięcie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Noidea
post
Post #7





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


Rozwinięcie:
  1. $szanse = array( 90, 84, 79, 73 );
  2.  
  3. foreach( $szanse as $szansa )
  4. {
  5. $suma = 0;
  6. for( $i = 0; $i < 1000000; $i++ )
  7. {
  8. $los = mt_rand( 1, 100 );
  9.  
  10. if( $los <= $szansa )
  11. {
  12. $suma++;
  13. }
  14. }
  15.  
  16. echo "Mialo byc: " . $szansa . "%, jest: " . round( $suma / 10000, 3 ) . "%<br>";
  17. }



EDIT:
No chyba że chodzi ci o szanse typu: 90.84% czy 79.73%, to wtedy faktycznie i szanse i liczby w mt_rand powinieneś pomnożyć przez 100

Ten post edytował Noidea 1.09.2010, 16:58:01
Go to the top of the page
+Quote Post
Quantum
post
Post #8





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

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


Cytat
twój wyżej przykład jest dobry bo jest równa liczba.. ale co jeśli są takie jakie podałem

Cytat
90, 84, 79, 73


liczby całkowite, w czym rzecz ? co tu rozwijać ? Noidea podał chyba najprostsze rozwiązanie (IMG:style_emoticons/default/smile.gif) Jeżeli liczba wylosowana liczba z przedziału od 1 do 100 wyniesie =< 90 warunek zwróci true i pierwszy blok instrukcji zostanie wykonany, jeżeli wyniesie > 90 zostanie wykonany blok else. Pod zmienną $szansa podstawiasz procent określony przez konto, switch. Chyba, że ja czegoś tutaj nie zrozumiałem (IMG:style_emoticons/default/smile.gif)

Cytat
  1. mt_srand((double)microtime()*1000000);
  2. $liczba_rand = round(rand(101,10000)/100);


najpierw używasz mt_srand, a później rand? dla rand jest analogicznie srand.

Ten post edytował Quantum 1.09.2010, 17:10:23
Go to the top of the page
+Quote Post
Ulysess
post
Post #9





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


dałem tylko część kodu i zdaje sobie sprawę że dla srand jest rand a mt_srand mt_rand (IMG:style_emoticons/default/smile.gif) co do losowania i dzielenia , 'myślałem' że będzie w taki sposób bardziej losowa liczba. co do wyżej kodu . pętla foreach słuzy w tym wypadku do pobrania wszystkich wartości z tablicy (IMG:style_emoticons/default/questionmark.gif) (przyznam szczerze że nigdy nie używałem dlatego nie wiem :/..) ogólnie rzecz biorąc nie rozumiem w ogóle tego kodu..

hmm ok już rozumiem.. opracowałem podobny kod do opracowania statystyk ale i tak uważam że większe szanse są że zostanie wylosowana liczba powyżej 90 niż miała by trafić się np 1 19 28 ......
Go to the top of the page
+Quote Post
Kaffiuri
post
Post #10





Grupa: Zarejestrowani
Postów: 40
Pomógł: 6
Dołączył: 6.05.2009

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


Cytat(Ulysess @ 1.09.2010, 18:29:18 ) *
ale i tak uważam że większe szanse są że zostanie wylosowana liczba powyżej 90 niż miała by trafić się np 1 19 28 ......


Na szybko napisałem sobie taki kodzik

  1. <?php
  2. $liczba = 0;
  3. $liczba2 = 0;
  4. for ($i=0; $i<100; $i++) {
  5. $los = mt_rand( 1, 100 );
  6. echo $los.'<br />';
  7. if ($los <= 90) {
  8. $liczba++;
  9. }
  10. else {
  11. $liczba2++;
  12. }
  13. }
  14. echo 'Ponizej 90: '.$liczba.'<br />';
  15. echo 'Powyzej 90: '.$liczba2;
  16. ?>


Kilka wynikow:
Cytat
Ponizej 90: 88
Powyzej 90: 12

Cytat
Ponizej 90: 93
Powyzej 90: 7

Cytat
Ponizej 90: 94
Powyzej 90: 6

Cytat
Ponizej 90: 88
Powyzej 90: 12

Cytat
Ponizej 90: 91
Powyzej 90: 9

Cytat
Ponizej 90: 87
Powyzej 90: 13

Cytat
Ponizej 90: 92
Powyzej 90: 8


Prawdopodobieństwo wynosi zawsze koło 90%, wiec mylisz się.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 12:46