Czy losowe punkty odrodzenia są sprawiedliwe?

inappropriateCode 08/22/2017. 9 answers, 4.496 views
game-design level-design

Jeśli wszyscy gracze zostaną odrodzeni losowo w tej samej odległości od sąsiadujących graczy, liczba graczy będzie proporcjonalna do prawdopodobieństwa, że ​​ich pozycje odradzania będą niesprawiedliwe. Im bliżej gracze pojawią się na środku mapy, tym bardziej prawdopodobne jest, że napotkają innych graczy i im mniej prawdopodobne jest, że przeżyją, w porównaniu z graczami znajdującymi się na krawędzi mapy. Załóżmy, że wszyscy gracze są spawnowani w tym samym czasie.

Czy istnieje sposób na kształtowanie punktów odrodzenia lub zmiana mapy, aby:

  1. Wszyscy gracze mają ograniczoną liczbę sąsiednich wrogów.
  2. Wszyscy gracze mają równe szanse na spotkanie sąsiednich wrogów.
  3. Rozmiar mapy nie musi się zwiększać proporcjonalnie do liczby graczy.
  4. Ograniczenia te nie są egzekwowane w arbitralnych nieprzekraczalnych przestrzeniach.

Odpowiedź nie musi być doskonała, po prostu oczywiście lepsza niż alternatywa. Po wyjęciu z pudełka myślę mile widziani.

5 Comments
10 Zibelas 07/28/2017
Spawn in a circle?
1 inappropriateCode 07/28/2017
@Zibelas Tradycyjne podejście, ale narusza wymaganie 3, a przy dużej ilości graczy tworzy ogromną mapę i puste wnętrze.
4 Zibelas 07/28/2017
To zależy od rodzaju gry. (2D / 3D, respawn / last man standing, itp.) Idealny spawn jest w tym przypadku możliwy tylko w świecie o kształcie kulki (więcej graczy, bliższe odrodzenie, ale możesz zagwarantować, że mają taką samą odległość). W świecie 2D ze stałymi granicami zawsze masz mniej graczy graniczących z grą, ponieważ nie masz gdzie ich odrodzić. Jeśli jest to gra 3D, możesz mieć wiele warstw.
1 RothX 07/28/2017
Myślę, że to pomogłoby wiedzieć, jaką grę robisz. To brzmi jak rodzaj gry wojennej, ale jakie są szczegóły? Czy to strzelanka? Czy zaczynasz od wszystkich swoich broni, czy też musisz odkrywać i znajdować rzeczy? Jaki jest warunek zwycięstwa? Jak długo ma trwać mecz?
3 Jan 'splite' K. 07/28/2017
Nie za pełną odpowiedź, ale myślę, że każdy stara się o "sprawiedliwy i zrównoważony spawn", który ... nie jest zabawny. Spójrz na znakomite targi PUBG (i inne Battle Royale): gracze mogą "odradzać się" (dobrze, skakać i lądować ...) niemal wszędzie, gdzie chcą - jeśli chcesz konfliktu i dramatu, wybierasz miejsce, w którym większość graczy ląduje / spawnuje. Wysokość nagrody za wysokie ryzyko, ale tylko jeśli gracz tego chce. Możesz wylądować gdzieś w lesie, masz czas na przygotowanie się - niskie ryzyko niskie nagrody, ale niektórzy gracze mogą go preferować (jak ja, na przykład;)). To NIE jest losowe, przez wybór graczy.

9 Answers


Philipp 07/28/2017.

Pozwól graczom sam wybrać lokalizację początkową.

Na początku gry odradzaj wszystkich graczy znajdujących się na środku mapy, ale bez żadnych możliwości krzywdzenia innych graczy. Będą musieli się rozejrzeć i zdobyć środki, aby się nawzajem zaangażować (zbudować bazę, podnieść broń, zebrać zasoby itp.)

Istnieje odrobina wiedzy na temat szczęścia lub mapy, która pozwala wcześnie znaleźć dobrą lokalizację początkową (w zależności od tego, czy korzystasz z proceduralnych, czy też ręcznie wykonanych map). Ale kiedy i gdzie się osiedlić, jest to głównie decyzja strategiczna. Wdrożenie wcześnie daje przewagę czasową, ale stawia cię w niebezpiecznej pozycji. Zbieranie bazy ostrożnie stawia Cię w tyle na początku gry, ale może być decydującą przewagą w połowie i późnej fazie gry.

5 comments
14 Shashimee 07/28/2017
+1 za używanie systemu odradzania filmów Hunger Games 1.
3 Philipp 07/28/2017
@Shashimee Właściwie uważam, że widziałem tę metodę po raz pierwszy w Anno 1602. Wierzę również, że niektóre z wczesnych gier C & C miały to jako opcjonalną opcję gry dla wielu graczy (ale nie jestem pewien, czy pamiętam to poprawnie).
3 Zibelas 07/28/2017
@Philipp MULE dla Commodore 64 około 15 lat starsze i pozwala wybrać również swoje pozycje :)
Dent7777 07/28/2017
Następnie pojawia się problem, w którym następuje śledzenie do punktu odradzania. Może to być oczywiście pożądana mechanika gry, ale może to być również bardzo frustrujące i nie jest to coś, o czym decydujesz w swojej grze. Dobrym pomysłem byłoby, aby postacie stały się niewidzialne i wolne od kolizji gracza, i znaleźć ich bazę przed rozpoczęciem gry.
Kroltan 07/28/2017
Jest to metoda używana przez linię "Wampiryzm" i "Tree Tag" z niestandardowymi trybami gry w Warcraft 3. Działa najlepiej, ponieważ wszyscy gracze są sprzymierzeni (przynajmniej początkowo), a drużyna przeciwna zostaje zwolniona później.

Theraot 07/28/2017.

Zrozumienie wymagań

  1. Wszyscy gracze mają ograniczoną liczbę sąsiednich wrogów.

Po pierwsze, mówimy o punktach odrodzenia graczy, a nie o aktualnej pozycji graczy w danym momencie gry. Just getting that out of the way.

Sąsiednie jest dobrze zdefiniowane, gdy mówimy o wykresie. Możemy wymyślić mapę, która reprezentuje żeglowność na mapie - od teraz na "wykresie".

Jeśli węzeł może mieć najwyżej jeden punkt odradzania, wówczas sensowne jest mówienie o tym, że są "sąsiednie". Uwaga: nie będę ograniczać węzłów do jednego punktu odradzania co najwyżej z powodów, które będą widoczne później.

Aby zbudować wykres, będziemy musieli wziąć pod uwagę takie elementy, jak ściany, mosty, drabiny, punkty teleportacji, a nawet rozważyć przestrzeń lotu, jeśli może być gracz, który umie latać. Każdy węzeł reprezentuje przejezdną lokalizację; każde połączenie reprezentuje możliwy ruch.

Uwaga: znać rozmiar i kształt węzłów i pracować z faktycznie sąsiednimi węzłami. Nie uważaj węzłów za punkt. Nie traktuj połączeń jako mających długość. Użyj również wypukłych węzłów.

Wykres mógł zostać wstępnie skompilowany (mapa została stworzona przez projektanta); w przeciwnym razie można go utworzyć w locie, jeśli mapa zostanie wygenerowana losowo.

  1. Wszyscy gracze mają równe szanse na spotkanie sąsiednich wrogów.

Zakładam, że wrogowie to inni gracze. Again, just getting that out of the way.

Zakładając, że każdy gracz wykonuje losowy spacer, prawdopodobieństwo znalezienia gracza w danym punkcie - na płaskiej przestrzeni, bez przeszkód - zostanie określone przez funkcję (Gaussa) odległości do punktu odradzania - od teraz " funkcjonować".

Ponieważ pracujemy nad wykresem, zamiast tego dodamy adnotacje do wartości na wykresie.

  1. Rozmiar mapy nie musi się zwiększać proporcjonalnie do liczby graczy.

Gdybyśmy mieli ograniczenie posiadania pojedynczego punktu odradzania na węzeł, to aby dodać więcej graczy potrzebowalibyśmy mniejszych węzłów. Jeśli zdecydujemy się na wykres zanim dowiemy się, ilu graczy będziemy mieć, być może będziemy musieli podzielić węzły dla danej gry.

  1. Ograniczenia te nie są egzekwowane w arbitralnych nieprzekraczalnych przestrzeniach.

Nie zamierzam dodawać przeszkód, aby rozwiązać problem. Au contraire , muszę popracować nad przeszkodami. Gdyby ich tam nie było, wdrożenie byłoby prostsze.


Rozwiązanie

Staramy się umieścić N odradzających się punktów, aby szansa na spotkanie innego gracza na wszystkich punktach odrodzenia była taka sama.

Możemy uzyskać miarę błędu jako sumę różnic szans na średnią szans. Próbujemy to zminimalizować (w rzeczywistości chcemy to zrobić 0).

Aby to zrobić, musimy znać szansę na spotkanie gracza na każdym węźle wykresu.

Aby obliczyć tę szansę, zacznij od zera. Ponieważ szansa na znalezienie gracza w danym węźle, gdy nie ma graczy, wynosi zero. A następnie, dla każdego punktu odradzania, przejdź wykres dodając do adnotowanej szansy wartość funkcji dla bieżącego punktu odradzania.

Uwaga 1: Dodanie lub przesunięcie punktu odradzania się będzie miało wpływ na szansę natknięcia się gracza na całą mapę.

Uwaga 2: Śledzenie, jak wiele punktów odrodzenia wpływa na szansę, ułatwi to.

Uwaga 3: Ponieważ węzły mają rozmiar, odległość do błędu = zero zależy od wielkości węzłów. Możesz być bardziej precyzyjny, pracując z zakresami wartości (minimun i maksyma szansa, w zależności od konkretnej pozycji punktów odradzania w węźle).

Umieść losowo punkty odradzania, a następnie zacznij je przesuwać w taki sposób, aby błąd się zmniejszał (rozważ możliwy ruch, a jeśli zmniejszy błąd, zachowaj go, w przeciwnym razie cofnij). I kontynuuj, dopóki nie będziemy w stanie dalej poprawić (zbyt wiele iteracji bez poprawy lub błąd wynosi zero).

Uwaga 4: Podczas poruszania punktu odradzania się, możesz użyć szansy na spotkanie z graczem (z wyłączeniem punktu odrodzenia, który przeniesiesz), aby losowo wybrać nową pozycję punktu odradzania takiego, że pozycja, która ma szansę napotkać gracza bliżej średnia jest bardziej prawdopodobna. Przypominam, że przesunięcie punktu odrodzenia wpłynie na średnią.

Oczekiwane zachowanie polega na tym, że punkt odrodzenia, które są zbyt blisko siebie, odsuwa się od siebie i odradzają się punkty odradzania, które są zbyt daleko od siebie. Dopóki nie osiągną równowagi.

Jeśli w danej iteracji masz wiele punktów odradzania na węźle (co jest mało prawdopodobne, ponieważ powinny się one odsuwać, ale możliwe, jeśli masz wystarczająco duże węzły), podziel węzeł i kontynuuj rozwiązywanie. Dowolny podział węzła jest ważny.


Powyższe rozwiązanie zbliży się do błędu = zero, ale nie zagwarantuje, że osiągnie zero. Możesz to zrobić, dopóki nie osiągnie lokalnego minimum ... Teoretycznie możesz podzielić węzły tak, by były równe zero ... A jednak jest to odpowiednik poprawienia współrzędnych punktu odradzania!

Spróbuj symulowanego wyżarzania, aby przesunąć punkt odradzania w węźle. Chociaż, szczerze mówiąc, prawdopodobnie nie warto przejmować się takim poziomem szczegółowości.


Chcę wyjaśnić, że wynik dla płaskiej mapy wolnej od przeszkód nie będzie równomiernie rozłożonymi punktami. Zamiast tego, jeśli mapa ma krawędzie (to znaczy, jeśli się nie owija), wtedy więcej punktów odradzania będzie bliżej krawędzi, ponieważ punkty w centrum można dotrzeć z większej ilości kierunków, zwiększając szansę na spotkanie. inni gracze. W ten sposób punkty dalej od siebie blisko centrum, aby zrekompensować.


Zibelas 07/28/2017.

To zależy od tego, jaką grę chcesz stworzyć i jak szybko to się dzieje. Idealny równomiernie rozmieszczony rozkład jest możliwy na świecie podobnym do kuli (na przykład zagłada planetarna). Ale czy jest to dobra opcja w twojej grze? Nawet jeśli wszyscy ludzie spawną się na równej odległości, niektóre spawny mogą mieć jeszcze lepszą przewagę.

  • Bliżej / lepszej broni w zasięgu / więcej zasobów
  • Lepsza osłona / więcej ukrytych / przegląd
  • "przepływ" graczy, niektóre miejsca są bardziej atrakcyjne niż inne (pomyśl o pełnej mapie lasu z jednym domem w jednym miejscu, niezależnie od tego, gdzie jest ten dom, duża szansa, że ​​ludzie to sprawdzą)

Czy twoja mapa jest stała lub wygenerowana przez procedurę? Czy kiedykolwiek próbowałeś grać w Age of Empires z 8 osobami na mapie dwuosobowej? Nie można przeskalować graczy w nieskończoność, nie dostosowując się do rozmiaru mapy. Nawet nieuczciwe umieszczanie początku może przynieść wiele dynamiki w grze (zobacz serię Worms). Nikt nie narzekał, jeśli pojawiłeś się w dużej grupie, tak długo, jak trwała twoja jedna runda sojuszu z innym graczem, albo nie miałeś najbardziej zachowanych robaków po pierwszej rundzie.

(Dodam jeszcze kilka przykładów, jeśli wiem więcej o twoim typie gry)


Aric Fowler 07/28/2017.

Idąc na coś, czego nie sugerowano do tej pory: spraw, aby nie było centrum mapy. Mam na myśli to, że krawędzie mapy łączą się po przeciwnych stronach. To wymagałoby wiele pracy programistycznej, ale w praktyce może sprawić, że poziom będzie się powtarzać w nieskończoność, jeśli idziesz w jednym kierunku. Oznacza to, że nie ma centrum, a losowa pozycja odrodzenia nie będzie miała żadnych zalet ani wad.

Możesz to zrobić, tworząc płaską mapę, która jest kwadratowa i łącząc każdą krawędź z kopią przeciwnej krawędzi. Kiedy gracz odchodzi z boku, zostaje teleportowany bez wiedzy gracza na przeciwną krawędź. Oczywiście, teoretycznie nie będziesz w stanie zobaczyć graczy po drugiej stronie granicy. Aby to naprawić, stwórz klony tego gracza, które wydają się chodzić po drugiej stronie granicy, abyś mógł je zobaczyć, a kiedy biegniesz w ich kierunku, teleportujesz się w poprzek, a rzeczywisty gracz stoi tam, gdzie był manekin.

Alternatywnie, cała mapa może istnieć na zewnątrz kuli, jednak to utrudnia koordynację współrzędnych.

1 comments
2 Avery 07/29/2017
Albo zrób mapę, która w centrum, można polować lub polować, a także łatwiej znaleźć łupy, ale znowu możesz polować w ten sposób, aw obszarach poza centrum zrobić tak, że gracze mają mniejsze szanse na znalezienie innych użytkowników i zdobycie łupów, więc jeśli chcą więcej łupów, muszą iść do centrum, jeśli chcą dłużej przetrwać, będą musieli pozostać tam, gdzie są. Zasadniczo więc wadą losowych spawnów jest przewaga.

dnk drone.vs.drones 07/28/2017.

Oto kilka możliwych rozwiązań:

  • Namnażaj się losowo na obwodzie koła
  • Pomieszaj losowo na promieniu (nie tarła, aby zamknąć centrum)
  • Dodaj element losowy czasu odradzania

Schemat mechanizmów odradzania

2 comments
Zanon 07/28/2017
Drugi obraz to świetna opcja. Rozwiązuje problem pierwszej opcji, w której gracz dokładnie wie, gdzie znajdują się wszyscy inni gracze.
Avery 07/29/2017
@Zanon choć z pierwszym graczem obrazu może (i prawdopodobnie będzie) odejść, zanim ktoś tam przyjdzie. Druga spowoduje nieuczciwe spawns, niektóre blisko innych. Może coś takiego, gdzie są 2 koła, a różnica pomiędzy mniejszym a większym jest tam, gdzie się odradzają, tak jak drugi obraz, ale mniej do środka.

MrCranky 07/28/2017.

Zasadniczo uważam, że jest to problem z dystrybucją wykresów. Zakładając, że sytuacja w trybie deathmatch (każdy inny gracz jest wrogiem), musisz zamodelować swoje mapy jako wzajemnie połączony wykres i śledzić, który węzeł na wykresie jest najbliższy każdemu graczowi. Nie każdy węzeł musi być punktem odradzania, ale potrzebny jest złożony wykres do modelowania odległości między punktami odrodzenia. W czasie odradzania, jesteś następnie iteruje wykres i punktuje każdy spawny węzeł na podstawie tego, czy pobliskie węzły mają graczy.

Idealny węzeł ma wtedy:

  • Brak obecnie graczy
  • Ponad zero graczy w pobliżu węzłów (niewielka liczba odsyłaczy)

Wyobraź sobie, że twój wykres został uregulowany i rysujesz koncentryczne strefy wokół każdego węzła. Penalizujesz węzeł, jeśli wewnętrzne strefy mają już w nim graczy i nagradzają węzły, które mają graczy w odpowiedniej odległości. Chcesz zachęcić tarlowanie na tyle blisko, aby inni gracze mogli szybko znaleźć zainteresowanie, ale nie tak blisko, że skakali, zanim mieli szansę na zdobycie pozycji.

Będziesz musiał zwiększyć rozmiar mapy, ponieważ liczba graczy rośnie, ale k nie musi być 1 lub większa. Twoim najgorszym przypadkiem nadal będzie to, że każdy węzeł na wykresie ma co najmniej jednego gracza - w takim przypadku nie ma dobrych węzłów do użycia, a ty będziesz musiał cierpieć z tego powodu i odrodzić gracza wiedząc, że będą lądować tuż nad drugim. Algorytm oceniania powinien nadal ważyć węzły, abyś odrodził się w węźle z najmniejszą liczbą innych graczy.

Pamiętaj, że twój wykres mapy będzie musiał być starannie zbudowany, ze znajomością mapy, jej tras, punktów kontrolnych i effective odległości między punktami węzłowymi, a nie actual odległością. Tak jak w przypadku, użyj czegoś takiego jak zmierzony czas do przejścia między węzłami, a nie odległości, aby uwzględnić trudniejszy teren. Musisz również uwzględnić open-ness vs cover; dwa węzły mogą być fizycznie oddalone od siebie, ale ponieważ są bardzo otwarte, pojawienie się gracza w każdym węźle może oznaczać, że są one równie wrażliwe, jak gdyby zostały stworzone tuż obok siebie.

Udoskonalenia:

  • Dodaj tymczasową karę do zdobycia punktów, jeśli gracz pojawił się ostatnio w tym węźle, aby powstrzymać tworzenie się punktów chokepunktów (niekończący się strumień graczy przybywających z tego samego kierunku i zbieranych)
  • Dodaj losowość w obrębie zakresu (np. Wybierz najlepsze 3 węzły, a następnie losowo wybieraj między nimi z równym prawdopodobieństwem), aby uzyskać więcej zmian.
  • Dodaj początkową wagę do środka mapy (lub najciekawszych punktów), gdy nikt jeszcze się nie spawnował, abyś odrodził się w znanych miejscach, nawet jeśli każdy węzeł ma wynik zero, ponieważ nie ma innych graczy.

Aaron 07/28/2017.

Kilka innych omówiło już ograniczenia twoich wymagań (mapa będzie musiała się skalować w pewnym momencie, aby zapobiec przepełnieniu itp.), I ostatecznie uniknęła tego, że prawdopodobnie nie ma "idealnego" algorytmu umieszczania. Kiedy prawdopodobnie nie ma "idealnego" algorytmu, zawsze szukam heurystyki. Masz kilka kryteriów, które są bezpośrednio lub pośrednio sprzeczne ze sobą, wraz z bardzo skomplikowaną przestrzenią wyszukiwania. Znalezienie optymalnego rozwiązania może nie być wykonalne lub praktyczne, ale przy niewielkim strojeniu podejście statystyczne może osiągnąć bardzo dobre wyniki w większości przypadków.

Adresowanie trzeciego i czwartego kryterium: "The map shouldn't have to expand."

Upewniam się, że na początku masz nadmiar węzłów (np. Gęsty jak siatka nawigacyjna do wyszukiwania ścieżek). To sprawia, że ​​obliczanie dystansu do innych graczy jest droższe (nie sąsiednie węzły), ale nie jest to proces, który odbędzie się więcej niż raz na rundę (zakładam). Dodatkową korzyścią jest to, że w większości operacji można użyć wstępnie zwiniętej biblioteki nawigacji. Dodatkowo będzie to szanować przemierzanie przeszkód w uczciwy sposób, gdzie odległość euklidesowa może nie (gracze w labiryncie mogą być umieszczeni bliżej siebie niż na otwartym polu)

Oblicz heurystykę dla pożądanych cech odrodzenia:

Po losowym umieszczeniu wszystkich graczy, obliczyć wydajność otaczających węzłów w oparciu o twoje kryteria (odległość od innych graczy, odległość odrodzenia, itp.) Wagi twoich wartości mogą zostać zmodyfikowane i zmanipulowane, aby były nieliniowe, aby dostroić dokładnie wydajność chcesz w idealnym, zdezynfekowanym przypadku (płaska prostokątna siatka bez przeszkód), a wydajność powinna być podobna, gdy dodasz świat z powrotem. Stamtąd możesz zdecydować, ile węzłów przeszukać, jaki jest próg przemieszczania punktu początkowego oraz liczbę iteracji, które chcesz wykonać przed sfinalizowaniem odrodzenia i rozpoczęciem gry.


Anton Sherwood 07/29/2017.

Jeśli pole gry jest topologicznym torusem (tj. Prostokątem, w którym wyjście poza granice oznacza wejście po przeciwnej stronie), prawdopodobnie będzie to dobra odpowiedź: gracz j spawnuje na x = (pjW/N) mod W, y = (qjH/N) mod H , gdzie W,H to wymiary prostokąta, N to liczba graczy, a p,q to liczby całkowite do ustalenia; są one odrębne, (prawdopodobnie) stosunkowo dobre i nie za daleko od sqrt(N) . Punkty odrodzenia tworzą ukośny wzór "tapety".

Przypuszczam, że gracze pojawiają się tylko na początku gry. Jeśli odradzą się później, myślę, że chciałbyś umieścić je jak najdalej od aktualnej pozycji dowolnego gracza - na wierzchołku diagramu Voronoi zdefiniowanego przez innych graczy.


NotThatGuy 07/31/2017.

Co powiesz na:

Każdy gracz otoczony jest nie-spawning box (lub kółkiem).

Tak jak w grze, istnieje kwadrat o pewnym rozmiarze, który pojawia się wokół każdego gracza i podąża za tym graczem - żaden inny gracz nie może odrodzić się w tym kwadracie.

Te kwadraty wpływają tylko na tarło, a nie na ruch podczas gry.

Działa to zarówno w przypadku początkowego tarła, jak i ciągłego tarła.

(Kropki wskazują graczy, a kolor zielony wskazuje na możliwą strefę odrodzenia dla nowych graczy)

Rozmiar mapy nie musi się zwiększać proporcjonalnie do liczby graczy

Aby sobie z tym poradzić, możesz zrobić jedną z dwóch rzeczy: (lub obie)

  • Zmniejsz rozmiar pól niezarodowujących na podstawie liczby graczy.
  • Zezwalaj maksymalnie X wrogom na odradzanie się w każdym polu.
    • Liczba ta może wzrosnąć w miarę upływu czasu (od 0).
    • Wariant 1: mieć mniejsze pole bez odrodzenia i większe ograniczone miejsce odrodzenia.
    • Wariant 2: prawdopodobieństwa wagi według tego, jak blisko nowego spawnu jest dla tego gracza (jeśli jest w pudełku) - może być trudne do skutecznego wdrożenia.

Related questions

Hot questions

Language

Popular Tags