2012-01-15 129 views
2

我想創建一個名爲怪物獵人(供個人使用)的遊戲工具)。我之前已經使用過排列組合,但沒有任何複雜的東西,所以我完全陷入了困境。沒有重複的複雜排列

在遊戲中你穿5件裝甲。每件作品都有技能點,可以滿足許多不同技能之一。如果在計算整套數據後,您在特定技能中擁有10+技能點數,則可以獲得該技能。

例子:

Foo Head: Attack +2, Guard + 2 
Foo Chest: Defense + 5  
Foo Body: Guard + 2, Attack + 5, Defense +2 
Foo Arm: Attack + 3, Speed + 4 
Foo Legs: Attack + 5, Guard + 6, Defense + 3 

The above set would result in 10+ in Attack, Defense, and Guard (not speed). 

我想弄清楚如何找到2-3給出用戶指定的技能護甲片所有組合。所以如果你選擇了「Attack」和「Speed」,它會給你所有可能的5件裝甲的組合,在「Attack」和「Speed」中都會造成+10。這5個類別中的每一個都有大約60個不同的項目。

我知道我可以使用LINQ來過濾5種裝甲部件中的每一種,這樣我只能找回包含2種指定技能之一的所有物品的列表,但我迷失於如何去做因爲我玩雜耍2-3用戶指定的技能...

我希望我有工作代碼來顯示,但我很迷茫,在這一點上,我不知道從哪裏開始。我本身並不是在尋找答案,而是如何到達那裏的建議。謝謝。

回答

1

1)我會嘗試找到適合1個技能,然後過濾該項目的第二/第三

2)避免花費過多時間/內存/遞歸設置:我會整理的5 * 60基於唯一技能的物品。然後,我會通過尋找加起來超過10的那些來創建組合,從高級技能開始,並在達到10時或者當它不會到達時停止。
構建所有組合的函數如下所示: 1:如果總項目技能> 10:與其他項目的所有組合都可以。停止。 2:如果當前物品的技能是計數< 10在數組中尋找下一個最大物品的數量。
如果在數組中我們達到了0或者我們達到了一個數值,使得(當前計數+數值*件數類型離開)< 10那麼它的時間停止:-)
否則加上它的技能數量,注意一件裝甲鍵入所用的名稱,然後調用您的函數以查找可能匹配的所有項目。

以及我可能不夠精確,但你看到的想法:使用條件的調用,以避免爆炸遞歸。因爲60 * 60 * 60 * 60 * 60是很多。和(快速)分類5 * 60 = 300項目是沒有什麼。

要存儲您的組合,您可能需要添加'任何情況'的情況,以避免存儲/計算太多的組合。 (例如:如果你有Carmak的魔法帽子,你的編碼有100個,你可以用任何你想要的方式打扮,這個bug會染上!:-))