Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [algorytm]Podział graczy po ilości pkt
ShadowD
post
Post #1





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


Hej, tworzę stronę gdzie każdy ma daną ilość punktów, wygranych, przegranych i wyjść z gry.

Stworzyłem jak na razie takie założenia, wygrany ma +5, przegrany -3, osoba która wyszła z gry podczas jej trwania -10, w grze zawsze występuje 5 osób, istnieją dwie drużyny każda po 5. Gracze wchodzą do gry i po uzbieraniu 10 gra automatycznie jest stratowana, a oni przydzielanie dowiedzionych drużyn tak by gra była jak najbardziej zrównoważona.

Nie koniecznie wiem jaki algorytm można by zastosować by teamy były jak najbardziej zrównoważone, można by przydzielać graczy w systemie 1-2-2-2-2-2-1, od największej ilości punktów do najmniejszej, lecz jeśli pierwszy gracz posiada 2000pkt, a reszta ~1200pkt to teamy nadal nie będą w najlepszej kondycji. Przydzielanie najlepszego do pierwszego teamu, a następnie reszty od najlepszego do najgorszego do drugiego aż do wyrównania różnicy też może nie zawsze dać dobry rezultat.

Trzeba pamiętać, że nawet najlepszy gracz z gromadą osób nie umiejących grać nie da sobie rady z samymi średnio zaawansowanymi. Gracze z małą ilością wygranych (procentowo) lub z małą ilością punktów powinni mieć jakieś inne/specjalne uprawniania do rozkładania ich po równo w drużynach. Co o tym myślicie?

Moim zdaniem najlepszym pomysłem na daną chwilę jest dodanie najlepszego do #1, reszty do #2 do czasu gdy ich pkt nie będzie większe nić #1, a jeśli go przewyższy znów do #2 na identycznych zasadach, gracze rozdawani od największej ilości punktów, jeśli w końcowym rozrachunku drożyny będą różniły się większą ilością pkt. niż 10% (liczba strzelona nieco w ciemno) gra może zostać automatycznie zamknięta, a gracze proszeni o wejście do nowej.

Moim pytaniem związanym z php, a w zasadzie z samym algorytmem było by jak coś takiego najlepiej zapisać pamiętając o ograniczeniach z strony php, kod będzie w przeszłości odpalany co kilkanaście sekund więc jego optymalność, a w zasadzie optymalność algorytmu musi być dosyć spora, macie jakiś pomysł na spisanie go lub opracowanie innego?

Mam nadzieje, że nie namieszałem za mocno. (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Ścisły podział punktowy uważam za nieco nieprecyzyjny z racji różnego skilla graczy. Widziałem to nieraz i wykorzystywałem w grach przeglądarkowych. Jako łapiący szybko algorytmy, bylem w stanie w kilka dni rozkminić algorytmy rozgrywki, kasowałem stare konto i nowe prowadziłem nowe bardzo optymalnie, przez co w takich w miarę świeżych potrafiłem w mniej niż tydzień wystrzelić, przy kilku tysiącach kont, do top50. Bez stosowania botów. Dobre planowanie wystarczało. Jeśli takimi algorytmami dzieliłem z hardcorami to dopiero były jazdy. Kiedyś jeden w 2 dni od założenia konta wskoczył na pierwsze miejsce na serwerze. Taki gracz potrafi nawet z niskopoziomową postacią pociągnąć drużynę, praktycznie na straty spisaną, do zwycięstwa. Kilku w drużynie i rozkładają po kątach nawet ludzi grających znacznie dłużej (IMG:style_emoticons/default/winksmiley.jpg) Wprowadź przyznawanie punktów zależne od konkretnych akcji. Coś co można określić jako doświadczenie bitewne. Ilość zdobytych punktów, pokonanych wrogów, asysty miały by wpływ na sumaryczną punktację drużyny i potem ilość punktów określonego gracza decydowała o jego części "łupu" za wygraną. Dzięki temu pozbyłbyś się w pewien sposób także "taksówek". Aczkolwiek i mechanizmy takie także omijałem w kilku grach pozwalając na swoich kontach nabijać słabym graczom niebotyczne ilości punktów w ekspresowym tempie (błędy tego typu zgłaszałem i w ciągu góra kilku dni wychodziły poprawki) by przebili się do top100 (IMG:style_emoticons/default/smile.gif) Admini z reguły mieli ze mną masę utrapienia bo podawałem na podstawie analiz gotowe wzory służące określonym celom. Excel to jednak świetne narzędzie do wyłapywania zależności (IMG:style_emoticons/default/winksmiley.jpg)

Nie polegaj na samym miejscu, pozycji. Osoba dobra szybko na wysokie wskoczy, ale nie liczyłbym na to. Wiele zależy od algorytmu. Premiuj słabych wśród silnych (niech mają szansę podjąć rękawicę przed gnębiącymi ich), bo wielokrotnie się zdarzają playerkillerzy, który robią sobie z nowych farmy punktowe. Drobne, ale stałe źródło dochodu. Osłabiaj silnych w walce ze słabszymi, by im się ten proceder nie opłacał. Może to być system karmy jakiś, który za ataki na słabych mocno osłabia ich walory bitewne. Mają gracze walczyć z równymi sobie. Albo premiuj walki z równymi sobie w miarę poziomem. No chyba, że chcesz szkolić kamikaze i dasz bonusy za ataki na silnych (IMG:style_emoticons/default/winksmiley.jpg) Ja znałem taki system i były jaja z tego powodu. Gracz silny ugadywał się ze słabymi i wystawiał się do walki bez obrony oraz bez oręża, przez co słabi ich lali i zbijali niesamowite ilości punktów.

Sam przydział jeśli się uprzesz rozwiązuj z podziałem medianą. Weź najsilniejszego do drużyny A a 2 i 3 do drużyny B. Jeśli suma punktów drużyny przeciwnej będzie mniejsza niż tej, do której aktualnie dodajesz gracza - dodaj kolejną. Jeśli przekroczy - przejdź do drużyny przeciwnej i dodaj postać następną w kolejce. Całość rób tak długo aż skończą się gracze lub któraś z drużyn osiągnie limit postaci na drużynę. W tym ostatnim wypadku reszta pozostałe postacie w puli trafiają do drużyny przeciwnej niż ta, do której aktualnie dodajesz. Zrobiłbym jednak zabezpieczenie, bo może się okazać, że jest jedna bardzo silna postać i wiele płotek. Wtedy bardzo trudno będzie tym plotkom wygrać w starciu z silnym bez dodatkowych algorytmów wzmacniających słabe oraz osłabiających silne postacie. Może jakiś limit który w momencie różnicy punktowej obu drużyn większej niż X% usuwa najsilniejszą i robi losowanie ich pośród tej pomniejszonej puli + następna w kolejce. W ten sposób silny czeka na równiejszy skład drużyn, ale nie blokuje to meczy. Odbywają się one po prostu w innych składach. Pula może mieć więc niekoniecznie równą ilość graczy. Jeśli robisz mecze 5x5 to może być i 34 graczy w kolejce, którzy zostaną rozłożeni najpewniej na 2-3 starcia (zależnie od siły graczy).

Zauważ jeszcze jedną rzecz, która jest silnym hamulcem, a z jakim spotkałem się nieraz. Najsilniejsi gracze na serwerze nie mają z kim walczyć. Choć są motorem serwera, to szybko algorytmy zaczynają ich blokować i przez to cały serwer zwalnia. Musisz premiować ostre bicie w przód, czołówka musi mieć jakieś nagrody za ciągnięcie serwera inaczej opór algorytmów przeciwdziałających "znęcaniu nad słabymi" zatrzyma ich całkowicie w miejscu.

Co z tego o czym mówię wynika? Nie ma algorytmów idealnych (IMG:style_emoticons/default/smile.gif) Gracze to bandy sk..li które wykorzystają każdą lukę algorytmu by pocisnąć siebie lub znajomych. Ja w jednej zrobiłem krucjatę przeciwko player killerom produkując na uboczu armie podsyłane topowym gildiom do porachunków, a gdy ktoś nieopatrznie zaatakował "słabiaka" by go ogolić potrafił natknąć się na armię, która roznosiła jego wojska w drobny mak (IMG:style_emoticons/default/smile.gif) Zresztą jeśli zrobisz system gildii czy klanów to dopiero wtedy zobaczysz co to są porządne wojny serwerowe, gdzie potrafią się lać bandy po kilkadziesiąt postaci ze swoimi wojskami. Sam pamiętam absurdy w stylu takim, że siła wojsk biorących udział w starciach przekraczała wszelkie możliwe zakresy liczb dostępne dla bazy i przekręcała przez to liczniki. Ale tam wojska były liczone czasem w miliardach jednostek po każdej stronie konfliktu. Już sama ilość potrafiła przekroczyć typowy zakres int, a co dopiero jeszcze na nich przeprowadzać operacje arytmetyczne konieczne do obliczenia siły oraz wyniku starć.
Go to the top of the page
+Quote Post

Posty w temacie
- ShadowD   [algorytm]Podział graczy po ilości pkt   12.08.2010, 15:35:08
- - Spawnm   Może daj tiery ? gracze z przedziału 1-100 , 101-2...   12.08.2010, 15:43:35
- - ShadowD   Głównym celem tego systemu ma być umożliwienie jak...   12.08.2010, 15:55:14
- - toel   Taki algorytm mi wpadł do głowy - na razie wydaje ...   12.08.2010, 16:05:45
- - everth   A może tak: Bierzemy środek rozkładu np. medianęNa...   12.08.2010, 16:52:16
- - Spawnm   to może idąc dalej tropem tierów nie dawać ich szt...   12.08.2010, 16:57:55
- - lobopol   Może głupie, ale: 1. drużyna pierwsza dostaje grac...   12.08.2010, 17:13:21
- - Crozin   1) Poziom zawodnika lepiej jest określać na podsta...   12.08.2010, 17:21:46
- - ShadowD   OKi, coś próbuję za waszych propozycji wybrać. Nie...   13.08.2010, 14:02:08
- - toel   [PHP] pobierz, plaintext  function getClosest...   13.08.2010, 14:13:59
- - ShadowD   W czystej postaci nie zadziała na moje potrzeby, a...   13.08.2010, 14:18:10
- - everth   Może ci się przyda, dla mnie działał dosyć szybko:...   13.08.2010, 17:11:55
- - thek   Ścisły podział punktowy uważam za nieco nieprecyzy...   13.08.2010, 22:33:45
- - ShadowD   Sporo tego napisałeś i na pewno masz rację, ale ni...   14.08.2010, 00:38:00
- - thek   Nie sądzę, że najlepszym, ale myślę, że jednym z p...   14.08.2010, 01:08:15
- - ShadowD   Tutaj można zauważyć błąd jaki występuje, sprawdza...   14.08.2010, 01:31:53
- - thek   Wymieniłeś nie 4 ale 2. Balans się zwiększył, ale ...   14.08.2010, 01:48:33
- - everth   Być może ten algorytm powinien (chyba) przybliżyć ...   14.08.2010, 05:01:34
- - thek   Everth... Algorytm w postaci jaką podałem i jaką p...   14.08.2010, 11:47:48
- - everth   @thek - masz jak zwykle rację Śpiący byłem i jak ...   15.08.2010, 04:26:38
- - thek   Owszem. Algorytm w przypadku bardzo odstającego gr...   15.08.2010, 12:42:28


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: 4.10.2025 - 22:52