Чи можу я перешкодити діагональному руху вивчити більше карти?


57

Чи можу я запобігти появі діагонального руху більше, ніж ортогональний рух, у будь-якому з 8 напрямків руху в будь-якому з 8 напрямків відбувається рівно стільки ж витків (правила стилю шахової дошки)?

Наприклад: Ви червоне поле на зображенні нижче. Зараз зелені клітини видно вам (квадратне поле зору). Ви можете перемістити відстань однієї плитки в будь-якому з восьми напрямків.

Якщо ви рухаєтесь на північний схід , ви вивчите 13 нових плиток (зображених синім кольором). Якщо ви замість цього рухаєтесь на південь , ви вивчите лише 7 нових плиток (зображених фіолетовим кольором).

сітка з видимістю залежно від положення

Як я можу зробити подорожі в кожному напрямку однаково сприятливими для вивчення?


27
Це принциповий недолік при створенні подібної гри. Вам потрібно або не дозволити рух по діагоналі або перейти на щось на зразок шестигранної сітки, у якої немає цієї проблеми.
Тетрад

1
@Tetrad Ви не помиляєтесь у тому, що це недолік, але ви, мабуть, не розумієте, наскільки це поширено в таких іграх .
Містер Сміт

8
У будь-якій грі, де ортогональний і діагональний рух однаково швидкі, завжди знайдуться речі, за якими діагональний рух краще, ніж ортогональний рух, і навпаки. Це просто не вирішується - якщо ви заткнете один отвір, відкриється інший.
Паташу

3
Не зовсім відповідь, але чи можна у вашій грі зробити діагональний хід тривалішим, ніж ортогональний, як пропорційний довжині діагоналі? По-друге, ви можете мати змішане рішення, коли рух використовує алмазний малюнок, а відстань перегляду використовує квадратний?
Vality

2
Ще одна не зовсім відповідь: ортогональні рухи поводяться так, як зараз, але діагональні рухи призводять до того, що джерело світла стає «нечітким» - воно не розкриває всі 13 квадратів, які щойно потрапили в діапазон, а лише 7 (або так) з них, визначених випадковим чином.
Snowbody

Відповіді:


67

Dungeons and Dragons 3.5 (RPG-pen-paper) має рішення, яке використовується як для обчислення радіусу на основі руху, так і для сітки: рух по діагоналі коштує 1,5, ніж ортогональні витрати. Оскільки діагональ одиничного квадрата дорівнює приблизно 1,414, 1,5 досить близько.

Оскільки D&D 3.5 підтримує лише цілочисельний рух, то, як це фактично обчислюється, полягає в тому, що ортогональний рух коштує "один квадрат". Ваш перший діагональний рух також коштує лише "один квадрат", а другий діагональ коштує "два квадрати". Ви чергуєте один і два квадрата для кожного діагонального ходу. Реалізація цього правила руху у вашій грі дозволить вирішити декілька проблем з діагональним рухом.

Як показано на цій діаграмі, це правило руху створює розумне наближення кіл, а також не вимикається більш ніж на 1 порівняно з справжньою відстані (коли в межах 15 одиниць початку).

введіть тут опис зображення

Якщо ваш радіус зору / дослідження також обчислюється таким чином, рух діагоналі та діагоналі будуть приблизно такими ж близькими або ортогональними.


Саме те, що я хотів запропонувати. Хоча варто відзначити, що ця стратегія потрапляє в обмеження руху, якщо персонаж може рухатись лише одним пробілом за поворот (що, мабуть, випливає з діаграми запитання?). Ви могли б "запам'ятати", якщо вони знаходяться на непарних / парних діагоналях між поворотами, хоча це може заплутати / засмучувати гравця. Незважаючи на це, це добре працює в питанні видимості.
Alexis Beingessner

5
@AlexisBeingessner, правда. І запитуючий вказував, що він хоче шаховий рух, але я вважаю, що, оскільки це сайт для розробки комп'ютерних ігор, я зазначив би хороше ігрове рішення. Якщо це більше загадка чи чисте математичне запитання, я б очікував цього на іншому сайті. Якщо це для гри, схожої на шахрайство, деякі з них вже підтримують різну швидкість руху.
Датчанин

Більшість ігор Roguelike здаються покроковими, але насправді мають часовий компонент, тому, якщо ви рухатиметесь по діагоналі, інші об’єкти матимуть більше часу на реакцію, перш ніж ви зможете зробити інший хід.
Кос

67

Потрібно змінити форму поля зору.

Так що коли ви рухаєтеся в будь-якому напрямку, стає видно однакова кількість нових квадратів.

Ось одна з можливостей:

приклад сітки


5
Цікаво; Я ніколи не розглядав алмазне поле зору. Однак з цим поглядом існує проблема; страшна ідея подорожувати по діагоналі зараз, адже якщо ви помітите ворога під час подорожі по діагоналі, він буде значно ближче до вас, ніж якби ви подорожували ортогонально.
Містер Сміт

43
@ mr.smith, так, це нова проблема, але я вирішив вашу стару ...
ChargingPun

Дійсно, ти зробив; здається, я не був достатньо конкретним питанням.
Містер Сміт

8
Чи допомогла б тут кругла форма?
amitp

3
@amitp Це є круглою формою - при умови , ваша функція відстані Манхеттенський відстані.
Даніель Вагнер

27

Щоб діагональний і ортогональний рух виявили приблизно однакову область, вам потрібно дві речі (кожна з яких, поодинці, вже запропонована в іншій відповіді або коментарі):

  1. Приблизно діапазон кругового перегляду :

    Зображення діапазону псевдокругового виду

    Сам по собі це не дасть абсолютно однакової виявленої області для обох типів руху. Наприклад, на зображенні, наведеному вище, ортогональний рух виявляє 9 квадратів, тоді як рух по діагоналі показує 13. Це все ж краще, ніж співвідношення 13/7 для площі подання у вашому прикладі.

    Насправді, у міру збільшення радіуса зору співвідношення виявлених площ на діагональний / ортогональний крок має тенденцію до √2 ≈ 1,414 для кругової області, тоді як таке ж відношення для площі зору квадратного виду має тенденцію до 2.

  2. Повільний рух по діагоналі :

    У реальному житті ходіння по діагоналі через квадратне поле займає більше часу, ніж ходіння по одній із сторін. Насправді це займає приблизно √2 ≈ 1,414 рази довше. Якщо ви хочете, щоб рух у вашій грі здавався реалістичним, вам слід також зробити це у вашій грі.

    На практиці 3/2 = 1.5 є досить хорошим наближенням √2. Таким чином, ви можете просто змусити кожен ортогональний крок взяти дві одиниці часу, а кожен діагональний крок зробити три. У наведеному вище прикладі області перегляду виходить 9/2 = 4,5 виявлених квадратів на одиницю часу для ортогонального руху, а 13/3 = 4,33 виявлені квадрати на одиницю часу для діагонального руху. Досить близько, так?

    Крім того, якщо ви хочете дотримуватися "1 крок = 1 одиниця часу" для ортогонального руху, ви можете використовувати щось на кшталт запропонованої Dane системи D&D, і кожен другий діагональний крок вимагає додаткового повороту. (Якщо ви це зробите, вам потрібно надати кожному блоку явний лічильник того, скільки діагональних кроків вони зробили; інакше у вас може виникнути подвиги, наприклад, E, NE, E, NE, .. . послідовність рухів, що дозволяє гравцеві досліджувати швидше, ніж передбачалося.)


Найпростішим способом запобігання подібних подвигів було б сказати, що витрати на діагональний рух займають два кліща, за винятком випадків, коли передує рух у тому ж напрямку, який брав два кліщі.
supercat

1
@supercat: Це правда, але це дозволить залишити послідовність E, NE, E, NE, ... помітно менш ефективною для дослідження, ніж прямий ортогональний / діагональний рух, що може бути і небажаним.
Ільмарі Каронен

Це залишило б цю послідовність менш ефективною, але що робити? Не всі методи дослідження повинні бути однаково ефективними. Насправді може бути непогано встановити часовий штраф за зміну орієнтації, за винятком випадків, коли переміщення до або після було двократною діагоналлю.
supercat

2
Я щось подібне робив назад, і я вирішив це, ортогональний рух коштував двох "тиків" на квадрат, а діагональний рух коштував три.
Мейсон Уілер

11

Оскільки ви використовуєте сітку і знаєте, в якому напрямку рухається користувач, нічого не заважає вам адаптувати попередню відповідь та використовувати різні поля зору в залежності від напрямку.

Наприклад, ви можете розширити поле, щоб включити кути, коли ви подорожуєте в кардинальних напрямках, і зменшити його на два квадрати на кожному кінці у діагональних випадках, щоб кожен розкрив 9 квадратів.

Іншою альтернативою, залежно від того, як працює ваше освітлення, було б використання кращого наближення кола до антиаліаса, щоб частково розкрити деякі квадрати.


Це цікавий компроміс; якщо ви рухаєтесь по діагоналі, не всі види комірок, які зазвичай були б видимими, були видимими. Можна або почекати повороту (щоб вивчити ці клітини), або продовжити рух.
Містер Сміт

8
яка відповідь - "попередня відповідь"?
Mooing Duck

7

Як щодо того, а не фіксований діапазон перегляду, чи може зона видимості гравця залежати від того, в якому напрямку гравець стикався, а також, можливо, від напрямку гравця, який стикався в останні кілька поворотів (гравець, який рухався на північ, може бути в змозі негайно зробіть крок на південь, але, можливо, зробіть кілька поворотів, щоб отримати максимальну відстань перегляду в цьому напрямку). Гравець, який прямує на північ із вузького коридору у велику кімнату і продовжує подорожувати на північ, обмежив би видимість на схід і захід, і, мабуть, повинен. Коли гравець перестає рухатись, система може автоматично «досліджувати» невидимі ділянки, які знаходяться в теперішньому радіусі зору гравця, але, хоча гравець активно рухає поле зору, слід бути обмеженим.


3

В якості альтернативи більш складному зору зору (яке, як обговорювалося вище, додає власні проблеми через обмеження макета на основі сітки), ви можете спробувати імітувати ефект руху в грі, що не ґрунтується на дискретному сітка. Там, де вільний рух можливий, діагональне переміщення однієї одиниці було б саме таким, а не ~ 1,41 одиниці руху, що спостерігається квадратною сіткою.

Хоча ви не можете змусити один рух рухатись, не втрачаючи сітчастої сітки (що помітно змінить ваш дизайн гри), можливо, ви зможете відслідковувати додатковий рух, зроблений та відхилений, рухатися пізніше: відстежуйте зайві 0,41 і як тільки вони набирають більше 1.00 мають цей блок пропустити хід. Або навпаки: вважайте, що діагональ є нормальною, додайте 0,41 для кожного горизонтального чи вертикального ходу та надайте додатковий кредит ходу один раз, який більший за 1 (або 1,41 для діагонального ходу).

Вам потрібно бути уважним, як ви представляєте це своїм гравцям таким чином, щоб це виглядало як гладко, так і справедливо. У сценарії з різними людьми-гравцями такі зміни можуть стати чимось стратегічним перевагою гравців - це може бути проблемою, або може бути природний спосіб поєднати це з ігровим механіком (можливо, дозволити гравцям зберігати невеликий кількість "невикористаного кредиту для переміщення", який вони можуть використати для швидкої реакції та отримання додаткових 0,41 переїзду в цей пул (або зняття з нього).

Це найкраще спрацювало, якби суб'єкти управління гравцем рухалися, ніж по одній одиниці кожного ходу. Наприклад, три точки руху можуть бути використані як три хоргональні ходи, або дві діагональні з 0,16, залишеними в пулі для подальшого. Після того, як він потрапить у 1.00, гравець отримує "вільний" хор / дуже рух, а в 1.41 - вільну діагональ. Ви можете обмежити додатковий на 1,5, щоб змусити його використовувати або втратити в цей момент, щоб зупинити гравця, зберігаючи цю накопичену енергію на віки або дозволяючи їй нарощувати.

Очевидно, це складність ваших правил гри, яка може бути абсолютно небажаною, і це буде недоцільно для некомп'ютерної гри, але якби ви могли змусити її працювати в рамках існуючих правил вашої гри, це обмежило б різницю в дослідженні між напрямками руху без необхідності. відмовитися від формату сітки.


2

Ви можете змусити гравця переміщати два пробіли, якщо вони рухаються вгору, вниз, вліво або вправо, і лише один по діагоналі. Це не вийшло б навіть повністю, але це було б набагато ближче.


Це гарна ідея, але я вважаю рівнозначним просто забороні руху по діагоналі (оскільки діагональ - це лише два ортогональні ходи)
Vality
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.