Задание: необходимо реализовать ИИ при игре в крестики-нолики на джаве. Самый первый шаг рандомный выбор ячейки и проверка соседних ячеек на, скажем, нолики. реализовал в лоб:
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 можно выйти за край массива. Теперь сам завис не пойму как подойти к проблеме. Хелп, пожалуйста.
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;
}
решил всё таки в лоб, просто перед каждой проверкой " или " добавил проверку " и " на (i+1 < SIZE), т.е. что бы не проверял ячейку с координатой за пределами массива. спасибо.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости