所以,我的基本设置是这样的:我有项目,这些项目仅限于不同的类别。这些物品具有效果,也仅限于不同的类别。例如,我可能有一件只能由精灵使用的物品,而另一件物品可能是每个人都可以使用的,但会给精灵提供特定的奖励/效果。
这是一个限制类:
public class Restriction {
private int _base_id = 0;
private bool _qualify = true;
public Restriction() { }
// ... Base_ID and Qualify getters and setters here
public virtual bool Check(int c) {
if(_qualify) { return c == _base_id; }
else { return c != _base_id; }
}
Restriction 类的子类可能是 RaceRestriction,它只覆盖构造函数:
public RaceRestriction(reference.races r, bool qual) {
Base_ID = (int)r; Qualify = qual;
}
reference.races r 是参考文件中的枚举。这里的想法是我可以将这个“限制”语法扩展到我在参考文件中定义的任何类——所以我可以对种族、类、统计数据等任何我需要的东西进行限制。
所以,这一切都在稍后达到高潮,当我定义(例如)一个项目时,它对谁可以装备它有限制。
下面是 Equipment 类的一个片段,我在其中定义了一个设备供以后使用(希望它是可读的):
public Equipment() {
...
_master_equipment_list[1] = new Equipment {
Name = "Sword",
Description = "It's just a sword for demonstration",
Stats = {
new Attribute {
Stat_Modifier = new KeyValuePair<reference.stats, int>(reference.stats.ATTACK, 5),
Restrictions = {
new RaceRestriction(reference.races.TROLL, false)
}
}
},
Restrictions = {
new ClassRestriction(reference.class.WARRIOR, true)
}
}
所以这背后的想法是,使用这个系统,我定义了一把只能由战士使用的剑(基础战士对物品的真正限制),它给予任何使用它的巨魔 5 攻击。
我让自己陷入困境的是,这仅适用于逻辑 AND 或逻辑 OR 的思想串。假设我的物品说“战士可以使用这个”,它说“精灵可以使用这个”。我的意思是“战士还是精灵”还是“战士精灵”?
我认为,这种区别将是必要的——所以我需要为每个限制附加一些逻辑,并从本质上说,我认为,将一组限制相互关联,将字符串与其他一组限制等联系起来.,但我觉得那会很快失控。
有没有更好的方法可以做到这一点?