Як реалізувати покроковий ігровий движок?


17

Давайте уявимо таку гру, як Heroes of Might and Magic, або Master of Orion, або ваша покрокова гра на вибір. Яка логіка гри в тому, щоб зробити наступний поворот? Чи є матеріали чи книги, які можна прочитати на тему? Для конкретності, давайте уявимо ігровий цикл:

void eventsHandler(); //something that responds to input
void gameLogic(); //something that decides whats going to be output on the screen
void render(); //this function outputs stuff on screen

Всім, кого телефонують, кажуть 60 разів на секунду. Але як сюди входить покрокова? Я можу собі уявити, що в gameLogic () є така функція, як endTurn (), що відбувається, коли гравець натискає цю кнопку, але як я все це обробляти? Потрібні розуміння.

Відповіді:


21

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

На високому рівні черга гравця може стати початком нового стану з подальшими всіма можливими діями, дозволеними під час цього повороту.

Наприклад

  • Держава - змінити гравця
    • зараз черга гравця 1
  • Дозволені дії
    • напад
      • виберіть противника для нападу
    • захищати
      • виберіть підрозділ для захисту
    • переміщення одиниці
      • виберіть одиницю для переміщення
      • перевірте, чи дозволяється рух
    • тощо

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


Досить старий мій шкільний проект, який був тримісячною спробою розвитку в Final Fantasy Tactics :) Використовує державну машину (кілька з них насправді), як описано вище. sourceforge.net/projects/bpfat
Джеймс

Гей, а що з Game Engine для покрокової стратегії? Не могли б ви порадити щось? Можливо, двигун Unreal міг би поміститися?
Рантієв

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

3

Нещодавно я побудував покрокову стратегічну гру, схожу на Master of Orion (це лише один гравець зараз, багатокористувацька буде трохи складніше, але схожа ідея), ось як виглядає моя логіка функції endTurn (у моєму основний клас ігрового контролера):

//for all computer players:
computerTakeTurn(player)

//for all players
moveShips(player)

//for all players
endTurn(player)//see this function below

//for all planets
planet.repairFleet()

//for all players
resolvePlanetaryConflicts(player)

//check to see if any players were destroyed or if the game is over
checkPlayerDestroyedAndGameOver()

Функція мого кінцевого повороту гравця виконуватиме функції, характерні для того гравця, на який не впливає порядок, який відбувається між гравцями:

eatAndStarve()

generatePlayerResources()

buildPlayerPlanetImprovements()

growPlayerPlanetPopulation()

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


Ви можете надати вихідний код лише для перевірки? Було б чудово допомогти. Просто в освітніх цілях.
Дволе

@Dvole Я зараз працюю над перетворенням коду з Silverlight / C # в JavaScript за допомогою тегу HTML5 canvas. Як тільки я закінчую, я планую відкритий код коду, і тоді ви більше ніж ласкаво побачите, як саме я реалізував цю функцію. Якщо це допоможе отримати контекст, ви можете пограти в мою гру «Космічна стратегія» тут: « Астріарх» - «Правитель зірок»
Метт Палмерлі

2
@Dvole Це зайняло у мене досить багато часу, але я просто відкрив джерело Silverlight версії Astriarch. Якщо ви все ще зацікавлені, ви можете завантажити вихідний код з github тут: github.com/mpalmerlee/Astriarch/tree/Silverlight
Метт Палмерлі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.