Динамические обратные вызовы из динамического инвентаря - PullRequest
0 голосов
/ 02 ноября 2009

Я работаю над игровым симулятором Magic The Gathering. Я не нашел ни одной бесплатной системы, которая позволяла бы вам создавать свои собственные колоды, которые также управляют игрой (жизнь / выносливость, жетоны, вызванные события и т. Д.).

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

<card>
   <name>Bloodghast</name>
   <cost>BB</cost>
   <type>Creature</type>
   <subtypes>Vampire,Spirit</subtypes>
   <stats>2,1</stats>
   <color>B</color>
   <attributes>
      <attribute>
         <id>C41</id>
         <description>Bloodghast can't block.</description>
      </attribute>
      <attribute>
         <id>C42</id>
         <description>Bloodghast has haste as long as an opponent has 10 or less life/</description>
      </attribute>
      <attribute>
         <id>LF5</id>
         <description>Landfall - Whenever a land enters the battlefield under your control, you may return Bloodghast from your graveyard to the battlefield.</description>
      </attribute>
   </attributes>

Извините за то, что сделал это многословным (и, вероятно, непонятным для тех, кто действительно не играет в Магию) Поэтому я бы прочитал в этом дереве для каждой карты, загруженной для колоды. Мне нужен способ зацепить атрибуты карты в «движок игры», чтобы, например, когда общее количество жизней игрока упало ниже 10 Bloodghast, ускорение или когда играли на земле, движок позволил мне схватить его из моего кладбища. Для тех, кто не играл в Магию, другими примерами может быть то, что некоторые карты запускают действие, когда игрок сбрасывает карту или разыгрывает заклинание определенного цвета.

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

Любая помощь будет принята с благодарностью. Я довольно приличный программист, но я бы предпочел не начинать этот проект 5 раз и переписать его целиком.

1 Ответ

1 голос
/ 02 ноября 2009

Я бы предложил использовать подходящую базу данных, такую ​​как SQLite или SQLExpress, чтобы вы могли устанавливать отношения и нормализовать свои данные (например, без списков, разделенных запятыми).

Придумать движок правил будет трудно для Магии; Эффекты могут делать всякие сумасшедшие вещи, и ваш движок правил должен будет приспособить их всех. По сути, вы будете воссоздавать движок правил из видеоигр Magic: The Gathering, чтобы знать, что и когда произойдет.

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