Знаю, знаю. Это спрашивали много раз. Я не ищу алгоритм. Я думаю, что мой алгоритм не работает должным образом.
Вот алгоритм, который я использую:
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);
И теперь у него есть 2 известные ошибки:
Иногда он генерирует 9 мин вместо 10. Я знаю это, потому что когда я проигрываю, он показывает, где все мины.
Иногда он действительно создает мину в позиции первого хода.