3

つまり、私の基本的な設定は次のようになります。さまざまなクラスに制限されているアイテムがあります。これらのアイテムには効果があり、これも異なるクラスに制限されています。たとえば、私はエルフだけが使用できるアイテムを持っているかもしれませんが、別のアイテムは誰もが使用できるかもしれませんが、エルフに特定のボーナス/効果を与えます。

制限クラスは次のとおりです。

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; }
}

制限クラスの子は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回の攻撃を与えるということです。

私が自分自身を追い詰めたのは、これは論理積または論理積の思考の文字列に対してのみ機能するということです。私のアイテムに「戦士はこれを使用できる」と書かれていて、「エルフはこれを使用できる」と書かれているとします。私は本当に「戦士またはエルフ」を意味するのですか、それとも「戦士エルフ」を意味するのですか?

その区別が必要になると思います。したがって、各制限にロジックを付加して、基本的に、相互に関連付けられた一連の制限、他の一連の制限を含む文字列などを作成する必要があります。 。、しかし私はそれが非常に速く手に負えなくなるように感じます。

これを行うためのより良い方法はありますか?

4

1 に答える 1

6

特定の制限クラスを定義するのではなくIRestrictable、クラスによって実装されるように呼び出されるインターフェイスを定義することで、これを設計しEquipmentます。CheckEligibilityこのインターフェイスには、bool を返すメソッド (または類似のメソッド) が少なくとも 1 つ含まれます。機器クラスは、必要な入力とその時点でクラスが利用できる情報に基づいて、答えを導き出すのに好きな論理式を自由に使用できます。さまざまな状況で制限を確認する必要がある場合は、インターフェイスにいくつかのメソッドを含めることができます。Equipment複雑なルールを持つ特定のタイプの機器から派生した特定のクラスを自由に実装できます。

于 2013-02-26T03:23:06.630 に答える