我正在尝试创建一个名为怪物猎人(个人使用)的游戏的工具。我以前处理过排列,但没有这么复杂的,所以我完全卡住了。
在游戏中,你穿着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个用户指定技能的装甲碎片的所有组合。所以如果你选择了“攻击”和“速度”,它会给你5件护甲的所有可能的组合,这将导致“攻击”和“速度”的+10。这5个类别中的每一个都有大约60个不同的项目。
我知道我可以使用LINQ来过滤5类装甲部件中的每一类,这样我就只能得到包含2个指定技能之一的所有物品的列表,但我迷失了如何进行排列,因为我正在处理2-3个用户指定的技能……
我希望我有可以展示的工作代码,但是我在这一点上太迷茫了,我不知道从哪里开始。我不是在寻找答案,而是在寻找如何实现这一目标的建议。谢谢。
发布于 2012-01-16 02:31:44
1)我会尝试只查找1个技能,然后为第二个/第三个技能筛选该项目集
2)为了避免占用太多的时间/内存/递归:我会根据唯一的技能对5* 60个项目进行排序。然后,我会通过寻找那些加起来超过10的组合来创建组合,从较高的技能开始,当达到10或无法达到10时停止。
构建所有组合的函数将如下所示:1:如果我们有总项目技能>10 :所有与其他项目的组合都可以。停。2:如果当前物品技能计数小于10,则在数组中查找未磨损的下一个最大物品。
如果在数组中我们达到0或者我们达到一个值(当前计数+值*剩余块类型的数量) <10,那么是时候停止了:-)
否则,添加它的技能计数,记录使用的护甲类型,然后为所有可能匹配的物品调用你的函数。
好吧,我可能不够精确,但你可以看到这个想法:为调用使用条件,以避免爆炸递归性。因为60*60*60*60*60太多了。并且(快速地)对5*60=300项进行排序并不是什么事。
要存储您的组合,您可能想要添加'anything goes‘的情况,以避免存储/计算太多无用的组合。(例如:如果你有Carmak的魔法帽,你的编码+100,你可以穿任何你想穿的衣服,虫子会染的!:-)
https://stackoverflow.com/questions/8871952
复制相似问题