Я хочу сделать простую игру, похожую на книги «Выбери свое приключение». Игроку предоставляется повествовательный текст, и он получает возможность выбрать свое действие из списка возможностей. Это, в свою очередь, приводит к новому повествовательному тексту до бесконечности. Единственный улов в том, что в зависимости от некоторых предыдущих решений, список возможностей может отличаться.
На первый взгляд, это звучит как нагрузка операторов if-else, что подразумевает наличие механизма правил. Но это также звучит как конечный автомат для меня.
Я собираюсь написать это на Java или, может быть, Groovy. В настоящее время меня больше интересуют концептуальные вопросы, то есть, как это должно быть сделано на широком уровне (как люди вообще реализуют шахматы или карточные игры?), Но некоторые советы по конкретной библиотеке также приветствуются.
Очевидно, что «игровой движок» из названия не относится к обнаружению столкновений или другой физике / графической механике, но к логике, решающей, какие варианты игрок предоставил ситуации и его текущему состоянию.
Ответы:
Исходя из того, что вы сказали в комментариях, я бы с этим справился:
Реализуйте историю как конечный автомат с изюминкой. Каждое состояние - это страница истории, а каждый переход - это ссылка с одной страницы на другую. Но у каждого Перехода также есть Условия . Условия могут быть нулевыми, и в этом случае Переход всегда отображается как доступная опция, но если нет, то они должны быть оценены при отображении страницы, а если оценка возвращается
False
, Переход не отображается.Есть два основных способа выполнения Условий. Во-первых, нужно настроить полноценный скрипт-движок внутри игры, а затем условие выглядит следующим образом
return player.inventory.contains(GUN)
. Это изначально сложнее в настройке, но допускает более сложные сценарии.Второе - жестко закодировать возможные условия в какой-то объект. Он может иметь
RequiredItem
поле, и если это поле имеет значение, вы проверяете, выполняется ли условие. Эта система проще в настройке. Он ограничивает то, что вы можете сделать намного больше, чем это делает сценарий, но если вам не нужна гибкость, которую обеспечивает механизм сценариев, возможно, его будет намного проще использовать.источник
Я думаю, что ответ в заголовке: вам нужен механизм правил. Если вы планируете написать свое приложение на Java, вы, конечно, можете написать свое собственное, как предложил Гилберт Ле Блан, ИЛИ вы можете взглянуть на Drools , движок правил.
С помощью Drools или любого другого движка правил вы можете определить параметризованную ситуацию, которая выводит список возможных действий. Вы можете закодировать простые правила, которые есть у suc:
игрок находится на странице X:
Что интересно в Drools, так это то, что вы можете закодировать все свои правила в файле Excel, а затем в начале игры заставить Drools прочитать этот файл. После этого все в памяти, вам нужно только беспокоиться о вашем пользовательском интерфейсе.
Вот несколько ресурсов, которые помогут вам начать работу с Drools:
источник
Конечный автомат звучит как безопасный подход к моделированию вашей игры. Есть много библиотек для интерактивных художественных произведений:
http://en.wikipedia.org/wiki/Category:Text_adventure_game_engines
не упоминается в википедии, в настоящее время шпагат очень популярен.
источник
Концептуально ваша игра проста. В psudeocode это будет выглядеть примерно так:
Теперь сложная цепочка всего текста, который переходит от одного действия к другому. Вы можете использовать реляционную базу данных. Вы могли бы использовать дерево.
Немного сложно быть более конкретным, не зная, какой компьютерный язык вы хотите использовать. Поскольку вы упомянули Java, я бы больше склонялся к древовидной структуре.
Создайте класс ответа, который содержит один ответ и ссылку на текстовый класс.
Создайте текстовый класс, который содержит текст приключения и Список ответов в качестве экземпляров класса ответа.
Отредактировано, чтобы ответить на комментарий:
Вы ничего не рассчитываете на основе этой модели. Используя ваш пример, дерево будет выглядеть примерно так, где T - текст, а A - выбор действия:
Да, есть некоторое дублирование текста, но, следуя цепочке, будущие действия могут учитывать прошлые решения. Это огромное дерево решений.
источник