【发布时间】:2025-12-29 06:00:12
【问题描述】:
当棋盘存储在各种位板中时,现代国际象棋引擎如何识别特定单元格上的类型/边子?我对此有疑问,因为要找出特定位的类型/侧面,我必须始终这样做:
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 位数组是否会更快,这将固有地存储片段类型。
考虑到必须进行数百万次才能在搜索功能中进行捕获分析,这会更好。我做错了吗?
【问题讨论】:
-
如何将该测试级联放入一个单独的函数中,而不是在需要时重复代码?
-
@πάνταῥεῖ 我知道,这是关于操作时间,而不是外观。
标签: c++ c++11 if-statement chess bitboard