如果您的拼图数量有限,则可以:
- 建立一个谜题列表,所有谜题或随机选择;
- 随机播放此列表(例如,参见Knuth随机播放);
- 让您的播放器播放此列表;
- 当列表为空时,从新列表开始。
编辑
我不知道这一点,但是浏览SE使我意识到它实际上被称为“洗牌袋”。一些更多的信息在这里,这里或那里。
编辑2
经典的Knuth Shuffle就是这样:
To shuffle an array a of n elements (indices 0..n-1):
for i from n − 1 down to 1 do
j ← random integer with 0 ≤ j ≤ i
exchange a[j] and a[i]
史蒂文·斯塔德尼基(Steven Stadnicki)在其评论中正确地指出,这种事情并不能阻止改组后的重复。考虑到这一点的一种方法是为最后一项添加特殊情况:
To reshuffle an array a of n elements and prevent repetitions (indices 0..n-1):
return if n <= 2
// Classic Knuth Shuffle for all items *except* the last one
for i from n − 2 down to 1 do
j ← random integer with 0 ≤ j ≤ i
exchange a[j] and a[i]
// Special case for the last item
// Exchange it with an item which is *not* the first one
r ← random integer with 1 ≤ r ≤ n - 1
exchange a[r] and a[n - 1]