Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Losowy rekord z bazy
devils
post 16.04.2012, 21:14:47
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 30.09.2010

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
evolucja
post 16.04.2012, 22:02:28
Post #2





Grupa: Zarejestrowani
Postów: 362
Pomógł: 27
Dołączył: 14.09.2009

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


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.

Ten post edytował evolucja 16.04.2012, 22:03:28


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
devils
post 16.04.2012, 22:11:27
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 30.09.2010

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


No właśnie tę częśc wiem jak zrobić, gorzej z tą 2 bo kompletnie nie wiem jak się za to zabrać.
Go to the top of the page
+Quote Post
sh3d2
post 16.04.2012, 22:23:29
Post #4





Grupa: Zarejestrowani
Postów: 34
Pomógł: 11
Dołączył: 10.06.2011
Skąd: świdnica

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


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)
Go to the top of the page
+Quote Post
devils
post 16.04.2012, 22:38:04
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 30.09.2010

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


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)
Go to the top of the page
+Quote Post
sh3d2
post 16.04.2012, 22:45:44
Post #6





Grupa: Zarejestrowani
Postów: 34
Pomógł: 11
Dołączył: 10.06.2011
Skąd: świdnica

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


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.

Go to the top of the page
+Quote Post
devils
post 21.04.2012, 13:29:11
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 30.09.2010

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


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

Pomoże ktoś?

?

Z góry dzięki,
Pozdrawiam.
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: 25.07.2025 - 09:51