Как выбрать соседние плитки на доске 5 на 5 (6 на 6, не важно)? Делаю задание, стоит задача отобрать все соседние клетки для доски 5 на 5Сначала просто отбираю всех соседей// Вертикальные соседи $nord = $blockIdFromClick - $n; $south = $blockIdFromClick + $n; // Горизонтальные $west = $blockIdFromClick - 1; $east = $blockIdFromClick + 1; // По диагонали (из правого верхнего угла) $nordEast = $blockIdFromClick - ($n-1); $southWest = $blockIdFromClick + ($n-1); // По диагонали (из левого верхнего угла) $nordWest = $blockIdFromClick - ($n+1); $southEast = $blockIdFromClick + ($n+1) Как быть с клетками по краям ? Есть ли какой алгоритм? А то приходит в голову только сравнение остатка от деления числа на разрядность сетки (в данном случае 5) :)
Да, можно использовать остаток от деления для определения клеток по краям доски. Например, для доски 5 на 5:
Вертикальные соседи:
Для верхнего ряда: не учитывать клетки с индексами $n и меньшеДля нижнего ряда: не учитывать клетки с индексами больше $n^2 - $n
Горизонтальные соседи:
Для левого столбца: не учитывать клетки с индексами кратными $nДля правого столбца: не учитывать клетки с индексами кратными $n + 1
Диагональные соседи:
Для верхнего левого угла: не учитывать клетки с индексами $n-1 и меньшеДля верхнего правого угла: не учитывать клетки с индексами кратными $n + 1Для нижнего левого угла: не учитывать клетки с индексами $n^2 - $n и меньшеДля нижнего правого угла: не учитывать клетки с индексами больше $n^2
Таким образом, используя остаток от деления, можно определить правильно соседние клетки на краях доски.
Да, можно использовать остаток от деления для определения клеток по краям доски. Например, для доски 5 на 5:
Вертикальные соседи:
Для верхнего ряда: не учитывать клетки с индексами $n и меньшеДля нижнего ряда: не учитывать клетки с индексами больше $n^2 - $nГоризонтальные соседи:
Для левого столбца: не учитывать клетки с индексами кратными $nДля правого столбца: не учитывать клетки с индексами кратными $n + 1Диагональные соседи:
Для верхнего левого угла: не учитывать клетки с индексами $n-1 и меньшеДля верхнего правого угла: не учитывать клетки с индексами кратными $n + 1Для нижнего левого угла: не учитывать клетки с индексами $n^2 - $n и меньшеДля нижнего правого угла: не учитывать клетки с индексами больше $n^2Таким образом, используя остаток от деления, можно определить правильно соседние клетки на краях доски.