Уникнення неможливих станів у пригодницькій грі


15

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

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

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

Відповіді:


11

Звучить на зразок задачі з графіком.

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

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

Тепер із вашим заповненим графіком: для кожної вашої проблеми, яка потребує елементів X + Y + Z, знайдіть усі вузли, які мають цю проблему, і перевірте, чи можуть записані елементи задовольнити цю умову. Якщо виникла помилка, просто поверніться до графіка, щоб знайти всі рішення, які потрапили туди, без відповідних елементів для вирішення цієї проблеми.

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

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


це означає розробку інструменту. Я поставимо це в крайньому випадку.
Ali1S232

6
Інструмент буде або вашими власними мізками, записом і ємністю пам’яті, або це буде щось автоматизоване, що не втомиться і не пропустить жодних проблем =) Я думаю, це залежить від того, якою буде ваша гра і чи будете ви коли-небудь будувати інший з того ж двигуна, щоб вирішити, чи варто витрачений час чи ні.
Патрік Х'юз

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

0

це може здатися дивною відповіддю, але ви можете легко перевірити наявність неможливих подій за допомогою компіляторів (наприклад, c ++)! дозвольте мені пояснити, як: у вас рівно один файл заголовка для кожного етапу. і гра закінчується у main.cppфайлі. всякий раз , коли ви можете перейти від stage aдо stage b, ви просто повинні включити файл відноситься до stage aв stage b. щоразу, коли ви отримуєте новий елемент на етапі, ви просто визначаєте значення для цього елемента. всякий раз, коли ви втратили або використали предмет, його просто доведеться скасувати. врешті-решт, на кожному етапі потрібно просто використовувати всі визначені значення для елементів, необхідних на цьому етапі. ось зразок, як це використовувати в коді:

ах

#define itemA

bh

#include <a.h>
#undef itemA
#define itemB

гл

#include <a.h>

itemA;

#include <b.h>

itemB;

main.cpp

#include <c.h>
int main()
{
}

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


2
це справжнє зловживання компілятором!
Ali1S232

3
Це цікаво, але це було б досить крихко і працювати лише, якби в моїй історії був клас на предмет / подію / розділ. Я збирався отримати більше підходу, керованого даними, читання з XML чи чогось іншого. Дякую за вашу пропозицію.
DanDan

3
Не така гарна ідея примушувати перекомпілювати кожного разу, коли зміна квесту, плюс це не дозволить оновлювати дані кінцевим користувачам (наприклад, DLC) або запускати з сервера та застосовувати виправлення без примусового завантаження.
Патрік Х'юз

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

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