![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 245 Pomógł: 4 Dołączył: 22.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Pisząc silnik gry napotkałem problem. Otóż zazwyczaj po zabiciu potwora wypadają z niego jakieś przedmioty, załóżmy że np. jest 1% szansy że wypadnie jakiś drogocenny kamień ale 20% że jakiś średni miecz. Czy istnieje jakiś algorytm który jest w stanie wybrać co wypadło wg procentu szansy ?
Pozdrawiam |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Cytat IMO, przekombinowaliści. IMO niedoceniles problemu ;] Cytat $objDB->query( 'SELECT * FROM items WHERE percentage >= ' . rand( 1, 100 ) . 'ORDER BY RAND() LIMIT 1' ); // i już mamy przedmiot (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Tylko, ze losowany niezgodnie z zasadami podanymi na poczatku. Po wylosowaniu jakiegos progu procentowego zostaja nam tylko rekordy z wiekszym prawdopodobienstwem wystapienia niz wylosowane.. i do tego momentu jest dobrze (no prawie..), bo sposrod tych elementow losujesz kolejny niestety juz na rownych prawach, czyli jesli wylosuje sie prog dajmy na to 30% to zarownio element majacy 31% jak i element majacy prawdopodobienstwo wystapienia rowne 50% beda mialy rowne szanse przy losowaniu a tak nie mialo byc. Robilem cos podobnego niedawno w pracy (losowanie wazone), zrobilem do tego procedure, ale mysql takich mozliwosci jeszcze w wersji produkcyjnej nie daje, wiec trzeba sobie radzic inaczej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Algorytm polega na tym, ze do jakiejs tymczasowej tablicy (czy to w bazie czy php) wpisujemy kazdy element tyle razy ile wynosi jego waga, czyli np. dla wartosci 20%, 25% i 50% wpisujemy kolejne elementy w ilosciach 20, 25 i 50 (w tym przypadku akurat mozna te wagi skrocic, bo maja NWD > 1), a nastepnie losujemy z tej tablicy/tabeli w sposob tradycyjny. Teraz elementy maja takie szanse jak miec powinny (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 13.10.2025 - 21:15 |