gpt4 book ai didi

c# - 有点脑筋急转弯 : Custom logic strings with C# classes

转载 作者:行者123 更新时间:2023-11-30 14:33:55 27 4
gpt4 key购买 nike

所以,我的基本设置是这样的:我有一些元素,它们仅限于不同的类别。这些项目具有效果,也仅限于不同的类别。例如,我可能有一个只能由 Sprite 使用的元素,而另一个元素可能每个人都可以使用,但会为 Sprite 提供特定的奖励/效果。

这是一个限制类:

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 是引用文件中的枚举。这里的想法是我可以将这个“限制”语法扩展到我在引用文件中定义的任何类——这样我就可以对种族、类、统计数据进行限制,无论我需要什么。

所以,当我定义(例如)一个元素时,这一切都会在稍后达到高潮,它对谁可以装备它有限制。

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

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 的思路。说我的元素说“战士可以用这个”,它说“ Sprite 可以用这个”。我的意思是真的“战士还是 Sprite ”还是“战士 Sprite ”?

这种区分,我认为,将是必要的——所以我需要为每个限制附加一些逻辑,并且我认为,从本质上讲,制作一组相互关联的限制,该字符串与其他组限制等,但我觉得这很快就会失控。

我有更好的方法吗?

最佳答案

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

关于c# - 有点脑筋急转弯 : Custom logic strings with C# classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15080685/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com