来自动态库存的动态回调

时间:2009-11-02 04:42:49

标签: c# xml

我正在制作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>

对于那些冗长的人来说很抱歉(对于那些没有真正玩Magic的人来说可能不太理解)。所以我会在这棵树中读到为卡片加载的每张卡片。我需要一种方法将卡片的属性挂钩到“游戏引擎”中,这样​​,例如,当玩家的生命总数降到10以下,以获得急速加速,或者当玩平地时,引擎将允许我抓住他离开我的墓地。对于那些没有玩魔术的人来说,其他的例子就是当玩家丢弃牌或玩某种颜色的咒语时,某些牌会触发一个动作。

我原以为我可能必须在引擎上有一个事件处理程序,用于触发事件的每个环境(玩家玩法术,玩家生命总变化)并且每张卡都必须以某种方式向某些人添加元素list允许它将自己链接到该事件,但我甚至无法想到一个好方法。

非常感谢任何帮助。我是一个相当不错的程序员,但我宁愿不必开始这个项目5次并重新编写整个项目。

1 个答案:

答案 0 :(得分:1)

我建议使用适当的数据库,例如SQLite或SQLExpress,这样您就可以设置关系并规范化数据(例如,没有以逗号分隔的列表)。

对魔术来说,提出规则引擎将会很困难;效果可以做各种疯狂的事情,你的规则引擎必须容纳所有这些。从本质上讲,你将从Magic:The Gathering视频游戏中重新创建规则引擎,以便了解将要发生的事情以及何时发生。