Прежде всего, вы в настоящее время воссоздаете всю доску при каждом нажатии мыши. Вы должны сохранять эту информацию между щелчками мыши, поэтому сделайте box
глобальным массивом вместе с другими. Кроме того, достаточно сделать его массивом boolean
, если все, что вам нужно, это состояние включения / выключения каждого квадрата:
boolean[][] isSquareLight = new boolean[cols][rows];
Вместо
if (light == true) {
Вы должны просто проверить
if (isSquareLight[i][j] == true) {
(обратите внимание, что == true
является избыточным).
Теперь вы уже написали код, который находит координаты для каждого блока: вы передаете его rect
!
rect(a, b, 100, 100);
Осталось только проверить, находится ли мышь внутри этого прямоугольника, т. Е. Находится ли mouseX
между a
и a+100
(и аналогично для mouseY
) - если это так, то пользователь щелкните в поле, заданном текущим значением (i
, j
), так что вы можете просто отменить isSquareLight[i][j]
(перед проверкой, как указано выше), и оно будет работать.
Есть способы рассчитать это, не обходя каждый раз всю сетку, но, возможно, вышеприведенное поможет вам найти путь, а не просто получить код, созданный для вас.
PS: int a; int b;
в верхней части ничего не делает и может быть удален. Вы используете локальные переменные a
и b
в своей функции, что правильно.