Jak zrobić takie losowanie?


(Konradnie2) #1

Mam w bazie danych tabele z punktami od 0 do 250.

Na stronie jest formularz w którym zwiększa się te punkty( załóżmy że 1 dziennie).

<?php

$pkt=punkty z bazy(11;)

$proc=$pkt * 100 / 250(4%);

echo "$proc"(4%);

?>

Czy da się zrobić takie losowanie ze mimo że mam 99% to i tak może wyświetlić się komunikat że się nie udało??

Czy da się zrobić coś takiego w PHP??


(Zagorskid) #2

Jasne, że się da.

Tylko napisz jaśniej, o co chodzi i co się ma nie udać.


(Gutek) #3

Używając przycisku zmien.gif

Pozdrawiam Gutek


(Konradnie2) #4

Chodzi mi o to jak zrobić żeby losowało wyświetlenie wiadomości.

Mam 2 wiadomości:

  1. Udało ci się.

  2. Nie udało ci się.

Chcę żeby było losowanie po po wciśnięciu przycisku "losuj" ale tak żeby procent posiadanych punktów zwiększała możliwość na 1 wiadomość ale mimo to żeby często losowało 2 wiadomości.

Po wciśnięciu będzie losowanie i wyświetlenie wiadomości.

Mam nadzieję że mnie zrozumiecie.


(Drobok) #5

Czyli czym więcej % podajesz tym mniejsza szansa na wyświetlenie dwóch wiadomości ?

$los=rand(0, 100);

$los-=$twoja wartosc;

Najlepiej podaj 1 / 2 przykłady bo nadal nie rozumiem o co ci chodzi ;]


(Konradnie2) #6

Niedokładnie.

Mam w bazie tabele w której są punkty od 0 do 250.

Mam formularz który dodaje 1 do tabeli ale tylko raz dziennie załóżmy.

Czyli zawsze mam ileś procent które zwiększają szanse na wylosowanie wiadomości Udało się.

I teraz chce żeby przy 90% nie wyświetlało tylko wiadomości że się udało ale też i ta 2.

Mi nie chodzi o to render tylko że mój procent posiadanych punktów w bazie daje szanse na udane losowanie.

Tylko nie wiem jak to zapisać w skrypcie żeby losował i miał np 20% na udane i raz sie uda a raz nie.

No nie wiem jak to lepiej wytłumaczyć.


(Drobok) #7

Losowanie to właśnie ten rand.

To wyświetli ci udało się jeśli wartość zmiennej jest ponad 50.

if($zmienna>50)

    echo 'udało się';

else 

    echo 'nie udało się';

Masz pkt od 0 do 250 i coś zwiększasz o 1. Nie wiem co więc muszę rozważyć 3 opcje. Zwiększasz pierwszy, drugi, albo oba. Ale nadal nie wiem jak ty chcesz liczyć te procenty.

Z tego co czytam, chcesz żeby na podstawie tego co masz (tego pkt), i na podstawie twojego wyniku (tego 250) losował ci coś.

Czyli ja bym wziął np policzył liczbę przez te 250. Np ja bym zrobił randoma od 0 do 500. I do tego doliczał te twoje pkt. Np wylosuje ci 200 do tego masz np 60pkt to wyjdzie 260 i wtedy możesz np od 50% dać że mu zaliczyło (czyli tobie zaliczyło). Czym większy próg losowania zrobisz tym większe znaczenie ma losowanie a nie punkty z twojej tabeli.

Ew możesz policzyć np 30/250 to masz 12% i do tego dodać randoma od 0 do 100. Oczywiście znów od 50dajesz udało się.

Ale najlepiej jak bym wiedział do czego to ;]


(Konradnie2) #8

A takie losowanie nie będzie losowało zawsze tej samej wiadomości jak będę miał np 60 punktów w bazie??

To jest do niczego.Tak się uczę i chce wiedzieć jak to zrobić.

Mi chodzi o takie losowanie jak jest w niektórych grach.

Np na bloodwars.pl jak się idzie na wyprawe to jest losowanie i losuje co się dostanie. Wiem że ta gra nie jest w php dlatego się pytam czy da się tak zrobić.


(Drobok) #9

Przy maksymalnej liczbie punktów będzie maksymalna szansa w wypadku tego doliczania procentów. Wszystko właśnie zależy od tego jaki udział mają mieć te punkty do tego farta z randoma. Wszystko kwestia szczęścia.

Co do rozdawania itemów w grach etc. To tam każdy gracz ma własne losowanie i są porównywane losowane liczby. (w przypadku przydzielania w mmo np)

if(rand()>rand())

   echo 'udało ci się';

else

  echo 'nie udało ci się';

W tym są takie same szanse na wylosowanie udało ci się, jak w wypadku ograniczenia do 100 i losowania tylko raz. Np tak:

if(rand()%100>100)

  echo 'udało ci się';

else

  echo 'nie udało ci się';

Uda się, albo się nie uda.

Natomiast w wypadku itemów w grach przeglądarkowych. W bazie są przydzielane id dla każdego itema, jaki można wygrać. Losujesz od minimalnego do maksymalnego id w bazie. I wtedy dostajesz item jaki wylosujesz. Np wylosujesz 45 to dostajesz item o id 45.

A co do twojego postępu w tym losowaniu (z tego co rozumiem). To mógłbyś wykorzystać tą drugą metodę. Zwiększanie szans nie ma szans bytu w takich grach grasz 365dni więc zwiększysz o 365 i potem losujesz najlepszy przedmiot ? Musiałbyś zrobić jakieś przedziały w tym zawierające konkretne itemy. Ale znów czym dalej tym szansa na itemy najgorsze wynosiłą by 0. A szansa na najlepszy na początku bynosiłaby niski procent, a potem coraz większa.

Wg ciebie na jakiej zasadzie jest losowanie u ciebie w tej grze co podałeś ? :stuck_out_tongue:

//edit analizując tuta dla twojego linka jest:

-http://wiki.bloodwars.interia.pl/index.php?title=Wyprawy

Chodzi ci o to ? Po prostu losujesz tak jak w moim przykładzie z tym, że zamiast 50 dajesz "szanse na udaną wyprawę". Szanse na przegraną są dość niskie, ale zawsze są. Do tego musisz doliczyć twoją siłę w stosunku do doświadczenia. Tutaj również musisz mieć jakiś próg przez który jest zaliczany. Potem oba muszą wyjść na true i wtedy zaliczasz daną wyprawę. To jest ustawiane z góry przy tworzeniu danych wypraw w tym wypadku. A co do gry to każda gra przeglądarkowa tworzona jest w php. Js i ew ajax.


(Konradnie2) #10

To jakie ty byś polecił?? Jakie losowanie jest lepsze??

Właśnie o takie wyprawy mi chodzi.

Nie wiem jak to jest zrobione że raz się udaje a raz nie i jak to jest z tymi itemami.


(Drobok) #11

Mamy np 70% na udanie danej wyprawy.

Losujemy liczbę od 1 do 100(bo ogólnie jest 100%)

Jeśli wylosujemy liczbę od 1-70 (bo 70%szans na udanie) to wtedy się udaje dość proste.

Jeśli wylosujemy liczbę większą 70-100.Nie* udaje się.

Tutaj właśnie jest ten czynnik losowy o którym mowa w tutku.

Szansę na udaną wyprawę liczymy na podstawie stosunku poziomu postaci do poziomu trudności / posiadanych przedmiotów / statystyk itd. Wszystko to kwestia konkretnej gry.

Np wyliczymy że jest to 70%. Wtedy patrzymy na maksymalną szansę powodzenia wyprawy. Jeśli mamy ponad limit ograniczamy do limitu. Jeśli mniejszy zostawiamy go w spokoju i podstawiamy do ifa.

I teraz losujemy sobie liczbę od 1 do 100. (rand(1,100):wink:. I tą liczbę podstawiamy do ifa (po prostu czy się udało - if(rand(1,100)>szansa_na_wygraną) wygrana else przegrana.

W razie przegranej jakaś kara np do statów / utrata przedmiotu / wirtualnej waluty etc.

W razie wygranej losujemy coś co mamy wygrać. Dodajesz przedmiony do bany danych np mysql. Masz 4 pola. id, nazwa, wymagania, staty (wymagania / staty możesz rozwinąć na kilka komórek). Losujemy id i na podstawie tego id dajemy graczowi item o tym id.


(Konradnie2) #12

Aha to teraz już wiem jak to działa. Dzięki.

A w tym to jak ma być bo jest 2 razy udana?

Czyli żeby wylosować to zawsze render??


(Drobok) #13

Źle to napisałem. Od 1-70 się udaje (bo takie są szanse na wygraną). A przegrywasz od 70-100. Już zedytowałem posta z błędem ;]


(Konradnie2) #14

Dobra już wiem o co chodzi z losowaniem i jak to działa.

Wielkie dzięki.