Я начинающий программист C, который хотел бы написать библиотеку разрешений для ролевых игр. Под этим я подразумеваю, что эта программа будет иметь дело только с разрешением тех конфликтов, которые передаются в нее. Например, когда ему сообщают, что Капитан Удивительный использует свои глазные лучи Бласто на среднем расстоянии с его навыком стрельбы d8, стоившим 3 очка силы, и его Диким кубиком против Коменданта Нефариуса, который находится за Средним укрытием, он определяет результат. Он не будет касаться ни одного персонажа как такового, а только их соответствующей статистики, кто является атакующим и защитником, и любых модификаторов, имеющих отношение к этому конкретному действию, о которых ему сообщается.
Дело в том, что у него не будет встроенного набора правил. Вместо этого он будет подан набор правил из файла конфигурации. Таким образом, тот же базовый движок можно использовать для виртуальной настольной игры Savage Worlds, пошаговой пошаговой игры или 3D-игры D & D 3rd Edition в реальном времени. Различные наборы правил для разных типов CRPG, использующих одну и ту же библиотеку RPG. Мой вопрос касается того, как лучше всего это сделать.
Последние пару дней я рассматривал использование XML в качестве возможного способа хранения игровых данных, которые могут понадобиться. На первый взгляд, это выглядит как хороший путь, так как не кажется слишком сложным. С другой стороны, поскольку он будет загружать правила во время выполнения, я не могу связывать данные XML, так как это преобразовало бы их в код на языке C, который, конечно, нужно было бы скомпилировать. По крайней мере, я так понимаю.
Чтобы построить пример из первого абзаца, это то, что библиотека может и не понадобится после прочтения правил:
Библиотека знает через прочитанное в правилах:
Как разрешить дальнюю атаку.
Какой навык нужен для дальнобойной атаки (стрельбы).
Что такое базовый номер цели?
Что такое штрафной удар на среднем расстоянии.
Какой штрафной удар для Защитника, находящегося за Medium Cover.
Как бороться с Диким кубиком (если он выше, чем другой кубик, он используется вместо него.)
Aceing. (На большинстве, но не на всех бросках, если кубик набирает максимальный счет, он снова бросается, добавляя к общему результату. Это продолжается до тех пор, пока кубик не наберет максимальный счет.)
Каковы значения для игры в кости.
О чем библиотека должна быть проинформирована:
Что такое навык стрельбы у атакующего
Расстояние.
Каковы соответствующие ситуационные модификаторы (Среднее расстояние, за Средним прикрытием)
Любые модификаторы персонажа, имеющие отношение к разрешению атакующих атак.
Что библиотека не заботится при выполнении своей задачи:
Имена персонажей.
Уровни навыков персонажей по предметам, не относящимся к решению текущего вопроса.
Какой персонаж является игроком, а какой - не игроком.
Хорошо ли будет XML или мне следует подойти к этому иначе?