我正在创建一个游戏,玩家需要将屏幕上的对象分类到正确的目标位置。我正在寻找一种方法来洗涤物体,以便没有物体在正确的位置开始。因此,我们不会陷入一个双重否定的疯狂世界,我要称之为“正确答案”的地点“避免”地点,以及“不正确答案”地点的“有效”地点。如何在某些对象必须避免被配对在一起时,将一个数组的元素随机映射到另一个数组的元素?
的阵列可能是这样的:
var sort_items = [
{"avoid": ["target1", "target2"]},
{"avoid": ["target1", "target2"]},
{"avoid": ["target3"]},
{"avoid": ["target4", "target5"]},
{"avoid": ["target4", "target5"]},
];
var sort_locations = [
{"id": "target1"},
{"id": "target2"},
{"id": "target3"},
{"id": "target4"},
{"id": "target5"},
];
因此,例如,在sort_items第一和第二物体可以被放置在target3
,target4
,或,但不target1
或target2
。
我已经尝试了许多不同的方法,但他们都有问题,在排序结束时,剩余的sort_items中剩余的唯一位置经常无效。例如:
sort_items[0] placed on target3,
sort_items[1] placed on target5,
sort_items[2] placed on target2,
sort_items[3] placed on target1,
Error: sort_items[4] cannot be placed on target4
即使在这个例子中,随机挑选另一个和交换与它似乎是一个好主意,因为其他人的一半也将导致在交换的无效比赛。
是否有一个很好的方法来做到这一点?
一个有趣的技术问题,但至于实际的游戏,如果去一些物体在正确的位置开始将它真的重要吗?只是简单地做一个简单的洗牌,然后把它留在那里...关于你正在寻找的算法,它应该假设输入数据是有效的吗? (即,'sort_items'没有指定一个不可能的组合?) – nnnnnn
确实很有意思。在真实情况下,你的列表有多大? – Arnauld
避免的目标总是后果..? – Redu