В Си, XML будет хорошим форматом для внутреннего использования для движка RPG? - PullRequest
2 голосов
/ 28 августа 2010

Я начинающий программист C, который хотел бы написать библиотеку разрешений для ролевых игр. Под этим я подразумеваю, что эта программа будет иметь дело только с разрешением тех конфликтов, которые передаются в нее. Например, когда ему сообщают, что Капитан Удивительный использует свои глазные лучи Бласто на среднем расстоянии с его навыком стрельбы d8, стоившим 3 очка силы, и его Диким кубиком против Коменданта Нефариуса, который находится за Средним укрытием, он определяет результат. Он не будет касаться ни одного персонажа как такового, а только их соответствующей статистики, кто является атакующим и защитником, и любых модификаторов, имеющих отношение к этому конкретному действию, о которых ему сообщается.

Дело в том, что у него не будет встроенного набора правил. Вместо этого он будет подан набор правил из файла конфигурации. Таким образом, тот же базовый движок можно использовать для виртуальной настольной игры Savage Worlds, пошаговой пошаговой игры или 3D-игры D & D 3rd Edition в реальном времени. Различные наборы правил для разных типов CRPG, использующих одну и ту же библиотеку RPG. Мой вопрос касается того, как лучше всего это сделать.

Последние пару дней я рассматривал использование XML в качестве возможного способа хранения игровых данных, которые могут понадобиться. На первый взгляд, это выглядит как хороший путь, так как не кажется слишком сложным. С другой стороны, поскольку он будет загружать правила во время выполнения, я не могу связывать данные XML, так как это преобразовало бы их в код на языке C, который, конечно, нужно было бы скомпилировать. По крайней мере, я так понимаю.

Чтобы построить пример из первого абзаца, это то, что библиотека может и не понадобится после прочтения правил:

Библиотека знает через прочитанное в правилах: Как разрешить дальнюю атаку. Какой навык нужен для дальнобойной атаки (стрельбы). Что такое базовый номер цели? Что такое штрафной удар на среднем расстоянии. Какой штрафной удар для Защитника, находящегося за Medium Cover. Как бороться с Диким кубиком (если он выше, чем другой кубик, он используется вместо него.) Aceing. (На большинстве, но не на всех бросках, если кубик набирает максимальный счет, он снова бросается, добавляя к общему результату. Это продолжается до тех пор, пока кубик не наберет максимальный счет.) Каковы значения для игры в кости.

О чем библиотека должна быть проинформирована: Что такое навык стрельбы у атакующего Расстояние. Каковы соответствующие ситуационные модификаторы (Среднее расстояние, за Средним прикрытием) Любые модификаторы персонажа, имеющие отношение к разрешению атакующих атак.

Что библиотека не заботится при выполнении своей задачи: Имена персонажей. Уровни навыков персонажей по предметам, не относящимся к решению текущего вопроса. Какой персонаж является игроком, а какой - не игроком.

Хорошо ли будет XML или мне следует подойти к этому иначе?

Ответы [ 4 ]

2 голосов
/ 29 сентября 2010

Civilization IV использует XML и Python для всего, кроме графического движка и AI.Все правила - это скрипты Python, все характеристики юнитов - это файлы XML.

Поэтому ответ, наверное, да, это может быть хороший формат.

2 голосов
/ 28 августа 2010

Дело в том, что у него не будет встроенного набора правил.

Возможно, было бы лучше использовать XML для хранения данных и размещения скриптового движка в вашей игре ииметь правила, запрограммированные как сценарии, внешние по отношению к вашей программе. Lua - хороший вариант для программ на Си, Python - еще один выбор.

1 голос
/ 28 августа 2010

Одним из преимуществ использования XML для обмена данными и хранения данных является то, что если вы решите, что его кодирование на C становится слишком сложным, вы вернетесь к языку с более «встроенной» поддержкой XML.

Я бы не особо ассоциировал C с XML.Есть (много) библиотек, написанных на C или C ++, которые могут манипулировать XML, но используемые интерфейсы означают, что C в значительной степени совпадает - вы работаете с библиотечным кодом и вызовами библиотеки больше, чем просто с C. Если вы идете по этому пути,вам следует стремиться использовать одну из многих устоявшихся библиотек XML, а не придумывать свою собственную - то же самое можно сказать и о любом другом языке.

Обратите внимание, что XML является довольно сложным для обработки языком.Я подозреваю, что многие игровые системы посчитают слишком медленным обрабатывать соответствующие данные.

0 голосов
/ 29 сентября 2010

В сущности, я представляю такой поток:

                                rule file
                                   |
UI --| pipe with action data |-- Resolution Engine --| pipe back to UI |--

Я бы предположил, что XML - это хороший язык файлов правил. Лично я считаю, что это слишком большое железо, если только не требуется проверка схемы, и что JSON - лучший выбор для начала. Ни JSON, ни XML на самом деле не являются хорошей картой в модели выполнения C, но это их недостатки. В любом случае вы не будете много разбирать файл правил, поэтому вы можете позволить себе потратить время на это с помощью библиотеки разбора.

Для канала данных действия я бы предложил использовать каналы операционной системы и записать двоичные данные, пригодные для непосредственного считывания в структуру C.

Редактировать - если вы собираетесь использовать файл правил в качестве полноценного языка сценариев вместо языка конфигурации, вы в конечном итоге захотите внедрить другой язык. Lua - выбор языка du jour для сценариев игры. Я не знаю никаких причин не выбирать Луа для этой цели.

Кстати, вы выбрали хорошую стартовую область проекта, я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...