private static int CountAliveNeighbours(Matrix <bool> matrix, int x, int y)
        {
            var aliveCount = 0;

            var cubeCoords      = HexHelper.ConvertToCube(x, y);
            var offsetsImplicit = HexHelper.GetOffsetClockwise();
            var offsetsDiagonal = HexHelper.GetDiagonalOffsetClockwise();
            var offsets         = offsetsImplicit.Union(offsetsDiagonal);

            foreach (var offset in offsets)
            {
                var neighbour = cubeCoords + offset;

                var offsetCoords = HexHelper.ConvertToOffset(neighbour);

                var nX = offsetCoords.X;
                var nY = offsetCoords.Y;

                // Границу мертвым живым соседом.
                // Сделано, чтобы углы не заполнялись.

                if (nX >= 0 && nY >= 0 && nX < matrix.Width && nY < matrix.Height)
                {
                    if (matrix.Items[nX, nY])
                    {
                        aliveCount++;
                    }
                }
            }

            return(aliveCount);
        }