Итак, я пытаюсь построить игру в программе жизни, и я достаточно свеж для java/кодирования вообще, и у меня возникают проблемы, обертывающие мою голову вокруг обертывания в 2D-массивах. У меня есть конструктор и методы, которые построят мне массив и помещают «ячейки» туда, где я хочу их, но я не понимаю, как я могу видеть, сколько соседей имеет ячейка.Подсчет соседей с обертыванием в 2-мерном массиве (игра жизни)
Подводя итог:
я могу сделать 2D массив любого типа.
я могу поставить «клетку» в различных элементах в массиве
Теперь, как я вижу пространство рядом с моей ячейкой проверяемой имеют сосед по всей стороне (я использую вложенный цикл, чтобы пройти через каждый клетки)?
KEEP IN MIND! Здесь действует обтекание.
ОБНОВЛЕНИЕ: Это то, что у меня есть, но когда я проверяю его, он возвращает 1 меньше соседа, чем должно быть. UPDATE 2: Я удалил первое заявление if, потому что я не думаю, что это имеет смысл с ним. Но теперь я не могу получить гр идти 1.
public int neighborCount(int row, int col) {
int count = 0;
for (int r = 0; r < society.length; r++) {
for (int c = 0; c < society[0].length; c++) {
// up and left
if ((society[(r - 1 + row) % row][(c - 1 + col) % col]) == cell) {
count++;
}
// up
if ((society[(r - 1 + row) % row][c]) == cell) {
count++;
}
// up and right
if ((society[(r - 1 + row) % row][(c + 1 + col) % col]) == cell) {
count++;
}
// left
if ((society[r][(c - 1 + col) % col]) == cell) {
count++;
}
// right
if ((society[r][(c + 1 + col) % col]) == cell) {
count++;
}
// down and left
if ((society[(r + 1 + row) % row][(c - 1 + col) % col]) == cell) {
count++;
}
// down
if ((society[(r + 1 + row) % row][c]) == cell) {
count++;
}
// down and right
if ((society[(r + 1 + row) % row][(c + 1 + col) % col]) == cell) {
count++;
}
}
}
return count;
}
Мой тест:
@Test
public void testNeighborsWrapping() {
GameOfLife society = new GameOfLife(10, 16);
society.growCellAt(3, 3);
society.growCellAt(3, 4);
society.growCellAt(3, 5);
assertEquals(0, society.neighborCount(2, 1));
assertEquals(1, society.neighborCount(2, 2));
assertEquals(2, society.neighborCount(2, 3));
assertEquals(3, society.neighborCount(2, 4));
}
}
Почему вы просто не проверяете каждую ячейку вручную? –
Ну, мне нравится, когда мой метод делает это для меня, поэтому я могу просто сказать, иди, и все идет. – Tejas
В вашем методе вы проверяете каждую (окружающую) ячейку вручную. –