Я пытаюсь написать программу, которая реализует игру жизни Конвея на доске 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, а не на 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
чтобы убедиться, что индекс положительный.