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;
}
445