private static Bitboard[] InitializeConnections() { var result = new Bitboard[ChessConstants.SquareCount * ChessConstants.SquareCount]; result.Initialize(i => Bitboard.Everything); for (var squareIndex = 0; squareIndex < ChessConstants.SquareCount; squareIndex++) { var source = Bitboard.FromSquareIndex(squareIndex); foreach (var direction in AllDirections) { var current = source; var connection = Bitboard.None; while ((current = current.Shift(direction)).IsAny) { var anotherSquareIndex = current.FindFirstSquareIndex(); var index = GetConnectionIndex(squareIndex, anotherSquareIndex); var reverseIndex = GetConnectionIndex(anotherSquareIndex, squareIndex); result[index] = result[reverseIndex] = connection; connection |= current; } } } return(result); }