Проверка соседних ячеек массива в игре крестики-нолики

132
25 февраля 2019, 07:20

Задание: необходимо реализовать ИИ при игре в крестики-нолики на джаве. Самый первый шаг рандомный выбор ячейки и проверка соседних ячеек на, скажем, нолики. реализовал в лоб:

if (map[i+1][j] == DOT_O ||
    map[i+1][j+1] == DOT_O ||
    map[i+1][j-1] == DOT_O ||
    map[i][j+1] == DOT_O ||
    map[i][j-1] == DOT_O ||
    map[i-1][j] == DOT_O ||
    map[i-1][j+1] == DOT_O ||
    map[i-1][j-1] == DOT_O
)  {
    x = i;
    y = j;
}

но тут сразу ошибка, т.к. при обращении к ячейке типа i+1 можно выйти за край массива. Теперь сам завис не пойму как подойти к проблеме. Хелп, пожалуйста.

Answer 1
boolean checkNearCell(int row, int col, int val) {
  int startRow = Math.max(row - 1, 0);
  int stopRow = Math.min(row + 1, map.length - 1);
  for (int i = startRow; i <= stopRow; i++) {
    int startCol = Math.max(col - 1, 0);
    int stopCol = Math.min(col + 1, map[i].length - 1);
    for (int j = startCol; j <= stopCol; j++) {
      if (map[i][j] == val && !(i == row && j == col))
        return true;
    }
  }
  return false;
}
if (checkNearCell(i, j, DOT_O) {
  x = i;
  y = j;
}
Answer 2

решил всё таки в лоб, просто перед каждой проверкой " или " добавил проверку " и " на (i+1 < SIZE), т.е. что бы не проверял ячейку с координатой за пределами массива. спасибо.

READ ALSO
Как форматировать массив

Как форматировать массив

Выводит эти значения, но RUB,PLN,JPY,DKK и так дальше, не форматированы

135
зачем проверять if(fos!=null)

зачем проверять if(fos!=null)

Учу андроид разработкуИ уведел такую штуку:

192
Считывание файла в массив Java [закрыт]

Считывание файла в массив Java [закрыт]

Есть файл, содержавший число: testtxt

124
&amp;&amp; и || и их братья &amp; и | в разных ситуациях. Какие у них различия?

&& и || и их братья & и | в разных ситуациях. Какие у них различия?

друзья! Хотелось бы спросить про && и ||Если используется двойной амперсанд и первое выражение ложно (false), то второе выражение даже не будет...

144