我正在爲遊戲編寫路徑查找算法,但試圖保持它的通用性,以便可以在將來的應用程序中使用它。C# - 使用泛型枚舉(或用於控制列表的替代方法)
我有一個節點類,其中包含X,Y和「PassableType」。
NodeGrid類存儲一個節點數組,其中包含它們如何連接的圖形信息,然後有一個FindAStarPath()函數,該函數以「PassableTypes」的參數StartNode,EndNode和params爲參數。
我的問題是確定什麼類型的「PassableType」應該有。
理想情況下,我希望能夠使用泛型枚舉 - 即每個遊戲定義的限制列表。節點將保存該列表的單個元素,說明它是什麼路徑類型(當前遊戲可以使用路徑,草地,牆等)
因此,當一個實體試圖路徑時,它提供路徑查找功能哪些類型被視爲「可通過」。所以,一個人可以使用
FindAStarPath(CurrentNode, DestinationNode, "Path", "Floor", "Door");
,但汽車可能只是使用
FindAStarPath(StartNode, EndNode, "Road");
我的問題是我不知道如何獲得NodeGrid採取通用枚舉或等效邏輯。
目前,我把它取字符串,但這意味着我不得不寫
MyEnum.Road.ToString() 我每次使用它的時間。
理想我想這樣做
NodeGrid<MyEnum> CurrentNodeGrid = new NodeGrid<MyEnum>()
然後節點將採取MyEnum他們passableType,如將尋路功能,從而使每場比賽有一組不同的瓷磚類型尋路。
但我不能定義NodeGrid爲:
public class NodeGrid<T> where T:enum
爲了清楚起見,其使用該枚舉尋路功能的唯一部分是(包含在節點):
public bool IsPassable(string[] passableTypes)
{
for (var i = 0; i < passableTypes.Count(); i++)
{
if (this.PassableType == passableTypes[i]) return true;
}
return false;
}
由於 Haighstrom
做什麼用'NodeGrid CurrentNodeGrid =新NodeGrid ()'問題了嗎? –
我無法通過「Where MyEnum:enum」來限制MyEnum。更新了主要問題。 – Haighstrom
請參閱:http://stackoverflow.com/questions/79126/create-generic-method-constraining-t-an-enum –