Обертывание в переполнении стека игры жизни Конвея

Я пытаюсь написать программу, которая реализует игру жизни Конвея на доске 20×60. Сетка обернется, так что левая сторона будет соединена с (соседней) правой стороной, а верхняя часть будет соединена с нижней.

Таким образом, любая клетка с положением (1, col), будет сосед в (maxRow, col), Любая ячейка с позицией (row, 1) будет сосед в (row, maxCol),

Следующая функция должна подсчитывать количество соседних ячеек. Это работает для координат не по краям, но не для тех, которые есть. Например, если есть точки на (1, 10), (1, 11), а также (1, 12) а также (1, 10) передается в функцию, она будет возвращать большое число как число соседей вместо 1,

{
int i, j;
int count = 0;
for (i = row - 1; i <= row + 1; i++)
for (j = col - 1; j <= col + 1; j++)
count += grid[i][j]; }

if (row==maxrow-1 || row==0)
count = count+ grid [(row-(maxrow-1))*-1][col-1]+grid[(row-(maxrow-1))*-1][col]+grid[(row-(maxrow-1))*-1][col+1];

if (col==0 || col==maxcol-1)
count=count +grid[row-1][(col-(maxcol-1))*-1]+grid[row][(col-(maxcol-1))*-1]+grid[row+1][(col-(maxcol-1))*-1];count -= grid[row][col];
return count;
}

0

Решение

Во-первых, я бы изменил сетку на 0, а не на 1.

Тогда вы можете написать простой цикл:

int count = 0;
for (i = row - 1; i <= row + 1; i++) {
for (j = col - 1; j <= col + 1; j++) {
if(i != row && j != col) {
count += grid[(i + maxrow)%maxrow][(j + maxcol)%maxcol];
}
}
}

+ maxrow чтобы убедиться, что индекс положительный.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector