Обертывание игры жизни Конвея C++

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

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

Следующая функция предназначена для подсчета количества соседних ячеек. Работает для координат не на ребрах, но и не для тех что есть. Например, если есть точки (0, 10), (0, 11) и (0, 12), а в функцию передано (0, 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;
    } 

person Community    schedule 18.09.2015    source источник
comment
Вы использовали отладчик?   -  person Amit    schedule 18.09.2015
comment
Ваш первый цикл не ограничен доской, поэтому вы читаете за ее пределами, когда находитесь на границе.   -  person molbdnilo    schedule 18.09.2015
comment
Как это не привязано к доске?   -  person    schedule 18.09.2015


Ответы (1)


Вы можете применить эту формулу к индексам:

 (x + max) % max

Это сделает -1 = 7 (обернуть вокруг), а 8 будет 0.

person Andrey    schedule 18.09.2015