Я разработал RPG-игру, в которой есть несколько сюжетных потоков. Это означает, что, в зависимости от выбора пользователя, некоторые вещи могут или не могут произойти, вы можете достичь одной и той же цели несколькими способами, окончание может быть различным и так далее.
Я реализовал простой механизм принятия решений, который прекрасно работает, но имеет один огромный недостаток: в момент, когда вы принимаете решение, на историю сразу влияет ваше решение, а это значит, что вы не можете принять решение, которое повлияет на вас в далеком будущем. , Это потому, что история разворачивается как ветвь в древовидной структуре, и ей всегда нужно знать, какой узел следующий. Под капотом решения реализуются с использованием очереди: каждый узел знает о предыдущем узле и следующем узле (или, если это узел принятия решения, он ожидает ввода данных пользователем для установки следующего узла)
Я видел много игр со сложными механизмами принятия решений, и мне интересно, как они сделаны? Есть ли специальный дизайн, который делает вещи действительно легкими? Кто-нибудь делал что-то подобное и может подсказать, как с этим бороться?
ОБНОВЛЕНИЕ 1:
Важный аспект заключается в том, чтобы каким-то образом сохранить независимый код истории, чтобы им можно было манипулировать из внешнего файла. Я планирую использовать это как движок, поэтому даже возможные варианты должны исходить из внешнего файла. Код должен быть полностью абстрактным.
Кроме того, меня интересует дизайнерское решение, хороший способ сделать это, как это делают другие.
if (isTree)
или сохранить isTree
глобальную переменную, потому что история может иметь или не иметь такой выбор. Знаешь что я имею ввиду? Это больше похоже на двигатель выбора, который будет обслуживать несколько историй.
isTree=true
однако позже он делает что-то еще, например, борется со школьным товарищем, который в свою очередь идет и рубит свое дерево, пока дерево еще молодо потому что он получил свою задницу. Теперь у нас есть 2 переменные, которые влияют на существование дерева isTree==true' and
didFightBrat == false`. Знаешь что я имею ввиду? И цепочка может продолжаться вечно, на существование дерева может влиять неизвестное количество факторов. Знаешь что я имею ввиду?