Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Losowy rekord z bazy
Forum PHP.pl > Forum > Przedszkole
devils
Witam,
Jak wylosować losowo rekord z bazy o odpowiednich parametrach np losowy rekord zależny od poziomu np -5poziomów od naszego do +5poziomów. I dodatkowo jeżeli gracz ma kryjówke na 1 poziomie to będzie częsciej losowany od tego, który ma kryjówke na poziomie np 5.

Myślę, że wyraziłem się jasno i każdy zrozumie o co chodzi, ja niestety nie wiem jak się za to zabrać, nie wiem jak zrobić te szanse zależne od poziomu kryjówki.

Pozdrawiam i z góry dziękuję za pomoc.
evolucja
Tak zwykłe losowanie bezpośrednio przy zapytaniu:
  1. ... WHERE `poziom` BETWEEN -5 AND 5 ORDER BY RAND() LIMIT 1


Aby zrealizować drugą część musiałbyś już wspomóc się PHP.
devils
No właśnie tę częśc wiem jak zrobić, gorzej z tą 2 bo kompletnie nie wiem jak się za to zabrać.
sh3d2
logika wygladalaby np tak
- definiujemy stala C = 5
- pobierz poziom kryjowki gracza
- wylosuj liczbe z przedzialu 1:100
- jesli liczba jest wieksza niz powiedzmy poziom * C to losujemy dla gracza
- w przeciwnym wypadku nie robimy nic (czy co tam chcesz)

  1.  
  2. const C = 5;
  3. $r = rand(0,100);
  4. if($r > $poziomKryjowka * C){
  5. losuj();
  6. } else {
  7. // ...
  8. }


im wieksze C tym szanse na losowanie maleja szybciej wraz ze wzrostem poziomu, tylko uwazaj, zeby C*poziom nie wyszlo wieksze niz 100, bo nigdy nie dojdzie do losowania dla danego poziomu (co tez moze byc ciekawa opcja)
devils
To teraz ma ktoś pomysł jak to złożyć w całość?
Chce żeby to wyglądało tak.
np. mam poziom 20 i jest 5 graczy, którzy mieszą się w poziomie +/- 5, każy poziom kryjówki zmniejszałby szanse na wyszukanie takiego gracza o 10% (na 9 poziomie byłoby tylko 10% na odszukanie takiego gracza)
sh3d2
wszystkie informacje do rozwiazania problemu we wlasnym zakresie masz juz podane.

no, moze poza tym, ze zamiast najbardziej banalnego mnozenia (poziom * stala) moglbys uzyc np funkcji logarytmicznej rosnacej takiej, ktorej miejsce zerowe to bedzie 0, a granica 100. dodatkowo przebieg funkcji moglby byc taki, zeby dla x = 9 y wychodzil 90, wtedy dla poziomu 9 szanse bede wynosic 10%, i szanse na losowanie dla coraz wyzszych poziomow beda sukcesywnie malec do zera dla nieskonczenie duzego poziomu wink.gif

nie wiem jak teraz, ale "za moich czasow" (to ostatecznie nie bylo tak dawno) to byla matematyka na poziomie liceum.

devils
Informacje może i mam podane ale jak to złożyć w całość?

Pomoże ktoś?

?

Z góry dzięki,
Pozdrawiam.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.