Хранить данные в исходных файлах C # по сравнению с XML и т. Д.? - PullRequest
2 голосов
/ 18 апреля 2009

Это вопрос C #.

Я просто бродил, пытался ли кто-нибудь сохранить свои данные (например, файлы конфигурации) в файле * .cs вместо XML?

Я действительно ненавижу XML. Сама идея разбора html-подобной структуры каждый раз, когда вам нужны данные, кажется глупой.

Существуют ли легкие альтернативы (например, YAML) XML? В моем случае мне действительно нужно хранить некоторые данные для (игрового) уровня, где есть множество различных объектов, типов местности и т. Д. ... в плоском файле, чтобы я мог прочитать их позже.

Полагаю, я мог бы сериализовать свой класс Level , но я хочу, чтобы файл данных был редактируемым в любом текстовом редакторе, например.

Любая помощь будет приветствоваться, спасибо!

PS: Что касается файлов .cs, я забыл упомянуть, что хочу иметь возможность создавать (и сохранять) новые уровни в игре через редактор.

Ответы [ 13 ]

3 голосов
/ 18 апреля 2009

Я работаю в игровой индустрии в течение многих лет, и мы используем XML, потому что он получил лучшую поддержку инструментов. Файлы Yaml или Ini используются для конфигов, но игровые данные хранятся в формате XML. Конечно, у нас обычно есть инструменты, которые преобразуют XML в бинарный код, для доставки игр, но во время разработки и разработки пользовательских инструментов игры XML просто потрясающий.

Иногда XML является подходящим молотком для ваших нужд, не ставьте под угрозу технологии только потому, что они не являются лучшими в некоторых областях (скажем, Ajax (транспорт) против определения данных)

2 голосов
/ 18 апреля 2009

Поскольку вы не хотите использовать XML, я бы порекомендовал создать свой собственный формат файла, который можно редактировать в тексте.

PROPERTIES
name = First Level
number = 1
END

MONSTERS
Barbarian
pos = (3, 6)
health = 2

Dragon
pos = (10, 10)
health = 8
END

и так далее для всего, что вам нужно.

Создать парсер самостоятельно очень просто. Практически просто читайте в файле построчно. В первой строке вы видите заголовок PROPERTIES, поэтому вы читаете в свойствах, пока не прочитаете в строке END. То же самое относится и к другим заголовкам. Есть много способов изменить это, так что вы можете сделать синтаксис таким, каким хотите.

2 голосов
/ 18 апреля 2009

Почему бы и нет (xml)?

Я не вижу случая, чтобы не использовать XML, особенно если учесть, что вы хотите хранить различные типы информации в файле.

Тем не менее, для подхода с использованием файлов .cs я предлагаю структурировать код вашего приложения так, чтобы вы загружали код, который инициализирует необходимые данные, вместо того, чтобы искать данные в файлах. Это дает вам четкую схему (compile + load), так как вы сейчас загружаете класс инициализации, а не просматриваете данные в файл. Добавьте как можно больше, чтобы сделать конфигурацию максимально простой.

1 голос
/ 04 июня 2009

Нам нравится JSON для конфигурационных файлов - он удивительно универсален.

Его легко редактировать вручную, легко анализировать и генерировать (включая надежные библиотеки для .NET - как для MS, так и для сторонних производителей), и он очень мощный - своего рода XML с хорошими основными типами данных.

1 голос
/ 18 апреля 2009

Сама идея разбора html-подобной структуры каждый раз, когда вам нужны данные, кажется глупой.

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

1 голос
/ 18 апреля 2009

INI-файлов?

[section]
key=value

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

Несколько игр, которые приходят на ум, которые используют файлы XML:

World of Warcraft
Crysis
Command & Conquer 3

0 голосов
/ 28 июня 2009

Я работаю в игровой индустрии, и мы используем XML почти исключительно для того, что вы описываете.
И вот почему:
1. Это хорошо понято и является стандартом
2. Отличная поддержка библиотек
3. Это может быть проверено - это важно при создании редакторов данных
4. Структурировано
5. Он читабелен и, следовательно, легко отлаживается

Тот факт, что вы говорите, что ненавидите тралить его, просто чтобы получить значение, подсказывает мне, что вам следует использовать один из многих xml-анализаторов. Поверьте мне, это просто и работает

Люди используют это по уважительным причинам. Да, у него есть свои недостатки, то есть многословие и т. Д., Но, поверьте, преимущества намного превосходят недостатки!

0 голосов
/ 28 июня 2009

Технически вам не нужно анализировать XML, достаточно создать модель данных, а затем сериализовать и десериализовать из XML. Также очень просто создать редактор в Visual Studio для модели данных, используя TreeView или ListView, отображающий каждый элемент / объект в модели данных, и использовать PropertyEditor для редактирования свойств выбранного объекта. Используйте OpenFileDialog и SaveFileDialog, чтобы позволить пользователю выбрать файл XML и XmlSerializer для загрузки и сохранения модели данных. действительно безболезненно уверяю тебя! : -)

0 голосов
/ 19 апреля 2009

Если вы используете систему .NET Configuration, она выполняет синтаксический анализ XML для вас. См. Как: создать пользовательские разделы конфигурации с помощью ConfigurationSection . Несмотря на то, что он находится в разделе ASP.NET, он применим ко всему коду .NET.

0 голосов
/ 19 апреля 2009

Звучит так, будто вы хотите двоичный формат, который можно редактировать в текстовом редакторе. К сожалению (пока все не владеют шестнадцатеричным редактором), между скоростью и простотой редактирования неизбежен компромисс.

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

Если вы в конечном итоге используете XML в этом сценарии, я бы рекомендовал использовать более одного файла, возможно, по одному на объект. Похоже, вы планируете иметь сложный мир. Имеет смысл немного его нарезать.

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