使用变量std::vector<bool> cells
表示我所有的单元格,以表示true
代表活细胞的单元格。要更新画布,我有一个变量std::vector<int> neighborCounts
,其中neighborCounts[i]
表示有多少活着的邻居cell[i]
。在更新循环中,我循环遍历所有单元格,如果它是一个活动单元格,我将1添加到所有相邻单元格的neighborCounts
。然后在确定所有邻居之后,我再次循环遍历所有单元并基于其具有的邻居的数量执行更新。
std::vector<int> neighborCounts(NUM_ROWS * ROW_SIZE, 0);
for (int x = 0; x < ROW_SIZE; x++)
{
for (int y = 0; y < NUM_ROWS; y++)
{
if (cells[convertCoord(x, y)])
{
for (int m = x - 1; m <= x + 1; m++)
{
for (int n = y - 1; n <= y + 1; n++)
{
if (!(m == x && n == y) && m >= 0 && m < ROW_SIZE && n >= 0 && n < NUM_ROWS)
{
neighborCounts[convertCoord(m, n)] += 1;
}
}
}
}
}
}
for (int x = 0; x < ROW_SIZE; x++)
{
for (int y = 0; y < NUM_ROWS; y++)
{
int coord = convertCoord(x, y);
int numNeighbors = neighborCounts[coord];
if (cells[coord])
{
if (numNeighbors < 2)
{
cells[coord] = false;
}
else if (numNeighbors > 3)
{
cells[coord] = false;
}
}
else
{
if (numNeighbors == 3)
{
cells[coord] = true;
}
}
}
}
然后在渲染功能中,我循环遍历所有单元格,如果它活着,我将它绘制到屏幕上。
这似乎是最简单的方法,但是进一步优化的空间肯定存在。粉末玩具和其他应用程序如何管理大量粒子,但仍然能够运行得非常流畅?在Conway的生命游戏中管理所有细胞的最有效方法是什么?