首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有点脑筋急转弯:使用C#类定制逻辑字符串

有点脑筋急转弯:使用C#类定制逻辑字符串
EN

Stack Overflow用户
提问于 2013-02-26 11:09:33
回答 1查看 193关注 0票数 3

所以,我的基本设置是这样的:我有一些项目,这些项目被限制在不同的类中。这些项目有效果,这些效果也被限制在不同的类。例如,我可能有一个物品只能由精灵使用,而另一个物品可能每个人都可以使用,但会给精灵特定的奖励/效果。

下面是一个限制类:

代码语言:javascript
复制
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,它只覆盖构造函数:

代码语言:javascript
复制
public RaceRestriction(reference.races r, bool qual) {
    Base_ID = (int)r; Qualify = qual;
}

reference.races r是引用文件中的枚举。这里的想法是,我可以将这种“限制”语法扩展到我在参考文件中定义的任何类--这样我就可以对种族、类、统计数据进行限制,无论我需要什么。

因此,这一切都会在稍后达到顶峰,当我定义(例如)一个物品时,它对谁可以装备它有限制。

下面是Equipment类的一个片段,我在其中定义了一个设备供以后使用(希望它是可读的):

代码语言:javascript
复制
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的思想字符串。比方说我的项目写着“战士可以使用这个”,上面写着“精灵可以使用这个”。我是说“勇士或精灵”还是“勇士精灵”?

我认为,这种区别是必要的--所以我需要给每个限制附加一些逻辑,本质上,我认为,一组相互关联的限制,那些带有其他限制的字符串,等等,但我觉得这很快就会失控。

有没有更好的方法可以做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2013-02-26 11:23:07

我不会定义特定的限制类,而是通过定义一个名为IRestrictable的接口来设计它,该接口将由Equipment类实现。该接口将至少包含一个名为CheckEligibility (或类似方法)的方法,该方法将返回一个布尔值。然后,您的设备类将可以根据您想要的任何输入和该类当时可用的任何信息,自由地使用它想要的任何逻辑表达式来得出答案。如果您需要在不同的环境下检查限制,您可以在接口上使用多个方法。对于具有复杂规则的特定类型的设备,您可以自由地实现从Equipment派生的特定类。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15080685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档