2012/07/28
■ Bitboardによる手の生成(駒を取る手)
駒を取る銀の手の生成。隣接手は簡単。
target=p->bitboard[WHITE][P_OCCUPY]; // 相手駒の位置
org=p->bitboard[BLACK][piece];
while ( test128(org) ) { // 駒がある
from=bit_fscan(&org); // 駒位置
bit_reset(org,from); // 駒を消す
t.x=and128(attack_gin_b[from],target); // 先手銀の利きのbitboardを押し付ける
while ( test128(t) ) { // 利きのある数
to=bit_fscan(&t); // 移動先の位置
bit_reset(t,to); // 移動先を消す
pin_check()
手の格納
}
}
飛び駒の取る手生成には、邪魔駒の判定が必要(相手駒へ利きがあるか)。
target=p->bitboard[WHITE][P_OCCUPY]; // 相手駒の位置
t.x=and128(slider_attack[from],target); // 先手飛び駒の利きのbitboardを押し付ける
while ( test128(t) ) { // 利きのある数
to=bit_fscan(&t); // 移動先の位置
bit_reset(t,to); // 移動先を消す
t.x=and128(slider_attack[from],slider_opposite[to]); // 間の枡を抽出
if ( !andtest128(t,p->occ) ) { // 邪魔駒が無い
pin_check()
手の格納
}
}

