Czy mogę uniemożliwić ruch po przekątnej eksplorację większej części mapy?

57

Czy na siatce kafelków, w której ruch w dowolnym z 8 kierunków zajmuje dokładnie taką samą liczbę tur (zasady stylu szachownicy), czy mogę zapobiec wyświetlaniu większej liczby nowych ruchów po przekątnej przez ruch po przekątnej?

Na przykład: Jesteś czerwonym polem na obrazku poniżej. Zielone komórki są obecnie widoczne (kwadratowe pole widzenia). Możesz przesunąć odległość jednego kafelka w dowolnym z ośmiu kierunków.

Poruszając się na północny wschód , odkryjesz 13 nowych płytek (pokazanych na niebiesko). Jeśli zamiast tego przejdziesz na południe , odkryjesz tylko 7 nowych płytek (pokazanych na fioletowo).

siatka z widocznością zależną od pozycji

Jak sprawić, by podróżowanie w każdym kierunku było równie korzystne dla eksploracji?

Pan Smith
źródło
27
Jest to podstawowa wada projektu takiej gry. Musisz albo nie pozwolić na ruch ukośny, albo przejść na coś w rodzaju siatki sześciokątnej, która nie ma tego problemu.
Tetrad
1
@Tetrad Nie mylisz się co do tego, że jest to wada, ale prawdopodobnie nie zdajesz sobie sprawy, jak powszechne jest to w takich grach .
Pan Smith
8
W każdej grze, w której ruch ortogonalny i diagonalny są równie szybkie, zawsze będą pewne rzeczy, dla których ruch diagonalny jest lepszy niż ruch ortogonalny i odwrotnie. Po prostu nie da się go rozwiązać - jeśli zatkasz jedną dziurę, otworzy się inna.
Patashu,
3
Nie do końca odpowiedź, ale czy w twojej grze możliwe jest, aby ruch po przekątnej trwał dłużej niż ruch prostopadły, proporcjonalnie do długości po przekątnej? Po drugie, możesz mieć mieszane rozwiązanie, w którym ruch wykorzystuje wzór rombu, a odległość widoku - kwadratowy?
Rzeczywistość
2
Kolejna niezupełnie odpowiedź: ruchy ortogonalne zachowują się tak jak teraz, ale ruchy diagonalne powodują, że źródło światła staje się „rozmyte” - nie ujawnia wszystkich 13 kwadratów, które właśnie znalazły się w zasięgu, ale tylko 7 (lub tak) z nich, losowo określone.
Snowbody

Odpowiedzi:

67

Dungeons and Dragons 3.5 (RPG na papierze) ma rozwiązanie stosowane zarówno do obliczeń ruchu, jak i promienia siatki: ruch po przekątnej kosztuje 1,5, co kosztuje ortogonalność. Ponieważ przekątna kwadratu jednostkowego wynosi około 1,414, 1,5 jest dość blisko.

Ponieważ D&D 3.5 obsługuje tylko ruchy całkowite, sposób, w jaki jest to obliczane, polega na tym, że ruch ortogonalny kosztuje „jedno pole”. Twój pierwszy ruch po przekątnej kosztuje tylko „jeden kwadrat”, ale druga przekątna kosztuje „dwa kwadraty”. Zamieniasz jeden i dwa kwadraty dla każdego ruchu po przekątnej. Wdrożenie tej reguły ruchu w grze rozwiąże kilka problemów z ruchem ukośnym.

Jak pokazuje ten schemat, ta reguła ruchu tworzy rozsądne przybliżenie okręgów, a także nie jest wyłączana o więcej niż 1 w porównaniu z rzeczywistą odległością (w odległości 15 jednostek od początku).

wprowadź opis zdjęcia tutaj

Jeśli twój promień widzenia / eksploracji jest również obliczany w ten sposób, ruch po przekątnej i odkrycia po przekątnej będą tak bliskie lub dalekie, jak odkrycia ortogonalne.

Duńczyk
źródło
Dokładnie to, co chciałem zasugerować. Chociaż warto zauważyć, że strategia ta przewraca się pod względem ograniczania ruchu, jeśli postać może poruszać się tylko o jedno pole na turę (co wydaje się być na schemacie pytania?). Możesz „pamiętać”, jeśli między turami znajdują się na nieparzystych / parzystych przekątnych, chociaż może to być mylące / frustrujące dla gracza. Niezależnie od tego działa to dobrze w kwestii widoczności.
Alexis Beingessner
5
@AlexisBeingessner, true. Pytający wskazał, że chce ruchu podobnego do króla szachów, ale sądzę, że skoro jest to strona z grami komputerowymi, wskazałbym dobre rozwiązanie do gry. Jeśli jest to bardziej zagadka lub czysto matematyczne pytanie, oczekiwałbym tego na innej stronie. Jeśli jest to gra typu łotrzyk, niektóre z nich obsługują już różne prędkości ruchu.
Dane
Większość gier Roguelike wydaje się być turowa, ale w rzeczywistości ma składnik czasu, więc jeśli poruszasz się po przekątnej, inne obiekty będą miały więcej czasu na reakcję, zanim wykonasz kolejny ruch.
Kos
67

Musisz zmienić kształt pola widzenia.

Tak więc, gdy poruszasz się w dowolnym kierunku, widoczna jest taka sama liczba nowych kwadratów.

Oto jedna z możliwości:

przykład siatki

ChargingPun
źródło
5
Ciekawy; Nigdy nie rozważałem diamentowego pola widzenia. Istnieje jednak problem z tym widokiem; podróżowanie po przekątnej jest teraz okropnym pomysłem, ponieważ jeśli zauważysz wroga podczas podróży po przekątnej, będzie on znacznie bliżej Ciebie niż w przypadku podróży prostopadłej.
Pan Smith
43
@ mr.smith, tak, to nowy problem, ale rozwiązałem twój stary ...
ChargingPun
Rzeczywiście zrobiłeś; wygląda na to, że nie byłem wystarczająco konkretny z pytaniem.
Pan Smith
8
Czy pomoże tutaj okrągły kształt?
amitp
3
@amitp Jest to okrągły kształt - pod warunkiem, że funkcją odległości jest odległość Manhattanu.
Daniel Wagner
27

Aby ruch ukośny i ortogonalny ujawniał w przybliżeniu ten sam obszar, potrzebujesz dwóch rzeczy (z których każda, sama, została już zasugerowana w innej odpowiedzi lub komentarzu):

  1. Przybliżony okrągły widok :

    Obraz pseudokołowego zakresu widoku

    Samo w sobie nie da to dokładnie takiego samego ujawnionego obszaru dla obu rodzajów ruchu. Na przykład na powyższym obrazie ruch ortogonalny ujawnia 9 kwadratów, a ruch ukośny ujawnia 13. Jest to jednak nadal lepszy niż stosunek 13/7 dla kwadratowego obszaru widoku w twoim przykładzie.

    W rzeczywistości, wraz ze wzrostem promienia widoku, stosunek obszarów ujawnionych na krok po przekątnej / ortogonalnym dąży do √2 ≈ 1,414 dla obszaru kołowego, podczas gdy ten sam stosunek dla pola widzenia kwadratowego dąży do 2.

  2. Wolniejszy ruch po przekątnej :

    W prawdziwym życiu spacer po przekątnej przez kwadratowe pole zajmuje więcej czasu niż spacer po jednej ze stron. W rzeczywistości zajmuje to około √2 ≈ 1,414 razy dłużej. Jeśli chcesz, aby ruch w grze wydawał się realistyczny, powinieneś to zrobić również w swojej grze.

    W praktyce 3/2 = 1,5 to całkiem dobre przybliżenie √2. Zatem możesz po prostu sprawić, aby każdy krok ortogonalny zajął dwie jednostki czasu, a każdy krok po przekątnej zajął trzy. W powyższym przykładowym obszarze widoku daje to 9/2 = 4,5 ujawnionych kwadratów na jednostkę czasu dla ruchu ortogonalnego, a 13/3 = 4,33 ujawnionych kwadratów na jednostkę czasu dla ruchu po przekątnej. Całkiem blisko, co?

    Alternatywnie, jeśli chcesz trzymać się „1 krok = 1 jednostka czasu” dla ruchu ortogonalnego, możesz użyć czegoś takiego jak sugerowany system D&D Dane i sprawić, że co drugi krok po przekątnej zużyje dodatkowy obrót. (Jeśli to zrobisz, musisz podać każdej jednostce wyraźny licznik wykonanych kroków po przekątnej; w przeciwnym razie możesz skończyć z exploitami, na przykład E, NE, E, NE, ... . sekwencji ruchu, dzięki czemu gracz, aby zbadać szybciej niż to było zamierzone).

Ilmari Karonen
źródło
Łatwym sposobem zapobiegania takim wyczynom byłoby stwierdzenie, że koszty ruchu po przekątnej wymagają dwóch tyknięć, chyba że poprzedza je ruch w tym samym kierunku, który wymagał dwóch tyknięć.
supercat
1
@ supercat: To prawda, ale to sprawiłoby, że sekwencje E, NE, E, NE, ... były znacznie mniej efektywne w eksploracji niż prosty ruch prostopadły / ukośny, co również może nie być pożądane.
Ilmari Karonen,
Sprawiłoby, że ta sekwencja byłaby mniej wydajna, ale co z tego? Nie wszystkie metody eksploracji powinny być równie skuteczne. W rzeczywistości karą czasową za zmiany orientacji może nie być źle, z wyjątkiem przypadków, w których ruch przed lub po nim był podwójnie naładowany po przekątnej.
supercat
2
Jakiś czas temu zrobiłem coś podobnego i rozwiązałem to, ponieważ ruch ortogonalny kosztował dwa „tiki” na kwadrat, a ruch ukośny kosztował trzy.
Mason Wheeler,
11

Ponieważ używasz siatki i wiesz, w którym kierunku podąża użytkownik, nic nie stoi na przeszkodzie, aby dostosować wcześniejszą odpowiedź i użyć różnych pól widzenia w zależności od kierunku.

Na przykład możesz rozszerzyć pole, tak aby obejmowało narożniki podczas podróży w głównych kierunkach i zmniejszyło je o dwa kwadraty na każdym końcu w skrzyniach po przekątnej, aby każdy odkrył 9 kwadratów.

Inną alternatywą w zależności od tego, jak działa oświetlenie, byłoby lepsze przybliżenie okręgu z wygładzaniem krawędzi, aby częściowo odsłonić niektóre kwadraty.

użytkownik43497
źródło
To interesujący kompromis; jeśli podróżujesz po przekątnej, nie wszystkie komórki, które normalnie byłyby widoczne, będą widoczne. Możesz albo poczekać kolej (aby zbadać te komórki), albo kontynuować ruch.
Pan Smith
8
która odpowiedź jest „odpowiedzią wcześniejszą”?
Kaczka Mooing
7

A może zamiast mieć ustalony zasięg widzenia, obszar widoczności gracza zależy od kierunku, w którym gracz był skierowany, a także od kierunku, w którym gracz był skierowany w ostatnich kilku turach (gracz, który poruszał się na północ, może natychmiast zrób krok na południe, ale może zająć kilka obrotów, aby uzyskać maksymalną odległość oglądania w tym kierunku). Gracz, który kieruje się na północ wąskim korytarzem do dużego pokoju i kontynuuje podróż na północ, miałby ograniczoną widoczność na wschód i zachód i prawdopodobnie powinien. Gdy gracz przestaje się poruszać, system może automatycznie „eksplorować” niewidoczne obszary, które znajdują się w aktualnym promieniu wzroku gracza, ale gdy gracz aktywnie porusza się, pole widzenia powinno być bardziej ograniczone.

supercat
źródło
3

Jako alternatywę dla bardziej złożonego pola widzenia (które, jak omówiono powyżej, dodaje własne problemy z powodu ograniczeń układu opartego na siatce), możesz spróbować naśladować efekt ruchu w grze, która nie jest oparta na dyskretnym krata. Tam, gdzie możliwy jest swobodny ruch, ruch po przekątnej jednej jednostki byłby dokładnie taki, a nie ~ 1,41 jednostki ruchu widzianej z kwadratową siatką.

Chociaż nie możesz wymusić ruchu pojedynczej jednostki bez utraty descreet gridu (co znacznie zmieniłoby Twój projekt gry), być może mógłbyś śledzić dodatkowy ruch podjęty i upuścić ruchy później: śledź dodatkowe 0,41 s, a gdy sumują się one później niż 1.00 niech ta jednostka pominie ruch. Lub na odwrót: uważaj przekątną za normalną, zsumuj 0,41 dla każdego ruchu poziomego lub pionowego i dodaj dodatkowy kredyt za ruch, który jest większy niż 1 (lub 1,41 dla ruchu ukośnego).

Musisz uważać, jak przedstawisz to swoim graczom w sposób, który sprawi, że będzie wyglądał zarówno gładko, jak i sprawiedliwie. W scenariuszu z wieloma graczami takie zmiany mogą stać się czymś, co gracze wykorzystują strategicznie - może to stanowić problem lub może istnieć naturalny sposób na połączenie tego z mechaniką gry (być może pozwolą graczom na przechowywanie małej kwota „niewykorzystanego kredytu na ruch”, którą mogą wykorzystać, aby szybko zareagować w późniejszym czasie i mieć dodatkowe 0,41 s ruchu na zasilenie (lub wyciągnięcie) z tej puli.

To działałoby najlepiej, gdyby jednostki kontrolujące gracza poruszały się o jedną jednostkę w każdej turze. Na przykład trzy punkty ruchu mogą być użyte jako trzy ruchy w poziomie lub dwa ukośne z 0,16 pozostawionymi w puli na później. Gdy osiągnie 1,00, gracz otrzymuje „wolny” hor / bardzo ruch, a przy 1,41 darmowy przekątny. Możesz ograniczyć dodatkową wartość 1,5, aby zmusić ją do użycia lub zagubienia w tym momencie, aby powstrzymać gracza od przechowywania tej zgromadzonej energii przez wieki lub pozwalania na jej wzrost.

Oczywiście jest to komplikacja twoich zasad gry, która może być całkowicie niepożądana, i byłoby niepraktyczne w przypadku gry nieskomputeryzowanej, ale jeśli możesz sprawić, by działała w ramach istniejących zasad gry, ograniczyłaby różnicę eksploracji między kierunkami ruchu bez potrzeby porzucić format siatki.

David Spillett
źródło
2

Możesz zmusić gracza do przesunięcia się o dwa pola, jeśli poruszą się w górę, w dół, w lewo lub w prawo i tylko o jedno pole po przekątnej. Nie wyrównałoby to całkowicie, ale byłoby znacznie bliżej.

drdavehere
źródło
To dobry pomysł, ale uważam, że jest to równoważne z po prostu zakazem ruchu po przekątnej (ponieważ przekątna to tylko dwa ruchy ortogonalne)
Rzeczywistość