我正在研究N-Puzzle游戏(也称为15-谜题...),您可以在一个方形网格上拆分图像,移除一个部分并随机播放。我对这个难题的解决方案不太感兴趣,因为这取决于用户。但我想伪随机洗牌。N-Puzzle伪随机洗牌?
我知道1/2所有可能的洗牌都会让董事会无法解决。假设我有一些rand() - esc函数,并且我知道棋盘大小,是否有一种简单的方法可以随意地生成混洗状态?
我在内存中有一个游戏板,一个整数的多维数组。 我的方法只是将图像按照相反的顺序放置,在偶数板上将第二张图像切换为最后一张图像。 我目前的功能在下面,我正在使用Java。
private void shuffle()
{
gameState = new int[difficulty][difficulty];
int i = 0, N = (difficulty * difficulty) -1;
while (i < N)
gameState[(int)(i/difficulty)][i % difficulty] = N - ++i;
gameState[difficulty-1][difficulty-1] = N;
// N id even when the remainder of N/2 is 0
if ((difficulty % 2) == 0)
{
// swap 2nd to last and 3rd to last element
int tmpEl = gameState[difficulty-1][difficulty-2];
if (difficulty == 2)
{
gameState[1][0] = gameState[0][1];
gameState[0][1] = tmpEl;
}
else
{
gameState[difficulty-1][difficulty-2] = gameState[difficulty-1][difficulty-3];
gameState[difficulty-1][difficulty-3] = tmpEl;
}
}
}
可能的重复[如何确保当我洗牌我的谜题时,我仍然以偶数排列?](http://stackoverflow.com/questions/2653694/how-can-i-ensure-that-当我洗牌我的谜题我仍然结束与一个偶数permut) – 2011-05-24 02:01:19