Я работаю над созданием прототипа базового игрового движка RPG с использованием JavaScript и Canvas. Я все еще работаю над некоторыми техническими требованиями к дизайну на бумаге, и у меня возникла небольшая проблема, которую я не совсем понимаю, как решить.
У меня будет объект Character, который будет иметь массив объектов Attribute. Атрибуты будут выглядеть примерно так:
function(name, value){
this.name = name;
this.value = value;
...
}
У персонажа также будут «навыки», рассчитываемые на основе атрибутов. Значение навыков также можно определить по формуле, введенной пользователем. Правильная формула выглядела бы примерно так:
((@attribute1Name + (@attribute2Name / 2) * 5)
где любой текст, следующий за знаком @, представляет имя атрибута, принадлежащего этому символу. Формула будет введена в текстовое поле в виде строки.
У меня проблема с пониманием того, как правильно анализировать и оценивать эту формулу. Изначально мой план состоял в том, чтобы просто заменить имена атрибутов и оценить выражение (если оно недействительно, то eval завершится ошибкой). Однако это представляет проблему, поскольку позволяет внедрять JavaScript в поле. Я предполагаю, что мне понадобится какой-то автомат, похожий на инфиксный калькулятор, чтобы решить эту проблему, но я немного заржавел в своей теории вычислений (спасибо корпоративному миру!). Я действительно не прошу кого-то просто передать мне код настолько, насколько мне хотелось бы узнать ваше мнение о том, как лучше всего решить эту проблему?
РЕДАКТИРОВАТЬ: Спасибо за ответы. К сожалению, жизнь заставила меня заняться, и я еще не пробовал решения. Будет обновлено, когда я получу результат (хороший или плохой).