当棋盘以多种位板的形式存储时,现代国际象棋引擎是如何识别特定单元格中的棋子类型/方面的?我在这方面遇到了一些问题,因为我必须始终执行以下操作才能找出特定位上的棋子类型/方面:
if((bit_check & occupied) == 0ULL) ... // empty
else if((bit_check & white) != 0ULL) // white
if((bit_check & white_pawns) != 0ULL) ... // white pawns
else if((bit_check & white_rooks) != 0ULL) ... // white rooks
....
else if((bit_check & white_kings) != 0ULL) ... // white kings
else if((bit_check & black) != 0ULL) // black
if((bit_check & black_pawns) != 0ULL) ... // black pawns
....
else if((bit_check) & black_kings) != 0ULL) ... // black kings
这是一个相当繁琐的过程,需要多次执行(例如,在生成移动时查看被捕获的内容)。我不确定是否应该继续使用这种方法,或者是否更快速地创建一个类型为Piece[64]
的64数组,它将固有地存储棋子类型。
考虑到在搜索函数中进行捕获分析需要执行数百万次,哪种方法更好?我做错了吗?