我正在做一个魔术游戏模拟器。我还没有发现任何免费的系统可以让你创建自己的牌组来管理游戏(生命/韧性、计数器、触发事件等)。
我的问题是,我需要找到一种有效的方法来触发正在使用的牌的事件。我设想卡片列表以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次,然后重新编写整个程序。