sbk
Сообщений: 144
Оценки: 0
Присоединился: 2008-12-20 19:01:57.273333
|
В общем занялся я написанием игры "Жизнь", но где-то в алгоритме допустил ошибку, а вот где именно сам не могу найти, поэтому прошу вашей помощи. Вот Код обхода матрицы:
for (int i = 0; i < 800 / 5; i++)
for (int j = 0; j < 800 / 5; j++)
{
int neighbors = getNeighborsCount(i, j);
if (neighbors == 3 && !isAliveAt(i, j)) map[i, j] = true;
else if (neighbors == 3 || neighbors == 2 && isAliveAt(i, j)) map[i, j] = map[i, j];
else if (neighbors < 2 || neighbors > 3 && isAliveAt(i, j)) map[i, j] = false;
}
Код ф-ции "getNeighborsCount":
int getNeighborsCount(int x, int y)
{
int count = 0;
if (isAliveAt(x - 1, y - 1)) count++;
if (isAliveAt(x + 1, y + 1)) count++;
if (isAliveAt(x - 1, y + 1)) count++;
if (isAliveAt(x + 1, y - 1)) count++;
if (isAliveAt(x, y + 1)) count++;
if (isAliveAt(x, y - 1)) count++;
if (isAliveAt(x + 1, y)) count++;
if (isAliveAt(x - 1, y)) count++;
return count;
}
Код ф-ции "isAliveAt":
bool isAliveAt(int x, int y)
{
return (x > 0 && x < 800 / 5 && y > 0 && y < 800 / 5) && map[x, y];
}
Ф-ция "getNeighborsCount" возвращает количество живых "соседей" у клетки (х, у). Ф-ция "isAliveAt" проверяет жива ли клетка (х, у). Проблема вот в чём: если нарисовать планер , то он после следующего обхода матрицы превращается в неподвижную фигуру. А если нарисовать фигуру где приблизительно 100-150 живых точек, то со временем живые точки "захватят" весь экран.
|