Can some please explain this Function in an algorithmic term. The sequence of how it works.

void Grid::nextRule()

{

int numSurrounding = 0;

bool tempGrid [height][width];

for (int i = 0; i < height ; i++)

{

for (int j = 0; j < width ; j++)

{

if ( (i+1) < height && grid[i + 1][j] == true )

{

numSurrounding++;

}

if ( (i-1) >= 0 && grid[i – 1][j] == true )

{

numSurrounding++;

}

if ( (j+1) < width && grid[i][j+1] == true )

{

numSurrounding++;

}

if ( (j-1) >= 0 && grid[i][j-1] == true )

{

numSurrounding++;

}

if ( (i+1) < height && (j+1) < width && grid[i+1][j+1] == true )

{

numSurrounding++;

}

if ( (i+1) < height && (j-1) >= 0 && grid[i+1][j-1] == true )

{

numSurrounding++;

}

if ( (i-1) >= 0 && (j+1) < width && grid[i-1][j+1] == true )

{

numSurrounding++;

}

if ( (i-1) >= 0 && (j-1) >= 0 && grid[i-1][j-1] == true )

{

numSurrounding++;

}

//Applying the rules of the game base on the result of the surrounding neighbor cell

// if neighbor cell is < 2 the base cell dies from isolation, if the neighbor > 3 the base cell dies from overpopulation

if (numSurrounding < 2 || numSurrounding > 3)

{

tempGrid[i][j] = false;

}

else if (numSurrounding == 2) // if the neighbor cell is equal to 2 then birth is given to the dead cell

{

tempGrid[i][j] = grid[i][j];

}

else if (numSurrounding == 3) // if the neighbor cell is equal to 3 then the base cell survive for the next generation

{

tempGrid[i][j] = true;

}

numSurrounding = 0;

}

}

for (int i = 0 ; i < height ; i++ )

{

for (int j = 0 ; j < width ; j++ )

{

grid[i][j] = tempGrid[i][j];

}

}

}