gpt4 book ai didi

c# - 不重复的复杂排列

转载 作者:太空宇宙 更新时间:2023-11-03 14:07:46 24 4
gpt4 key购买 nike

我正在尝试为一款名为 Monster Hunter(供个人使用)的游戏创建一个工具。我以前处理过排列,但没有这么复杂,所以我完全被困住了。

在游戏中你身穿 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 种用户指定的技能...

我希望我有可以显示的工作代码,但此时我很迷茫,不知道从哪里开始。我不是在寻找答案本身,而是在寻找如何到达那里的建议。谢谢。

最佳答案

1) 我会尝试只为 1 项技能查找,然后为第二项/第三项过滤该项目集

2) 避免占用太多时间/内存/递归:我会根据唯一的技能对 5 * 60 项进行排序。然后我会通过寻找加起来超过 10 的组合来创建组合,从较高的技能开始,并在达到 10 或达不到时停止。
构建所有组合的函数如下所示: 1:如果我们的元素技能总和>10:与其他元素的所有组合都可以。停止。 2 : 如果当前元素技能计数<10,则在数组中寻找下一个最大的未磨损元素。
如果在数组中我们达到了 0 或者我们达到了一个值使得(当前计数 + 值 * 剩下的片类型数量)<10 那么它的时间停止了:-)
否则添加它的技能数,记下使用的盔甲类型,然后为所有可能匹配的项目调用您的函数。

好吧,我可能不够精确,但你明白了这个想法:使用调用条件来避免递归爆炸。因为60*60*60*60*60很多。并且(快速)排序 5*60=300 项没什么。

要存储您的组合,您可能需要添加“随心所欲”的情况,以避免无用地存储/计算太多组合。 (例如:如果你有 Carmak 的魔法帽,你的编码有 +100,你可以随心所欲地穿着, bug 会染上颜色!:-))

关于c# - 不重复的复杂排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8871952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com