2013-02-26 37 views
3

所以,我的基本設置是這樣的:我有項目,它們被限制在不同的類中。這些項目有影響,也限制在不同的班級。例如,我可能有一件物品只能由精靈來操控,而另一件物品可能會被所有人操控,但會給精靈帶來特定的獎勵/效果。一個腦筋急轉彎:使用C#類的自定義邏輯字符串

這裏有一個限制類:

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是在參考文件中的枚舉。這裏的想法是我可以將這種「限制」語法擴展到我在參考文件中定義的任何類 - 所以我可以對比賽,班級,統計數據,我需要的任何限制。因此,當我定義(例如)一件物品時,這一切都達到高潮,這個物品限制誰可以裝備它。

下面是從器材類,在這裏我定義了一臺設備,供以後使用的一個片段(希望它的可讀性是):

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思想。說我的物品說「勇士可以使用這個」,它說「精靈可以使用這個。」我真的是指「戰士或精靈」還是我的意思是「戰士精靈?」

我認爲這種區別是必要的 - 所以我需要給每個限制附加一些邏輯,並且基本上我認爲這些限制是相互聯繫在一起的,而其他集合限制等,但我覺得這樣會很快失去控制。

有沒有更好的方法可以做到這一點?

+0

很高興看到一個非常不同類型的問題。 – 2013-02-26 03:30:32

回答

6

我沒有定義特定的限制類,而是通過定義一個名爲IRestrictable的接口來設計這個接口,以便由Equipment類實現。該接口至少包含一個名爲CheckEligibility(或類似的)的方法,它將返回一個布爾值。然後,您的設備類可以根據您想要的任何輸入以及該課程當時提供的任何信息,自由使用它喜歡的任何邏輯表達式來提出答案。如果您需要在不同情況下檢查限制,您可以在界面上使用多種方法。對於具有複雜規則的特定類型的設備,您可以自由實施從Equipment派生的特定類。