当棋盘存储在各种位板中时,现代国际象棋引擎如何识别特定单元格上的类型/边子?我对此有疑问,因为要找出特定位的类型/侧面,我必须始终这样做:
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
这是一个相当乏味的过程,并且必须执行多次(例如,在移动生成期间查看正在捕获的内容)。我不确定我是否应该这样做,或者简单地创建一个类型为 64 的数组是否会更快Piece[64]
,这将固有地存储片段类型。
考虑到它必须是数百万次才能在搜索功能中进行捕获分析,这会更好。我做错了吗?