Як керувати різною швидкістю дій в іграх RogueLike?


14

Як керувати різною швидкістю дій в іграх RogueLike?

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

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

Схоже, є різні способи це зробити? Чи можете ви пояснити деякі з алгоритмами?


7
У мене таке відчуття, що якщо ви детально описали потрібні функції, алгоритм стане очевидним.
Тетрад

Як сказав Тетрад, плюс що ви маєте на увазі під швидкістю дій? Зловмисники, як правило, покрокові, тому я не бачу, як це може стосуватися їх.
Лоран Кувіду

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

3
@Patrick Hughes Nethack, один з найстаріших і найпопулярніших шахраїв, має дуже важливий атрибут швидкості. nethackwiki.com/wiki/Speed
Гаррі Стерн

1
@HarryStern Я весь цей час грав погано? Це може пояснити кілька речей ... =)
Патрік Хьюз

Відповіді:


12

У моїй розгульній грі Tyrant я використовував систему точок дій та рейтингів швидкості.

В основному:

  • Більшість акцій мали вартість AP в 100
  • Більшість істот мають швидкість 100

Тоді ігровий цикл пішов би наступним чином.

  • Герой вживає дій.
  • Час, що минув, обчислюється як hero action AP cost * 100 / hero speed
  • Усі істоти отримують точки AP, що дорівнює creature speed * elapsed time / 100
  • Істоти вживають дій і віднімають AP, поки їх AP не буде <= 0
  • Повторіть

Ця система працювала дуже добре в цілому, наприклад, приємні функції:

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

Намагаюся обернути голову навколо цього. Якщо у вас є 1 гравець та 4 гравці. Це не робить з часом останнього гравця все більше і більше. Дозволити йому здійснити, можливо, 4 дії, а другий раз близько 8 підряд ??
Dr.Denis McCracleJizz

4

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


2

Ви маєте на увазі, що дії роблять кілька оборотів (тобто, спати на 50 оборотів прямо)?

Що я б робив, це зберегти об’єкт, player.currentAction. currentAction може містити, скільки поворотів потребує дії, яка роздільна здатність дії та перелік станів, які скасовують дію (загроза, атака, занадто гаряча тощо). Кожен поворот, перш ніж ми перевіряли наявність гравця, ми перевіряли, чи гравець перебуває в середині дії, а потім робимо щось на кшталт щось на кшталт ...

if(!player.currentAction.interrupted())
{
 if(player.currentAction.complete() == true)
   {
    player.currentAction.doAction(); //Some actions, like casting a spell, would have something happen here. Others, like sleeping, may or may not, depending on how you coded it.
    player.currentAction = null;
   }
else player.currentAction.decreaseTimer(); //Decrease our timer by one.
}
else 
{
 player.currentAction.interrupt(); //Let the player know he's been interrupted. Bungle the spell, cancel sleep, etc.
 player.currentAction = null;
}

2

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

Коли є кілька акторів. Гра просувається галочкою до тих пір, поки хтось не заплатить ціну AP в той момент, коли ця дія буде виконана.

Підхід подібний до @ mikera, тільки немає негативних AP.


Це набагато грізніше, оскільки потрібно зберігати «задумане» дію істоти. Деякі дії залежать від стану, який може змінитися до того, як натовп набере достатньо балів.
Уорвік Еллісон

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

Я вважаю за краще йти в інший бік: мафіоні вибирає акцію вартістю n-тиків, а потім не може вибрати нову дію, поки не закінчиться n-тик. Вона може бути реалізована як одне значення, яке зменшується на кожному галочку.
kitsu.eb

-1

Час високої роздільної здатності

Якщо удар займає 400 оборотів, а удар робить 1000 оборотів, я можу нанести удар вам щонайменше двічі, перш ніж ви будете бити мене, і я можу вас ударити 5 разів до моменту, коли ви двічі б'єте мене.

Здійснюючи багато поворотів, ви маєте багато контролю над тим, як довго це триватиме.

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