2012-01-15 78 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会染上!:-))