Лучше ли жестко закодировать или оставить его для внешних файлов XML - PullRequest
1 голос
/ 14 сентября 2011

Я создаю двухмерную ролевую игру.Похож на Pokemon для Gameboy.В основном, мои игровые карты создаются размером x на x.Есть также предметы декораций (деревья, кусты и т. Д.), А также неразрешимые вещи (например, знаки, двери, предметы и т. Д.).В настоящее время я жестко программирую эти объекты. Проблема в том, что каждый раз, когда я добавляю объект пейзажа, плитку ландшафта или что-то еще, мне требуется пройти и добавить класс для него, указать некоторые другие данные и т. Д.По сути, я чувствую, что мне нужно выполнить много повторяющихся задач, чтобы сделать что-то настолько простое.

Я боюсь, что позже мой проект станет неуправляемым.Каждый фрагмент нового ландшафта, пейзажа или другого объекта, унаследованного от класса с именем «GridElement».

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

Основная проблема в том, что большинству этих элементов требуются специальные функции, которые к ним применяются.Некоторые из них должны вызывать события, когда на них наступают.Некоторые элементы также динамичны (плитка меняется каждые пару секунд, например, вода, цветок и т. Д.).

Спасибо за помощь!

Приветствия!

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

Как правило, вы должны создавать новый класс только тогда, когда вы хотите представлять поведение, и контролировать параметры этого класса своими данными.

В вашем случае вам, вероятно, понадобится один класс декораций для ваших цветов, кустов, стен и подобных вещей. Затем вы можете настроить объекты этого класса, вызывая функции для установки растрового изображения (изображений), скорости анимации. Тогда действительно не имеет значения, откуда эти данные, они могут быть жестко закодированы, получены с фабрики объектов или прочитаны из XML.

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

Когда речь идет о специальных мероприятиях, у вас есть несколько вариантов. Самое простое - создать общий класс событий, который может указывать новым актерам появляться на экране или дарить объекты игроку. В качестве альтернативы вы можете передать указатель / делегат функции на объект, который вызывается, когда пользователь нажимает определенные триггеры (то есть, шаг в квадрат, победа монстра). И, наконец, самое сложное из всего, кроме того, что используют Pokemon и подобные игры, вы можете создать / использовать свой собственный язык сценариев.

2 голосов
/ 14 сентября 2011

Лучше поместить данные в файлы данных и написать свой код для обработки этих файлов данных.Есть несколько причин: вы упомянули одну, что данные более управляемы таким образом (то есть они будут более четко организованы и их легче найти).Еще одним важным преимуществом является то, что это облегчает изменение данных.При работе с другими это имеет ОГРОМНОЕ отличие, но даже при индивидуальной работе вам гораздо легче настроить все значения игрового процесса, когда они находятся в конфигурационных файлах, а не в самом коде.

Ваши предупреждения действительно означают, чтовам часто придется иметь отдельные классы для отдельных видов элементов, а затем ссылаться на эти классы в XML;например:

<grid_element>
  <class>GrassElement</class>
  <image>dark_grass.png</image>
  <xpos>10</xpos>
  <ypos>10</ypos>
</grid_element>

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

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