代码之家  ›  专栏  ›  技术社区  ›  Boerema

来自动态库存的动态回调

  •  0
  • Boerema  · 技术社区  · 16 年前

    我正在做一个魔术游戏模拟器。我还没有发现任何免费的系统可以让你创建自己的牌组来管理游戏(生命/韧性、计数器、触发事件等)。

    我的问题是,我需要找到一种有效的方法来触发正在使用的牌的事件。我设想卡片列表以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点以下时,吸血鬼获得加速,或者当玩了一个地时,引擎将允许我把他从我的墓地中抓出来。对于那些没有玩过魔法的玩家,其他的例子是当玩家丢弃一张牌或使用某种颜色的咒语时,一些牌会触发一个动作。

    我在想,我可能需要在引擎上安装一个事件处理程序,以应对触发事件的每种情况(玩家使用法术,玩家生命总变化),并且每张卡都必须以某种方式添加一个元素到某个列表中,以允许它自己链接到该事件,但我甚至无法开始想出一个好的方法。

    任何帮助都将不胜感激。我是一个相当不错的程序员,但我不想启动这个项目5次,然后重新编写整个程序。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Soviut    16 年前

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

    提出一个规则引擎对于魔术来说是困难的;特效可以做各种疯狂的事情,你的规则引擎必须适应所有这些。本质上,您将从魔术中重新创建规则引擎:收集视频游戏,以了解将要发生什么以及何时发生。