Что то так и не придумал как заполнить поле после клика мышки. Подскажите кто знает.
Антон
41 уровень
как сделать чтоб на 1й клик не выпала мина?
Решен
Комментарии (19)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
IceBergMaster
22 августа 2019, 07:41полезный
У меня была доп переменная isGameStarted, и в onMouseLeftClick, в случае false, вызывал createGame.
+1
Антон
22 августа 2019, 08:42
ну я пробовал что то на подобие тока 1 или 0, c false конечно удобней.
Я только так и не понял в какой момент ей присваивать false.
Ну то есть после клика у нас сработал createGame мы присвоили переменной true. А в какой момент ей присваивать false? получается либо при объявлении переменной либо в блоке инициализации. У меня просто он почему-то по кругу создавал новую игру
0
IceBergMaster
22 августа 2019, 09:03полезный
Обычная статическая переменная класса, изначально проинициирована flase, после выполнения createGame станет true, после gameOver или gameWin снова false, ну или как-то так.
+1
Антон
22 августа 2019, 19:23
не знаю, не знаю сделал с false true все равно бомбу ловит.
Может конечно не с первого запуска но после рестартов точно ловит, хотя в restart тоже добавил условие.
А ты уверен то у тебя не ловило бомбу на первом ходе?
0
IceBergMaster
22 августа 2019, 19:35
Не ну понятно, что бомбу ловит, если ты логику createGame не расширял, или какой у тебя был смысл заполнять поле уже после клика?
0
Антон
22 августа 2019, 19:40
ну как я понимаю после первого клика открывается одна ячейка и срабатывает креате гейм ( в котором поле заполняется бомбами), а второй клик уже видит флаг тру и начинает открывать ячейки как то так
0
IceBergMaster
22 августа 2019, 19:49решение
Так а что это изменит? Мне первый клик был нужен чтобы получить координаты, по которым я точно не стану класть бомбу при заполнении поля.
+3
Антон
22 августа 2019, 19:50
что ты имеешь ввиду пот расширением логики createGame?
Я пока вижу только 1 вариант это вынос в отдельный метод заполнение поле бомбами, хотя есть подозрение что это шило на мыло
+1
Антон
22 августа 2019, 19:51
Ну такая мысль у меня была
+1
Антон
22 августа 2019, 19:52
тоесть типа в цикле проверять если ячейка открыта? то бомбу не класть?
+1
IceBergMaster
22 августа 2019, 20:01
Не помню уже, я скорее просто координаты проверял, а открывал уже после заполнения.
+1
Антон
22 августа 2019, 20:06
вот сейчас так, и все равно ловит бомбу
public void onMouseLeftClick(int x, int y) {
if (isGameStopped & !gameStart){
x1=x;
y1=y;
restart();
createGame();
gameStart=true;
}else { openTile(x, y);}
}
private void createGame() {
for (int i=0; i<SIDE; i++){
for (int j=0; j<SIDE; j++) {
if (x1 != j & y1 != i) {
mineInt = getRandomNumber(10);
if (mineInt >= 8) {
mine = true;
countMinesOnField++;
} else if (mineInt < 8) {
mine = false;
}
gameField[i][j] = new GameObject(j, i, mine);
}
}
}
countMineNeighbors();
countFlags=countMinesOnField;
}
0
Антон
22 августа 2019, 20:13
так тоже не прокатывает
for (int i=0; i<SIDE; i++){
for (int j=0; j<SIDE; j++) {
mineInt = getRandomNumber(10);
if (mineInt >= 8) {
mine = true;
countMinesOnField++;
} else if (mineInt < 8) {
mine = false;
}
if (x1 == j & y1 == i) {
mine = false;
}
gameField[i][j] = new GameObject(j, i, mine);
}
}
0
IceBergMaster
22 августа 2019, 20:21
Когда увидел, что ты матрицу решил так и не переворачивать, сразу перехотелось что-то моделировать в голове) Поменяй местами х1 у1 для эксперимента.
0
Антон
22 августа 2019, 20:23
ниче не пойму я ж вроде перевернул))
0
Антон
22 августа 2019, 20:25
поменял местами х1 и у1 все равно ловит бомбу
0
IceBergMaster
22 августа 2019, 20:41
Значит есть проблемы в структуре поля, даже не знаю что добавить.
Или покажи хоть исходник где-то на Гите.
0
Антон
23 августа 2019, 05:53
а что такое Гит(а)?
0
Антон
23 августа 2019, 18:08
нашел причину.
Оказалась банальной, я игру скопировал в другую папку а солюшен запускал старую версию.
0