COLORREF CCADlg::f(COLORREF y, COLORREF yU, COLORREF yUR,
COLORREF yR, COLORREF yDR, COLORREF yD, COLORREF yDL,
COLORREF yL, COLORREF yUL)
{
// Переменная содержит единицу только в бите,
// соответствующем рассматриваемой плоскости
COLORREF b=1;
// Переменная, в которой сохраняется число живых
// соседей клетки на рассматриваемой плоскости
int i;
// Цикл для перебора всех 24 плоскостей
for (BYTE it=0;it<24;it++) {
// Вычисление числа соседей
i=((yU&b)?1:0)+((yUR&b)?1:0)+((yR&b)?1:0)+((yDR&b)?1:0)+
((yD&b)?1:0)+((yDL&b)?1:0)+((yL&b)?1:0)+((yUL&b)?1:0);
// Мертвая клетка оживет, если у нее три живых
// соседа
if ((y&b)==0 && i==3) y|=b; else
// Живая клетка останется живой, если у нее два
// или три живых соседа
if ((y&b)!=0 && (i==2 || i==3)) y|=b; else
// В остальных случаях клетка мертва
y&=(~b);
// Рассматриваемая плоскость заменяется на следующую
b<<=1;
}
return y;
}