java扫雷器随机生成地雷算法不正确
我知道,我知道。这已经被问了很多次了。我不是在寻找算法。我认为我的算法工作不正常
以下是我使用的算法:
public void onFirstMove (int moveX, int moveY) {
setFirstMove (false);
Random r = new Random ();
for (int i = 0 ; i < 10 ; i++) {
int x;
int y;
do {
x = r.nextInt (9);
y = r.nextInt (9);
} while (tileMatrix[x][y].hasMine () &&
moveX == x && moveY == y);
tileMatrix[x][y].setMine ();
}
timer.startTimer ();
}
我把它放在onFirstMove方法中,因为我不希望玩家在第一步就输。正如你所看到的,我让它一直试图找到x和y坐标,而它与第一步的位置相同
while (tileMatrix[x][y].hasMine () &&
moveX == x && moveY == y);
现在它有两个已知的bug:
它有时会产生9枚地雷,而不是10枚。我知道这一点,因为当我输的时候,它会显示所有的地雷在哪里
它有时会在第一步的位置产生地雷
# 1 楼答案
该错误处于
while
状态。应该是:# 2 楼答案
我同意xashru的回答(1+对它)。我自己,我会使用一个列表,将除第一个移动磁贴之外的所有磁贴添加到列表中,将其洗牌,然后选择前N个磁贴(N是地雷的数量,并设置地雷,例如:
有关更多扫雷艇“乐趣”,请参阅我的代码和对this MineSweeper Question的回答