Випадкові випадкові точки?

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

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

Чи є спосіб формування краплинних точок або змінити карту так, щоб:

  1. У всіх гравців є обмежена кількість сусідніх ворогів.
  2. Всі гравці мають рівні шанси зіткнутися з сусідніми ворогами.
  3. Розмір карти не повинен збільшуватися пропорційно кількості гравців.
  4. Ці обмеження не застосовуються з довільними непрохідними просторами.

Відповідь не повинен бути ідеальним, очевидно, кращим за альтернативу. З коробки мислення ласкаво просимо.

5 Comments
10 Zibelas 07/28/2017
Спати в колі?
1 inappropriateCode 07/28/2017
@Zibelas Традиційний підхід, але порушує вимогу 3, і з великою кількістю гравців це створює величезну карту та порожній інтер'єр.
4 Zibelas 07/28/2017
Це залежить від типу гри. (2D / 3D, рестарант / останній чоловік, що стоїть тощо). У цьому випадку ідеальний ікротит можливий тільки у світі форми кулі (більше гравців, ближче ікру, але ви можете гарантувати, що вони мають однакову дистанцію). У 2D-світі з фіксованими межами у вас завжди є менш межуючі гравці, оскільки у вас немає місця для їх появи. Якщо це 3D-гра, у вас може бути кілька шарів.
1 RothX 07/28/2017
Я думаю, це допоможе дізнатись, яка гра ви робите. Це звучить як якась гра війни, але які деталі? Це шутер? Ви починаєте з усієї своєї зброї, чи ви повинні вивчати і знаходити речі? Що таке перемога? Як довго очікується матч?
3 Jan 'splite' K. 07/28/2017
Не для повної відповіді, але я думаю, що кожен намагається "справедливого та збалансованого ікру", який ... не весело. Подивіться на чудові PUBG (та інші Battle Royale) нерест: гравці можуть "породжувати" (добре, стрибати і приземлитися ...) майже скрізь, де вони хочуть - якщо ви хочете конфлікту та драматургії, ви вибираєте місце, де більшість гравців приземляються / виникають. Високий ризик високої нагороди, але тільки якщо гравця цього хоче. Ви можете приземлитися десь у лісі, у вас є час, щоб підготувати себе - низький ризик низької винагороди, але деякі гравці можуть це віддати перевагу (як я, наприклад;)). Його НЕ випадковим, його вибір гравців.

9 Answers


Philipp 07/28/2017.

Дозвольте гравцям самостійно вибирати місця їх запуску.

На початку гри всі гравці з'являються в центрі карти, але без будь-яких засобів нанести шкоду іншим гравцям. Тоді їм доведеться розростати і придбати засоби для взаємодії (побудувати базу, забрати зброю, збирати ресурси тощо)

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

5 comments
14 Shashimee 07/28/2017
+1 для використання системи нересту фільму "Голод ігри" 1.
3 Philipp 07/28/2017
@Shashimee На самом деле я вважаю, що я бачив цей спосіб спочатку в Anno 1602. Я також вважаю, що в деяких ранніх C & C-іграх це було як необов'язковий варіант багатокористувацької гри (але я не впевнений, що правильно це нагадує).
3 Zibelas 07/28/2017
@ Philippe MULE для компанії Commodore 64, що становить близько 15 років, і ви також можете вибрати свої позиції :)
Dent7777 07/28/2017
Потім ви потрапляєте в проблему, де ви дотримуєтеся своєї точки спавну. Це, звичайно, може бути бажаним ігровим механіком, але це також може бути надзвичайно розчаровує, а не те, що ви вирішите, що хочете у своїй грі. Хороша ідея полягає в тому, щоб персонажі стали невидимими та без зіткнень у гравцях, і вони могли знайти свою базу перед початком гри.
Kroltan 07/28/2017
Це метод, який використовується лінійкою "Vampirism" і "Tree Tage" для користувацьких гамедомодів на Warcraft 3. Він найкраще працює, оскільки всі гравці є об'єднаними (принаймні спочатку), і група противників випущена пізніше.

Theraot 07/28/2017.

Розуміння вимог

  1. У всіх гравців є обмежена кількість сусідніх ворогів.

По-перше, ми говоримо про точку відліку гравців, а не про поточну позицію гравців у певній точці гри. Just getting that out of the way.

Сусідні добре визначені, коли ми говоримо про графік. Ми можемо думати про карту, яка представляє навігацію на карті - відтепер "графік".

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

Щоб побудувати графік, нам потрібно буде розглянути такі речі, як стіни, мости, драбини, точки телепортації або навіть розглянути проліт, якщо може бути гравець, який може літати. Кожен вузол представляє собою прохідне місце; кожне з'єднання представляє можливий рух.

Примітка: знати розмір і форму вузлів, а також працювати з сусідніми вузлами. Не розглядайте вузлів точку. Не вважайте, що з'єднання мають довжину. Також використовуйте опуклих вузлів.

Графік може бути попередньо скомпільований (карта була створена дизайнером); інакше воно може бути створене на льоту, якщо карта буде створено випадковим чином.

  1. Всі гравці мають рівні шанси зіткнутися з сусідніми ворогами.

Я вважаю, що вороги є іншими гравцями. Again, just getting that out of the way.

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

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

  1. Розмір карти не повинен збільшуватися пропорційно кількості гравців.

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

  1. Ці обмеження не застосовуються з довільними непрохідними просторами.

Я не маю наміру додати перешкоди для вирішення проблеми. Au contraire , мені потрібно працювати навколо перешкод. Якщо їх не було, реалізація буде простішою.


Рішення

Ми намагаємося розмістити N точок ікру, щоб шанс зіштовхнутися з іншим гравцем на всіх цих точках спаду був рівний.

Ми можемо отримати міру помилки як суми відмінностей шансів на середній шанс. Ми намагаємося мінімізувати це (насправді ми хочемо зробити це 0).

Для цього нам потрібно знати шанс зустрітися з гравцем на кожному вузлі графіка.

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

Примітка 1: додавання або переміщення точки спанування вплине на шанс зіткнутися з гравцем для всієї карти.

Примітка 2: Відстеження того, наскільки кожна точка спару впливає на шанс, полегшить ситуацію.

Примітка 3: Оскільки вузли мають розмір, як близько ви можете отримати до помилки = нуль залежить від розміру вузлів. Ви можете бути більш точними, працюючи з діапазонами значень (мінімум і максимум шансів, в залежності від конкретної позиції точок нересту у вузлі).

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

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

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

Якщо у будь-якої заданої ітерації у вас є декілька точок на вузлі (що малоймовірно, оскільки вони мають тенденцію рухатися окремо, але можливо, якщо у вас є досить великі вузли), розділіть вузол і продовжуйте розв'язувати. Будь-який поділ вузла дійсний.


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

Спробуйте імітований відпал, щоб перемістити точку нересту всередині вузла. Хоча, чесно кажучи, це, мабуть, не варто боятися такого рівня деталізації.


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


Zibelas 07/28/2017.

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

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

Чи є ваша карта фіксованою або процедурною? І коли-небудь намагався грати Age of Empires з 8 людьми на карті з 2 особами? Неможливо масштабувати гравців нескінченно, не змінюючи розмір карти. Навіть несанкціоноване початкове розміщення може призвести до динамічності у грі (див. Серію Worms). Ніхто не скаржився, якщо ви породжували прямо у великому кластері, доки тривав один ваш круглий союз з іншим гравцем, або у вас не було самих виживаючих черв'яків після першого туру.

(Я додам ще кілька прикладів, якщо я більше знаю про ваш тип гри)


Aric Fowler 07/28/2017.

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

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

Як альтернатива, вся карта може існувати назовні сфери, однак це робить координати важкими для нересту.

1 comments
2 Avery 07/29/2017
Або зробіть карту, яка добре, в центрі, можна набагато простіше полювати на полювання або полювати, а також знайти гроші легше, але знову ж таки, ви можете набагато більше полювати на це, а в нецентрових областях робити це означає, що гравці з меншою ймовірністю не знайдуть інших користувачів та грабіж, тому, якщо вони хочуть більше грабежу, їм доведеться йти в центр, якщо вони хочуть вижити довше, їм доведеться залишатися там, де вони є. Отже, в основному, недоліком випадкових нересту є перевага.

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

Ось декілька можливих рішень:

  • Спрямування випадково по окружності кола
  • Спрямування випадковим чином на радіуси (не нерест, щоб закрити центр)
  • Додайте випадковий компонент часу спадів

Діаграма нерестових механізмів

2 comments
Zanon 07/28/2017
Друге зображення - чудовий варіант. Це вирішує проблему першого варіанту, коли гравець точно знає, де розташовані всі інші гравці.
Avery 07/29/2017
@ Zanon, хоча з першими гравцями зображень може (і, ймовірно, буде), рухатися, перш ніж хтось приходить туди. Другий призведе до несправедливих породжень, деяких близьких до інших. Може бути, щось подібне до цього, де є 2 кола, а різниця між меншим і більшим є тим, де вони виростають, тож як другий образ, але менш центром.

MrCranky 07/28/2017.

По суті я вважаю, що це проблема розподілу графів. Припускаючи ситуацію deathmatch (кожен інший гравець є ворогом), вам потрібно моделювати свої карти як взаємопов'язаний граф і відстежувати, який вузол на графіку для кожного гравця найближчий. Не кожен вузол повинен бути точкою спанування, але вам потрібен складний графік для моделювання відстаней між точками спаду. Під час ігрового процесу ви потім повторюєте графік і забиває кожен згенерований вузол залежно від того, чи є у сусідніх вузлах гравці.

Тоді ідеальний вузол має:

  • На даний момент в цьому немає гравців
  • Більше нуля гравців у вузлах поблизу (невелика кількість посилань)

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

Вам знадобиться збільшити розмір карти, оскільки кількість гравців зросте, але значення k не повинно бути більше 1. Найгіршим випадком буде те, що кожен вузол на графіку має принаймні одного гравця - у такому випадку немає хороших вузлів для використання, і вам доведеться постраждати в цьому випадку і створити гравця, знаючи, що вони будуть земля право на вершині іншої. Алгоритм скорингу повинен мати ваги вузлів так, щоб ви породжували в вузлі з найменшими іншими гравцями.

Майте на увазі, що ваш графік карти потрібно ретельно будувати, знаючи карту, маршрути, будь-які поштовхи точки та effective відстань між точками вузла, а не actual відстані. Як і в, використовуйте щось на зразок вимірюваного часу для переходу між вузлами, а не на відстань, щоб пояснити більш складну місцевість. Крім того, ви повинні зареєструвати open-ness vs cover; два вузли можуть бути фізично далеко один від одного, але тому, що вони дуже відкриті, і в кожному вузлі генерується гравця, може означати, що вони однаково вразливі, як якщо б ви породили їх поруч один з одним.

Уточнення:

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

Aaron 07/28/2017.

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

Вирішуючи третій і четвертий критерії: "The map shouldn't have to expand."

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

Обчислити евристику для бажаних характеристик неволі.

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


Anton Sherwood 07/29/2017.

Якщо ігрове поле є топологічним тором (тобто прямокутник, де "вийшов з рамки" означає надходження на протилежну сторону), це, мабуть, буде хорошим відповіддю: гравець j виникає при x = (pjW/N) mod W, y = (qjH/N) mod H , де W,H - розміри прямокутника, N - кількість гравців, а p,q - цілі числа, які потрібно визначити; вони відрізняються, (мабуть) відносно простими, і не надто далеко від sqrt(N) . Точки спанів утворюють косою картиною "шпалери".

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


NotThatGuy 07/31/2017.

Як на рахунок:

Кожен гравець оточений коробкою (або колом), що не виростає.

Як і в Росії, існує квадрат певного розміру, що породжує кожного гравця і випливає з цим гравцем навколо - жоден інший гравець не може виростати в межах цієї площі.

Ці квадрати впливають на нерест, а не на будь-яке інше рух під час гри.

Це працює з будь-яким початковим нерестом або постійним нерестом.

(Точки вказують на гравців і зелений вказує на можливий регіон для нових гравців)

Розмір карти не повинен збільшуватися пропорційно кількості гравців

Для цього ви можете виконати одну з двох дій: (або обидва)

  • Зменшити розмір кодів, що не виростають, залежно від кількості гравців.
  • Дозвольте гравцям-ворогам X виростити кожен ящик.
    • Це число може збільшуватися, коли ви йдете (починаючи з 0).
    • Варіант 1: має меншу коробку без коробки та більше обмежену коробку.
    • Варіант 2: вірогідність ваги залежно від того, наскільки ближче нова ікронога до цього гравця (якщо вона знаходиться всередині коробки) - може бути важко ефективно реалізувати.

Related questions

Hot questions

Language

Popular Tags