Я хочу создать общий синтаксический анализатор правил для ролевых и бумажных систем. Правило может включать в себя от 1 до N объектов от 1 до N ролей игральных костей и вычисления значений на основе нескольких атрибутов объекта.
Например:
У игрока есть STR 18, его экипированное оружие дает ему бонус +1 STR, но малус DEX -1. Он нападает на монстра, и теперь игровая логика необходима для запуска набора правил или действий:
Игрок бросает кубик, если он получает, например, 8 или более (базовое значение атаки, которое он должен пройти, является одним из его базовых атрибутов!), Его атака успешна. Затем монстр бросает кубик, чтобы рассчитать, прошла ли атака его броню. Если да, то ущерб получен, если не атака была заблокирована.
Помимо простых математических правил также могут быть ограничения, такие как применение только к определенному классу пользователя (например, воин против мастера) или к любому другому атрибуту. Так что это не просто математические операции.
Если вы знакомы с системами RPG, такими как Dungeon и Dragons, вы поймете, чем я занимаюсь.
Моя проблема сейчас в том, что я понятия не имею, как именно построить это наилучшим образом. Я хочу, чтобы люди могли устанавливать любые правила, а затем просто выполнить действие, например выбрать игрока и монстра, и запустить действие (набор правил, например, нападение).
Я прошу не столько помощи со стороны базы данных, сколько о том, как придумать структуру и синтаксический анализатор для ее гибкости. Кстати, язык для этого - php.
Изменить I:
Позвольте мне уточнить мою цель: я хочу создать удобный интерфейс (который не требует, чтобы кто-то изучал язык программирования) для построения более или менее сложных правил игры. Причина проста: в личном пользовании не нужно постоянно помнить все правила, мы просто не часто играем, и это мешает каждый раз искать их. Кроме того: Выглядит как веселое задание, чтобы сделать что-то и научиться :)
Что я пробовал до сих пор: просто думать о концепции, а не тратить время на построение неправильной архитектуры. До сих пор у меня была идея позволить пользователю создавать столько атрибутов, сколько они хотят, а затем назначать столько атрибутов, сколько они хотят, любому виду сущности. Сущность может быть игроком, монстром, предметом, чем угодно. Теперь при вычислении чего-либо данные становятся доступными для анализатора правил, так что анализатор правил должен иметь возможность выполнять такие действия, как если Player.base_attack + dice (1x6)> Monster.armor_check, то Monster.health - 1; Вопрос здесь в том, как создать этот парсер.
Редактировать II:
Вот пример довольно простой ценности, но для ее правильного расчета необходимо учитывать множество разных вещей и переменных:
Базовый бонус атаки (термин) Ваш базовый бонус атаки (обычно называемый BAB сообществом d20) - это бонус броска атаки, полученный из класса и уровня персонажа. Бонусы базовой атаки увеличиваются с разной скоростью для разных классов персонажей. Персонаж получает вторую атаку за раунд, когда его базовый бонус атаки достигает +6, третий с базовым бонусом атаки +11 или выше, и четвертый с базовым бонусом атаки +16 или выше. Базовые бонусы за атаку, полученные от разных классов, таких как мультиклассовый персонаж, стек. Базовый бонус атаки персонажа не дает больше атак после достижения +16, не может быть меньше +0 и не увеличивается из-за уровней классов после того, как уровень персонажа достигает 20-го. Для определенных умений требуется минимальный базовый бонус атаки.
Вы можете прочитать его здесь http://www.dandwiki.com/wiki/Base_Attack_Bonus_(Term), включая ссылки на классы и умения, которые снова имеют свои собственные правила для расчета значений, необходимых для базовой атаки.
Я начал думать, что поддерживая его как можно более общим, также будет довольно сложно сделать хороший анализатор правил.
Func
s, который инициализирует состояние программы на основе аргументов в качестве ключей к словарю. Удивленный, я никогда не находил тот пост от Yegge прежде, очень классный, спасибо за то, что указал на это.